【问题标题】:Error while feeding images to TensorFlow graph将图像馈送到 TensorFlow 图时出错
【发布时间】:2016-12-02 03:14:52
【问题描述】:

我正在尝试将一些图像加载到 TensorFlow 图形中,它们是 RGB,但是我希望图形在处理之前将它们转换为灰度。

x = tf.placeholder(tf.float32, shape=[None, 32, 32, 1], name='x')

gray = tf.image.rgb_to_grayscale(x, name='grayscale')

但是我得到了错误

ValueError: Cannot feed value of shape (250, 32, 32, 3) for Tensor 'x:0', which has shape '(?, 32, 32, 1)'

为了完整和简洁,我导出了带有错误的 notebook 并将其作为 md 文件上传到 Github

我意识到错误是因为 x_batch 是 RGB 形状。

但是我认为TensorFlow 会自动进行转换。

由于tf.image.rgb_to_grayscale 包装了输入,TF 不应该将grayscaling 作为会话的一部分吗?

还是我误解了它的工作原理?

【问题讨论】:

  • 如果你想输入 RGB 图像,你需要一个形状为 [None, 32, 32, 3] 的占位符。然后就可以进行灰度化了。
  • @OlivierMoindrot 所以 tf.image.rgb_to_grayscale 将在没有任何进一步代码的情况下进行灰度化?如何确保处理的是灰色图像?
  • 因此,如果您将 RGB 图像输入占位符,然后应用 gray = tf.image.rgb_to_grayscale(x),则输出的形状将是 [None, 32, 32, 1],并将包含灰色图像。如果你想确定,你可以检查gray的形状。
  • @OlivierMoindrot - 你能提升你对答案的评论吗?谢谢!
  • @dga:完成。您是否正在尝试清理 tensorflow 标签?

标签: numpy tensorflow conv-neural-network grayscale


【解决方案1】:

函数tf.image.rgb_to_graycale 需要一个输入张量,其最后一维的大小为 3。例如,在您的情况下是一批形状为 (250, 32, 32, 3) 的图像,或者它可能是形状为 (32, 32, 3) 的单个图像。

如果你想输入 RGB 图像并立即将它们处理为灰度,你可以这样做:

images = tf.placeholder(tf.float32, shape=[None, 32, 32, 3])
gray_images = tf.image.rgb_to_grayscale(images)  # has shape (None, 32, 32, 1)

【讨论】:

    【解决方案2】:

    错误是因为您要加载 RGB 图像以进行 RGB2 灰度转换,但在占位符中

    x = tf.placeholder(tf.float32, shape=[None, 32, 32, 1], name='x')

    x被定义为单一维度,将1改为3,错误将被消除。

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多