ValueError:必须完全定义新变量的形状(local1 / weights),但其形状是(?,1000)

时间:2018-10-29 19:36:24

标签: python tensorflow

我是Tensorflow的新手。卷积后,层的形状为shape=(5, 5, 5, 5), dtype=float32,但是当我应用反卷积时,得到的形状像shape=(?, 25, 25, 640)dtype=float32.一样,这意味着在反卷积后批次大小未正确显示(?符号)。对于反卷积,我使用了此Deconvolution函数。

  

错误 ValueError:新变量的形状(local1 / weights)必须为   完全定义,但改为(?,1000)。

我已经尝试过example1,但效果不佳

3 个答案:

答案 0 :(得分:1)

区别在于您发送的示例是张量,将错误的数据提供给它。您的问题是反卷积滤波器的权重尚未完全定义。重量不取决于批次大小,并且必须为固定大小,因此会产生错误。我知道您了解该错误,只是想弄清楚您所遇到的问题和示例所遇到的问题完全不同。

我建议改用此function

 tf.nn.conv2d_transpose()

它的定义就像使用普通卷积层一样。它是TensorFlow的默认设置,我想知道为什么您没有使用它作为开始?

答案 1 :(得分:0)

根据使用的Deconvolution函数的描述

  #Now output.get_shape() is equal (?,?,?,?) which can become a problem in the 
  #next layers. This can be repaired by reshaping the tensor to its shape:
  output = tf.reshape(output, output_shape)
  #now the shape is back to (?, H, W, C) or (?, C, H, W)

不应该显示批量大小,因为它的大小未知。这样做是为了保留处理具有不同尺寸(第一尺寸尺寸)的批次的能力。这样您就可以在不同大小的批次上运行模型,例如,训练5张并一次运行预测20张图像。

并完全同意T. Kelher

  

我建议改用此function

tf.nn.conv2d_transpose()

答案 2 :(得分:0)

该问题已解决,并且先前的转置/反卷积代码运行良好。只是我们必须进行一些小的更改。我们必须在输出形状中定义批量大小。