【问题标题】:Input image data to tensorflow placeholder将图像数据输入到 tensorflow 占位符
【发布时间】:2019-03-29 11:39:57
【问题描述】:

我正在使用 keras.datasets.fashion_mnist 数据集,其中包含 28 x 28 灰度图像。我已经构建了一个非常简单的卷积神经网络,它接受定义为的图像占位符:

X = tf.placeholder(tf.float32, [None, 28, 28, INPUT_CHANNELS], name='X_placeholder')

我从形状为(100, 28, 28)<type 'numpy.ndarray'> 开始。这里的 100 代表我选择训练的批量大小。

显然,这里的维度并不一致。我建立的图表也应该适用于 RGB 图像,因此是 INPUT_CHANNEL 维度。不出所料,当我尝试训练时,出现以下错误:

ValueError: Cannot feed value of shape (100, 28, 28) for Tensor u'X_placeholder:0', which has shape '(?, 28, 28, 1)'

对于 TF 和 numpy 来说相对较新,我看不到如何添加那个额外的维度。从各种来源拼凑我的代码后,我不能说我选择了占位符输入形状[None, 28, 28, INPUT_CHANNELS],但我想坚持使用它而不是试图解决它。

问题

如何重塑我的训练数据以匹配预期的占位符维度?

【问题讨论】:

    标签: python numpy tensorflow


    【解决方案1】:

    在 numpy 中:

    您可以使用np.newaxisnp.expand_dimsreshape()添加维度。

    import numpy as np
    
    train_data = np.random.normal(size=(100,28,28))
    print(train_data.shape)
    
    new_a = train_data[...,np.newaxis]
    print(new_a.shape)
    new_a = np.expand_dims(train_data,axis=-1)
    print(new_a.shape)
    new_a = train_data.reshape(100,28,28,1)
    print(new_a.shape)
    
    (100, 28, 28)
    (100, 28, 28, 1)
    (100, 28, 28, 1)
    (100, 28, 28, 1)
    

    在张量流中:

    您可以使用tf.newaxistf.expand_dimstf.reshape 添加维度。

    import tensorflow as tf
    
    train_data = tf.placeholder(shape=(None,28,28),dtype=tf.float64)
    print(train_data.shape)
    
    new_a = train_data[...,tf.newaxis]
    print(new_a.shape)
    new_a = tf.reshape(train_data,shape=(-1,28,28,1))
    print(new_a.shape)
    new_a = tf.expand_dims(train_data,axis=-1)
    print(new_a.shape)
    
    (?, 28, 28)
    (?, 28, 28, 1)
    (?, 28, 28, 1)
    (?, 28, 28, 1)
    

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多