我在使用Keras创建一个密集型机器学习模型时遇到了这个错误
ValueError: Error when checking target: expected dense_3 to have shape (1,) but got array with shape (9,)
这是我的模型设置方式
get_custom_objects().update({'swish': Swish(swish)})model = Sequential()model.add(Dense(33, activation='swish', input_shape=(trainX.shape[1],)))model.add(Dense(33, activation='swish'))model.add(Dense(9, activation='softmax'))#Train Networkmodel.compile(optimizer="adam", loss=keras.losses.sparse_categorical_crossentropy, metrics=["accuracy"])model.fit(trainX, trainY, validation_split=0.2, epochs=3)
trainX 和 trainY 是 pandas DataFrame,其中trainX 有2列,trainY 有9列。
我不确定为什么它显示应为(1,),因为我指定输出层有9个神经元。
任何帮助都将不胜感激。
回答:
来自Keras文档:
当使用sparse_categorical_crossentropy损失函数时,您的目标应该是整数目标。如果您有分类目标,您应该使用categorical_crossentropy。
所以您应该将
model.compile(optimizer="adam", loss=keras.losses.sparse_categorical_crossentropy, metrics=["accuracy"])
替换为
model.compile(optimizer="adam", loss=keras.losses.categorical_crossentropy, metrics=["accuracy"])
这是因为trainY
是一个分类目标,因为它有9列而不是一个整数。