如何将TensorFlow张量转为NumPy数组并解决fft2d报错问题
解决Tensor转numpy数组时的AttributeError问题
问题原因
tf.make_ndarray的作用是将TensorProto(Tensor的协议缓冲区表示)转换为numpy数组,而你传入的是TensorFlow的普通Tensor对象,所以会触发tensor_shape属性不存在的错误。
解决方案
根据你的TensorFlow版本和运行模式,选择以下任意一种方法:
方法1:TensorFlow 2.x 即时执行模式(默认)
直接调用Tensor的.numpy()方法转换为numpy数组:
print("type(pred[2]): ", type(pred[2])) # 用.numpy()替代tf.make_ndarray pred_np = pred[2].numpy() fft2_pre = np.fft.fft2(pred_np)
方法2:TensorFlow 1.x 图模式(或关闭即时执行的TF2.x)
通过会话运行Tensor获取数值:
import tensorflow as tf print("type(pred[2]): ", type(pred[2])) # 创建会话并运行Tensor with tf.Session() as sess: pred_np = sess.run(pred[2]) fft2_pre = np.fft.fft2(pred_np)
或者使用.eval()方法(需在会话上下文内):
pred_np = pred[2].eval(session=sess)
方法3:直接使用TensorFlow内置的FFT2D操作(无需转numpy)
如果不需要转成numpy数组,推荐用TensorFlow原生的tf.signal.fft2d,避免数据格式转换的开销:
# 注意:tf.signal.fft2d要求输入为复数张量,若输入是实数需先转复数 if pred[2].dtype.is_floating: pred_complex = tf.cast(pred[2], tf.complex64) else: pred_complex = pred[2] fft2_pre = tf.signal.fft2d(pred_complex)
内容的提问来源于stack exchange,提问作者Sanjay Gupta
相关产品推荐
相关产品推荐

