在第一时间,我正在尝试使用带有keras的神经网络,并且与预期的尺寸有些混淆。我确定我的X_train和y_train数据具有相同的维度,并且X_test和y_test数据也具有相同的维度,但是我从keras中得到了这个错误:
检查输入时出错:预期density_38_input具有2维,但数组的形状为(1、512、512、186、1)
我尝试用(-1,2)重塑训练和验证数据集,以匹配期望的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'))
我希望简单地使神经网络运行而不会出错,但是我不确定如何操纵数据集的尺寸以获取适合训练模型的尺寸/形状。
答案 0 :(得分:1)
我确定我的X_train和y_train数据的维数相同
如果您的y
与X
数据在尺寸上等距,则您的输出形状必须与输入形状相同。我猜想您想要在预测(最后)层中指定的输出形状:在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) |
+---+------------------+------------------+-------------------------+
答案 1 :(得分:0)
代替:
model.add(Flatten())
使用此:
model.add(GlobalAveragePooling3D())
基本上model.add(Desnse())
会产生2个暗度,即(batch_size,channel),与GlobalAveragePooling3D()
的输出相同。