繁体   English   中英

为什么即使输入的维数较大,keras神经网络中最后一个完全连接/密集的层也希望具有2个暗角?

[英]Why does the last fully-connected/dense layer in a keras neural network expect to have 2 dim even if its input has more dimensions?

我在第一时间尝试使用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'))

我希望简单地使神经网络运行而不会出错,但是我不确定如何操纵数据集的尺寸以获取适合训练模型的尺寸/形状。

我确定我的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()的输出相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM