我通过以下方式加载keras模型
model = keras.models.load_model('myModel.h5')
model.fit(x,y, batch_size=1, epochs=2)
这里的最后一行显示了一个错误,它希望 y 成为 2D 输入。我的 y 文件的样本是 [0,0,-1] 在二维中可以更改为 [[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')
这里只是初始化
最佳答案
您的损失函数 (sparse_categorical_crossentropy) 期望您的 y 值是一个热编码。由于您有三个输出节点,损失预计具有 (3,) 形状的 y 值,因此出现第一个错误。
如果您尝试回归三个独立的概率,我建议您将损失切换为比较数字的损失(例如 loss='mse'
均方误差)。这应该可以解决您的输入形状问题。您可能还需要考虑将输出激活设置为 sigmoid,以便它强制介于 0 和 1 之间。
关于python-3.x - Keras 期望同时出现二维数组和 (1,) 形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52594736/