[英]Why tensorflow may want to specify dynamic dimension
我有一个现有的复杂模型。 里面有形状为 (None, 128, 128, 3) 的张量x
。 第一个轴具有动态形状,应在将批处理传递给session.run
feed_dict
时实现。 但是,当我尝试将广播操作定义为 x 的形状时:
y = tf.broadcast_to(z, (x.shape[0], x.shape[1], x.shape[2], 1))
引发异常:
Failed to convert object of type <class 'tuple'> to
Tensor. Contents: (Dimension(None), Dimension(128),
Dimension(128), 1). Consider casting elements to a supported type.
创建模型时发生异常,而不是运行它时。 将第一个元素转换为数字有帮助,但这不是解决方案。
.shape
属性为您提供图形构建时已知的形状,这是一个tf.TensorShape
结构。 如果x
的形状是完全已知的,你可以让你的代码如下工作:
y = tf.broadcast_to(z, (x.shape[0].value, x.shape[1].value, x.shape[2].value, 1))
但是,在您的情况下, x
具有未知的第一维。 为了将实际张量形状用作常规tf.Tensor
(仅在运行时已知值),您可以使用tf.shape
:
x_shape = tf.shape(x)
y = tf.broadcast_to(z, (x_shape[0], x_shape[1], x_shape[2], 1))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.