我通过以下方式加载喀拉拉邦模型
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')
只需在这里初始化
答案 0 :(得分:1)
您的损失函数(sparse_categorical_crossentropy)期望您的y值是一种热编码。由于您有三个输出节点,因此损耗期望的形状为(3,)的y值,因此是您的第一个错误。
如果您要回归三个独立概率,建议您将损失切换为比较数字的东西(例如loss='mse'
均方误差)。这应该可以解决您的输入形状问题。您可能还需要考虑将输出激活设置为S形,以便将其强制设置为零到一。