所以,根据documentation,我们可以使用tf.assign和validate_shape = False来改变形状。它确实改变了变量内容的形状,但是你可以从get_shape()得到的形状不会被更新。例如:Tensorflow,将变量更新为任意形状
>>> a = tf.Variable([1, 1, 1, 1])
>>> sess.run(tf.global_variables_initializer())
>>> tf.assign(a, [[1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1]], validate_shape=False).eval()
array([[1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1]], dtype=int32)
>>> a.get_shape()
TensorShape([Dimension(4)])
这是很烦人的,该网络的后来层立足于该变量的get_shape()值,它们的形状。所以,即使实际的形状是正确的,Tensorflow会抱怨尺寸不匹配。那么关于如何更新每个变量的“相信”形状的任何想法?
set_shape也许? –
'set_shape'将尝试根据现有的形状信息进行验证。当_creating_变量时,我会设置'validate_shape = False',在这种情况下,静态形状信息将完全未知(如果需要,可以使用'set_shape'对其进行优化)。 –
我会试一试。谢谢! –