为什么在Keras神经网络中的最后一个完全连接/致密的层也希望具有2个DIM,即使其输入具有更大的尺寸



我正在尝试与凯拉斯(Keras(的神经网络一起使用FIRS时间,并且与所期望的尺寸有些混淆。我确定我的x_train和y_train数据具有相同的维度,并且x_test和y_test数据也具有相同的维度,但是我从keras那里获得了此错误:

检查输入时的错误:预期的密度_38_input具有2个维度,但具有形状的数组(1,512,512,186,1(

我尝试使用(-1、2(重塑培训和验证数据集以匹配它所期望的两个维度,但这不起作用,我不确定为什么。

这是我正在尝试的培训模型

num_classes = 2
input_shape = (512, 512, 186, 1)
model = Sequential()
model.add(Conv3D(32, kernel_size=(5, 5, 5), strides=(1, 1, 1),
                 activation='relu',
                 input_shape=input_shape))
model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2)))
model.add(Conv3D(64, (5, 5, 5), 
                 activation='relu'))
model.add(MaxPooling3D(pool_size=(2, 2, 2)))
model.add(Flatten())
model.add(Dense(1000, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

我希望简单地使神经网络无错误地运行,但我不确定如何操纵我的数据集的维度以获得培训模型的适当维度/形状。

我确定我的x_train和y_train数据是相同的维度

如果您的yX数据上是尺寸等级的,则输出形状必须与输入形状相同。我猜您希望您需要在预测(最后一个(层中指定的输出形状:在2类之间预测的输出。在这种情况下,您的 y形状应为尺寸(num_samples,2(。

为了清晰:

+---+------------------+------------------+-------------------------+
|   |  Dataframe shape | Data-point shape | Shape to assign network |
+---+------------------+------------------+-------------------------+
| X | (1000,244,244,3) |   (1,244,244,3)  |    input: (244,244,3)   |
+---+------------------+------------------+-------------------------+
| y |     (1000,2)     |       (1,2)      |       output: (2)       |
+---+------------------+------------------+-------------------------+

而不是:

model.add(Flatten())

使用此:

model.add(GlobalAveragePooling3D())

基本上model.add(Desnse()),期望2个昏暗的,即(batch_size,channels(,这与GlobalAveragePooling3D()的输出相同。

最新更新