【问题标题】:What should be the input_shape here? [duplicate]这里的 input_shape 应该是什么? [复制]
【发布时间】:2021-04-18 13:45:23
【问题描述】:

我没有太多向 Stack Overflow 发问题的经验。原谅我的错误。我会尽量做到彻底。

我有两个 numpy 数组:

  1. X 与形状 (78300, 90, 90)。
  2. y 与形状 (78300, 29)
  • X 是一组具有高度和宽度 (90, 90) 的黑白图像。
  • y 是 X 对应的编码类标签。(编码为 y = tensorflow.keras.utils.to_categorical(labels))

我正在尝试根据这些数据训练以下 CNN。

from tensorflow.keras import utils
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D, BatchNormalization
from tensorflow.keras.callbacks import ModelCheckpoint

model = Sequential()

model.add(Conv2D(64, (3, 3), input_shape=(90, 90, 1), activation='relu'))
model.add(MaxPooling2D((2, 2)))

model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))

model.add(Conv2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))

model.add(BatchNormalization())

model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(1024, activation='sigmoid'))
model.add(Dense(29, activation='softmax'))

我在运行时收到以下错误

n_classes = 29
batch = 64
epochs = 5
learning_rate = 0.001

adam = Adam(lr=learning_rate)

model.compile(optimizer=adam,
              loss='categorical_crossentropy',
              metrics=['accuracy'])

cp_callback = ModelCheckpoint(filepath=os.path.join("/output_dir", "result_folder"),
                              save_weights_only=True,
                              verbose=1)

history = model.fit(x,
                    y,
                    batch_size=batch,
                    epochs=epochs,
                    validation_split=0.1,
                    shuffle=True,verbose=1,
                   callbacks=[cp_callback])

ValueError: Input 0 of layer sequential is incompatible with the layer: : expected min_ndim=4, found ndim=3. Full shape received: [None, 90, 90]

我不知道出了什么问题。 请帮助我。另外,如果您可以链接文档/文章/博客文章/视频,以帮助我了解图层中输入形状的细微差别,那将非常有帮助。

【问题讨论】:

    标签: python tensorflow conv-neural-network


    【解决方案1】:

    形状应该是 (78300, 90, 90, 1)。

    重塑x(添加维度):

    x = x[..., tf.newaxis]
    

    【讨论】:

    • 什么是tf.newshape?我找不到那个文档
    • @NicolasGervais 这是错字。对不起。查看修改
    • 我用过 x = tf.expand_dims(x, axis=-1) 。原来黑白图像没有通道的形状。谢谢您的帮助。我选择了这个答案作为正确答案。
    猜你喜欢
    • 2019-09-23
    • 1970-01-01
    • 2020-11-23
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2021-01-17
    • 2016-05-05
    相关资源
    最近更新 更多