python-3.x - Keras 期望同时出现二维数组和 (1,) 形状

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

我通过以下方式加载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/

相关文章:

python - 计算函数签名中的位置参数

python - 与日期时间索引上的日期/时间进行区间比较(检查一个小时是否在两个时间段之间)

python-3.x - Google Cloud Functions-为什么GCF将两个位置参数传递给我的函数?

python - 如何使用numpy从 `x`中排除 `range(n)`

python - 调整引用另一个数组的numpy数组的大小

python - 将 StratifiedShuffleSplit 与稀疏矩阵一起使用

python-3.x - 获取 tkinter Canvas 的高度/宽度

machine-learning - 如何克服 CNN 中的过度拟合 - 标准方法不起作用

python - 如何找到拟合指数函数的 x ?

python - 将注释从 Mask-RCNN 数据集格式转换为 COCO 格式