【问题标题】:Loss function Keras out_dim > 1损失函数 Keras out_dim > 1
【发布时间】:2018-11-03 12:40:06
【问题描述】:

我有一个训练数据:

而且,我在 Keras 中有一个模型,其输出不止一维。我要预测 A、B 和 C:

model = Sequential()
model.add(GRU(32, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(3))
model.compile(loss='mean_squared_error', optimizer='adam')

但我想要 A 中的最小值 mean_squared_error,即只想考虑 A 作为损失函数。

我能做什么?

【问题讨论】:

  • 您的意见是什么?看起来您正在尝试根据变量本身来预测变量(在这种情况下,身份会很好)。
  • 那么你是在使用 A、B 和 C 来预测 A、B 和 C 吗?
  • @SreeramTP,是的,我想预测 2019、2020 年的 A、B 和 C,...
  • @fuglede,是的,我根据 A、B 和 C 的先前数据预测 A、B 和 C,但我希望损失函数表现 A 的误差。

标签: python tensorflow machine-learning keras loss-function


【解决方案1】:

你可以定义一个自定义的损失函数,只根据A的值计算mean_squared_error()的损失:

from keras import losses

def loss_A(y_true, y_pred):
    return losses.mean_squared_error(y_true[:,0], y_pred[:,0])

#...
model.compile(loss=loss_A, optimizer='adam')

【讨论】:

    【解决方案2】:

    您需要研究的是自定义损失函数:

    def only_A_mean_squared(y_true, y_pred):
         return keras.losses.mean_squared_error(y_true[:,0], y_pred[:,0])
    

    为了使用它:

    model.compile(loss=only_A_mean_squared, optimizer='adam')
    

    我在上面所做的是创建一个自定义损失函数,它只获取第一个维度(“A”)并将其提供给正常的 keras 均方误差损失函数。

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 2019-04-11
      • 2018-10-21
      • 2021-05-23
      • 2020-12-19
      • 2016-03-11
      • 2017-12-18
      • 2020-03-27
      • 2018-04-03
      相关资源
      最近更新 更多