Python 这里的输入形状应该是什么?

Python 这里的输入形状应该是什么?,python,tensorflow,conv-neural-network,Python,Tensorflow,Conv Neural Network,我在将问题发布到堆栈溢出方面没有太多经验。请原谅我的错误。我会尽量做到彻底 我有两个numpy阵列: 具有形状的X(78300、90、90) y形(78300,29) X是一组黑白图像,具有高度和宽度(90,90) y是X对应的编码类标签。(编码如中所示 y=tensorflow.keras.utils.to\u分类(标签)) 我正试图就这些数据对以下CNN进行培训 from tensorflow.keras import utils from tensorflow.keras.optimi

我在将问题发布到堆栈溢出方面没有太多经验。请原谅我的错误。我会尽量做到彻底

我有两个numpy阵列:

  • 具有形状的X(78300、90、90)
  • y形(78300,29)
    • X是一组黑白图像,具有高度和宽度(90,90)
    • y是X对应的编码类标签。(编码如中所示
      y=tensorflow.keras.utils.to\u分类(标签)
    我正试图就这些数据对以下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:层顺序的输入0与层不兼容::预期的最小值ndim=4,找到的ndim=3。收到完整形状:[无、90、90]

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

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

    重塑
    x
    (添加尺寸):


    什么是
    tf.newshape
    ?我找不到有关的文档that@NicolasGervais这是打字错误。很抱歉请参阅editsI used
    x=tf。展开尺寸(x,轴=-1)
    。原来黑白图像没有通道的形状。谢谢你的帮助。我选择了这个答案作为正确答案。
    x = x[..., tf.newaxis]