Numpy Keras模型形状不兼容/值错误:形状(无,3)和(无,3,3)不兼容
我试图训练我的keras模型,但形状不兼容。 错误是Numpy Keras模型形状不兼容/值错误:形状(无,3)和(无,3,3)不兼容,numpy,tensorflow,keras,reshape,tf.keras,Numpy,Tensorflow,Keras,Reshape,Tf.keras,我试图训练我的keras模型,但形状不兼容。 错误是 ValueError: Shapes (None, 3) and (None, 3, 3) are incompatible 我的火车组的形状是(2000,3768),标签的形状是(2000,3) 问题出在哪里 模型定义与拟合代码 input_shape = x_train.shape[1:] model = my_dnn(input_shape, 3) model.fit(x_train, y_train, epochs=25, verb
ValueError: Shapes (None, 3) and (None, 3, 3) are incompatible
我的火车组的形状是(2000,3768),标签的形状是(2000,3)
问题出在哪里
模型定义与拟合代码
input_shape = x_train.shape[1:]
model = my_dnn(input_shape, 3)
model.fit(x_train, y_train, epochs=25, verbose=1)
模型代码
def my_dnn(input, num_classes):
model = Sequential()
model.add(tf.keras.Input(input))
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dense(225))
model.add(Activation('relu'))
model.add(Dense(100))
model.add(Activation('relu'))
model.add(Dense(num_classes))
model.add(Activation('sigmoid'))
model.compile( loss='categorical_crossentropy',
optimizer='adam',
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
return model
可能有两个原因:
softmax
而不是sigmoid
+准确度
或分类准确度()
binary\u crossentropy
和tf.keras.metrics.binaryAccurance()
此外,Marco Cerliani和Amir(在下面的评论中)指出,数据输出需要采用2D格式,而不是3D格式:您应该在将数据传送到网络之前对其进行相应的预处理,或者按照下面的评论中的建议,在某个点(可能在最终的
密集()
之前)使用展平()除了上面所说的,您似乎一直在携带输入数据的第二维度,直到模型结束。因此,您的模型摘要如下所示:
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 3, 1024) 787456
_________________________________________________________________
activation_1 (Activation) (None, 3, 1024) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 3, 1024) 0
_________________________________________________________________
dense_2 (Dense) (None, 3, 512) 524800
_________________________________________________________________
activation_2 (Activation) (None, 3, 512) 0
_________________________________________________________________
dense_3 (Dense) (None, 3, 225) 115425
_________________________________________________________________
activation_3 (Activation) (None, 3, 225) 0
_________________________________________________________________
dense_4 (Dense) (None, 3, 100) 22600
_________________________________________________________________
activation_4 (Activation) (None, 3, 100) 0
_________________________________________________________________
dense_5 (Dense) (None, 3, 3) 303
_________________________________________________________________
activation_5 (Activation) (None, 3, 3) 0
=================================================================
Total params: 1,450,584
Trainable params: 1,450,584
Non-trainable params: 0
如您所见,模型的输出形状(无,3,3)
与标签的形状(无,3)
不兼容,在某些情况下,您需要使用展平
层。它不应该是softmax
而不是sigmoid
?您的问题是多标签还是多类问题?您的y是热编码的吗?您不能使用SPARSECATEGORICALCACURACY()
,但需要CategoricalAccuracy()
如果您有一个热编码标签(形状(批次,3)),这是正确的。。。网络也是错误的。。。当网络生成3D时,输出为2D