在 TensorFlow 中将一批张量重塑为一批向量
Reshape batch of tensors into batch of vectors in TensorFlow
在创建计算图时,我有一个张量 x
例如形状为 [-1, a, b, c]
,我想将其重塑为 [-1, a*b*c]
我试过这样做:
n = functools.reduce(operator.mul, x.shape[1:], 1)
tf.reshape(x, [-1, n])
但是我有一个错误:
TypeError: unsupported operand type(s) for *: 'int' and 'Dimension'
我的问题是:TensorFlow有什么东西可以做这个操作吗?
如错误消息所示,类型有问题。如果您创建一个 TensorFlow 占位符,例如与
>>> import tensorflow as tf
>>> x = tf.placeholder(tf.float16, shape=(None, 3,7,4))
并对其调用shape
,则return值为
>>> x.shape
TensorShape([Dimension(None), Dimension(3), Dimension(7), Dimension(4)])
每个元素都是一个
>>> x.shape[1]
<class 'tensorflow.python.framework.tensor_shape.Dimension'>
即TensorFlow 的 Dimension
class。自然地,operator.mul
函数不知道如何处理这样的类型。幸运的是,tf.TensorShape
有一个 as_list()
函数,它 return 将形状作为整数列表。
>>> x.shape.as_list()
[None, 3, 7, 4]
这样,您就可以计算出元素的数量 n
,就像您习惯的那样:
>>> import functools, operator
>>> n = functools.reduce(operator.mul, x.shape.as_list()[1:], 1)
>>> n
84
>>> y = tf.reshape(x, [-1, n])
在创建计算图时,我有一个张量 x
例如形状为 [-1, a, b, c]
,我想将其重塑为 [-1, a*b*c]
我试过这样做:
n = functools.reduce(operator.mul, x.shape[1:], 1)
tf.reshape(x, [-1, n])
但是我有一个错误:
TypeError: unsupported operand type(s) for *: 'int' and 'Dimension'
我的问题是:TensorFlow有什么东西可以做这个操作吗?
如错误消息所示,类型有问题。如果您创建一个 TensorFlow 占位符,例如与
>>> import tensorflow as tf
>>> x = tf.placeholder(tf.float16, shape=(None, 3,7,4))
并对其调用shape
,则return值为
>>> x.shape
TensorShape([Dimension(None), Dimension(3), Dimension(7), Dimension(4)])
每个元素都是一个
>>> x.shape[1]
<class 'tensorflow.python.framework.tensor_shape.Dimension'>
即TensorFlow 的 Dimension
class。自然地,operator.mul
函数不知道如何处理这样的类型。幸运的是,tf.TensorShape
有一个 as_list()
函数,它 return 将形状作为整数列表。
>>> x.shape.as_list()
[None, 3, 7, 4]
这样,您就可以计算出元素的数量 n
,就像您习惯的那样:
>>> import functools, operator
>>> n = functools.reduce(operator.mul, x.shape.as_list()[1:], 1)
>>> n
84
>>> y = tf.reshape(x, [-1, n])