【问题标题】:Error fitting images into Conv2D layer in tensorflow Keras在张量流 Keras 中将图像拟合到 Conv2D 层时出错
【发布时间】:2019-05-26 05:43:32
【问题描述】:

我正在 keras 中构建 CNN,但无法输入我的数据。

我的图像的形状为 (-1, 40, 52, 1)。我已经尝试通过 inputLayer 层来拟合它们(这也需要 4 个维度,但最终会为我的 conv 层提供 5D 输入。

...
train_images.reshape(-1, 40, 52, 1)
test_images.reshape(-1, 40, 52, 1)

#Model
num_classes = 10
model = keras.Sequential()

model.add(keras.layers.InputLayer(input_shape=[1,40,52,1]))
model.add(keras.layers.Conv2D(filters = 32, kernel_size=5, strides=1, padding ='same', activation='relu'))
model.add(keras.layers.MaxPooling2D(pool_size=5, padding='same'))

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512, activation='relu'))
model.add(keras.layers.Dense(num_classes, activation='softmax'))
model.summary()


#Compile model
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
          loss='categorical_crossentropy',
          metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=10, validation_data= 
(test_images, test_labels), verbose=1)

我正在寻找一种适合我的图像的方法。但是当我运行它时,我得到了错误:

ValueError:conv2d 层的输入 0 与该层不兼容:预期 ndim=4,发现 ndim=5。收到的完整形状:[None, 1, 40, 52, 1]

【问题讨论】:

    标签: python numpy tensorflow keras


    【解决方案1】:

    不用加batch_size:

    model.add(keras.layers.InputLayer(input_shape=[40,52,1]))
    

    【讨论】:

    • 我试过了。所做的只是引发另一个错误:ValueError: Error when checks input: expected input_1 to have 4 dimensions, but got array with shape (1, 40, 52)
    • @JohnDoe 你的train_images 不是(?,40,52,1)train_images的形状是什么?
    • 当我运行 train_images.shape 我得到 (1, 40, 52)
    • @JohnDoe 所以您的输入需要调整为 (?,40,52,1)。您的模型没有问题。
    • @JohnDoe 将reshape 的结果重新分配给train_imagestest_images,如下所示:train_images = train_images.reshape(-1, 40, 52, 1)
    【解决方案2】:

    感谢您的反馈,但我选择了另一种方法。

    一维数组被分割成 2 个,并制成一个二维“图像”,如下所示:

    [[1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]]
    

    代替:

    [1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
    

    这从

    重塑了我的数据库

    -1, 40, 52, 1

    收件人:

    -1、2、26、1

    然后我就修复了我的输入层: model.add(keras.layers.InputLayer(input_shape=[2,26,1]))

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多