【问题标题】:Predicting high values with keras and regression使用 keras 和回归预测高值
【发布时间】:2021-11-20 13:40:47
【问题描述】:

我正在尝试建立一个回归模型,但 mse 和 mae 非常高。我过滤和规范化数据(输入和输出,以及测试和训练集)。我认为问题的出现是因为我在一列中有非常高的值:最小值为 1,最大值为 9100000(未标准化),但我实际上需要预测这些高值。

模型如下所示:我有 6 个输入列和 800000 行。我已经尝试过使用更多的神经元和层,或者改变 sigmoid 函数,但是对于 mse,损失和误差保持在 0.8 左右,对于 mae 保持在 0.3 左右。预测也远低于应有的水平,从未达到高值。

model = Sequential()

model.add(Dense(7, input_dim=num_input, activation='relu'))
model.add(Dense(7, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='mse', optimizer='rmsprop', metrics=['mse', 'mae'])

history = model.fit(x_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=(x_val, y_val))

【问题讨论】:

  • 你无法用 sigmoid 激活来预测这么大的范围(范围是 [0, 1]),你需要在这里删除 sigmoid。

标签: python keras deep-learning regression


【解决方案1】:

几点意见/建议:

  • RMSProp 一般不用于全连接层,我建议切换到 Adam 或 SGD。

  • 如果您有许多大值的偏态分布,您可以考虑改用这些值的对数。

  • 首先尝试使用神经元较少的浅层模型。然后逐渐增加神经元的数量以过度拟合数据集。你应该能够在火车上达到满分。此时,您可以开始减少神经元的数量并添加具有 dropout 的层以提高泛化能力。

  • 正如 cmets 中已经提到的,回归的输出激活应该是“线性的”。 Sigmoid 用于二分类。

【讨论】:

  • 哦,谢谢!我的损失已经下降到 0.2,所以比一开始要好得多。唯一的问题是我的验证损失一直是 0.8,而训练损失是 0.2。这真的很重要吗?
  • 是的,你应该在谷歌上查找“过度拟合”这个词,你会发现高验证损失是一个问题......
猜你喜欢
  • 1970-01-01
  • 2017-09-05
  • 2021-07-03
  • 1970-01-01
  • 2017-01-19
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多