TensorFlow:属性错误:'Tensor'对象没有属性'shape'。

21
我有以下使用TensorFlow的代码。在我重新整形列表后,当我尝试打印其形状时,它会显示"AttributeError: 'Tensor' object has no attribute 'shape'"。
# Get the shape of the training data.
print "train_data.shape: " + str(train_data.shape)
train_data = tf.reshape(train_data, [400, 1])
print "train_data.shape: " + str(train_data.shape)
train_size,num_features = train_data.shape

输出:

train_data.shape: (400,) Traceback (most recent call last): File "", line 1, in File "/home/shehab/Downloads/tools/python/pycharm-edu-2.0.4/helpers/pydev/pydev_import_hook.py", line 21, in do_import module = self._system_import(name, *args, **kwargs) File "/home/shehab/Dropbox/py-projects/try-tf/logistic_regression.py", line 77, in print "train_data.shape: " + str(train_data.shape) AttributeError: 'Tensor'对象没有属性'shape'

请问我错过了什么?

3个回答

27

更新:自TensorFlow 1.0以来,tf.Tensor现在具有一个tf.Tensor.shape属性,其返回与tf.Tensor.get_shape()相同的值。


实际上,在TensorFlow 1.0之前的版本中,tf.Tensor没有.shape属性。您应该使用Tensor.get_shape()方法代替:

train_data = tf.reshape(train_data, [400, 1])
print "train_data.shape: " + str(train_data.get_shape())

请注意,通常情况下您可能无法获得 TensorFlow 操作结果的实际形状。在某些情况下,形状将是一个计算出来的值,它依赖于运行计算以找到其值;并且甚至可能从一次运行到另一次运行发生变化(例如,tf.unique() 的形状)。在这种情况下,对于某些维度,get_shape() 的结果可能是 None(或 "?")。


那么,'print "train_data.shape: " + str(train_data.shape)' 是如何输出 'train_data.shape: (400,)' 的呢? - Omar Shehab
3
我假设第一个train_data.shape 是一个NumPy数组。当你重新将 tf.reshape()的结果分配给train_data时,它的类型是一个tf.Tensor - mrry
在APIr.1.0中,tf.Tensor有一个shape属性:https://www.tensorflow.org/api_docs/python/tf/Tensor#shape - tuned
@tuned 感谢您指出这一点!我已经更新了答案以使其更加清晰明了。 - mrry
@mrry 调用 Tensorobject.shape 用于占位符将返回 None 作为维度,我在某个地方看到你回答说调用 tf.shape 可能会有帮助,但它将返回一个张量。难道没有任何方法可以让 tf.shape 返回整数列表吗?我必须提到我不想运行 eval 或 run。 - Green Falcon

2
import tensorflow as tf

train_data.shape 替换为 tf.Session.run(tf.rank(train_data))


0
使用 tf.shape(tensor) 或者 tf.get_shape(tensor)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接