【问题标题】:Keras RNN accuracy doesn't improveKeras RNN 准确率没有提高
【发布时间】:2020-12-29 06:46:37
【问题描述】:

我正在尝试改进我的模型,使其更加准确。现在我正在训练模型并将其作为我的训练和验证准确性。

对于每个 epoch,我的训练准确度为 0.0003,验证准确度为 0。我知道这不好,但我不知道如何解决这个问题。

使用 minmax 缩放器对数据进行标准化。 8 个特征中的 4 个被归一化(其他 4 个是小时、天、day_of_week 和月)

更新: 我也尝试过规范化整个数据集,但并没有什么不同

scaling = MinMaxScaler(feature_range=(0,1)).fit(df[cols])
df[[cols]] = scaling.transform(df[[cols]])

我的模型:形状是 (5351, 1, 8)

input_shape 为 (1, 8)

model = keras.Sequential()
model.add(keras.layers.Bidirectional(keras.layers.LSTM(2,input_shape=(X_train.shape[1], X_train.shape[2]), return_sequences=True, activation='linear')))
model.add(keras.layers.Dense(1))
model.compile(loss='mean_squared_error', optimizer='Adamax', metrics=['acc'])

history = model.fit(
    X_train, y_train,
    epochs=200,
    batch_size=24,
    validation_split=0.35,
    shuffle=False,
)

我尝试使用这个问题的答案: Keras model accuracy not improving 但它没有工作

【问题讨论】:

  • 如果将 LSTM 的 return_sequence 参数设置为 False 会解决什么问题吗?
  • 不,它不能解决它。奇怪的是,如果我手动比较两者,我仍然得到 70% 的准确预测与测试数据
  • 这是分类还是回归模型?因为你设置的loss和metric不兼容。
  • 回归模型

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:

mean_sqared_error 损失用于回归任务,而acc 度量用于分类问题。因此,将它们一起使用是没有意义的。

如果您处理分类问题,请使用binary_crossentropycategorical_crossentropy 作为损失,并保持与您一样的度量参数。

如果是回归任务,请将均方误差的指标改为[mse],而不是[acc]

您的模型“有效”,并且您通过使用均方误差损失应用了反向传播的标准公式。但是测量准确性将使 Keras 检查您的模型的输出是否完全等于预期值。由于损失函数是用于回归的,它几乎永远不会相等。

最后三点,因为这个小小的改变并不能纠正一切。

首先,你的最后一个密集层应该有一个激活函数。 (这样更安全) 其次,我很确定放置在密集层之前的双向+LSTM 层应该有一个return_sequences=False。 LSTM 层(有或没有双向)可以返回向量的完整序列(如矩阵),但密集层将向量作为输入。但在这种情况下,由于第三点,它将起作用。 最后一点是关于数据的形状。您有 5351 个形状 (1, 8) 的示例,每个示例都有一个大小为 8 的向量。但是 LSTM 层采用一系列向量,但您的序列的大小仍然是一个。不知道这里使用RNN类型层是否相关。

【讨论】:

  • 谢谢。作品。如果您正在尝试构建一个需要准确的模型并且有一个称为准确度的指标,这会有点令人困惑。将答案标记为正确:)
猜你喜欢
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 2018-11-13
  • 2022-10-15
  • 2018-09-18
  • 2018-10-09
相关资源
最近更新 更多