Keras期望二维数组和(1,)形状同时出现

时间:2018-10-01 15:53:20

标签: python-3.x numpy machine-learning keras

我通过以下方式加载喀拉拉邦模型

model = keras.models.load_model('myModel.h5')
model.fit(x,y, batch_size=1, epochs=2)

在最后一行,它显示了一个错误,要求y为2D输入。我y文件的示例是 [0,0,-1] 可以在2D中将其更改为[[0,0,-1]]或[[0],[0],[-1]] 在第一种情况下, 错误:得到了形状为(3,)的数组,其中预期形状为(1,) 在第二种情况下 错误:有3个样本,预期为1

在本训练部分之前,我运行model.predict(),在此期间它给出格式为[[0.00251,-0.00526,0.005476]]的输出

我想念什么?

模型定义

inputs = Input(shape=(32,32,1))
denseModel = DenseNet121(include_top=False, weights=None, input_shape=(32,32,1), pooling='avg')(inputs)
denseModel = Dense(32, activation='relu')(denseModel)
denseModel = BatchNormalization()(denseModel)
denseModelPrediction = Dense(3, activation='tanh', name='predictions')(denseModel)

myModel = Model(inputs=inputs, outputs=denseModelPrediction)
myModel.compile(loss='sparse_categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
myModel.save('myModel.h5')

只需在这里初始化

1 个答案:

答案 0 :(得分:1)

您的损失函数(sparse_categorical_crossentropy)期望您的y值是一种热编码。由于您有三个输出节点,因此损耗期望的形状为(3,)的y值,因此是您的第一个错误。

如果您要回归三个独立概率,建议您将损失切换为比较数字的东西(例如loss='mse'均方误差)。这应该可以解决您的输入形状问题。您可能还需要考虑将输出激活设置为S形,以便将其强制设置为零到一。