[英]Individual loss of each (final-layer) output of Keras model
在训练 ANN 进行回归时,Keras 将训练/验证损失存储在History 对象中。 在具有标准损失函数的最后一层的多个输出的情况下,即均方误差或 MSE:
任何提示将不胜感激。
编辑 - - - - - -
model = Sequential()
model.add(LSTM(10, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(2))
model.compile(loss='mse', optimizer='adam')
添加片段后重新表述我的问题:
在输出层有两个神经元的情况下如何计算损失,由此产生的损失代表什么? 它是两个输出的平均损失吗?
标准 MSE 损失在 Keras 中实现如下:
def mse_loss(y_true, y_pred):
return K.mean(K.square(y_pred - y_true), axis=-1)
如果您现在在输出层有多个神经元,则计算出的损失将只是所有单个神经元的平方损失的平均值。
如果您希望跟踪每个单独输出的损失,您必须为此编写一个自己的指标。 如果你想让它尽可能简单,你可以使用以下指标(它必须嵌套,因为 Keras 只允许一个指标具有输入 y_true 和 y_pred):
def inner_part_custom_metric(y_true, y_pred, i):
d = y_pred-y_true
square_d = K.square(d)
return square_d[:,i] #y has shape [batch_size, output_dim]
def custom_metric_output_i(i):
def custom_metric_i(y_true, y_pred):
return inner_part_custom_metric(y_true, y_pred, i)
return custom_metric_i
现在,假设您有 2 个输出神经元。 创建此指标的 2 个实例:
metrics = [custom_metric_output_i(0), custom_metric_output_i(1)]
然后按如下方式编译您的模型:
model = ...
model.compile(loss='mean_squared_error', optimizer=SGD(lr=0.01), metrics=metrics)
history = model.fit(...)
现在您可以访问历史对象中每个单独神经元的损失。 使用以下命令查看历史对象中的内容:
print(history.history.keys())
print(history.history.keys())
进而:
print(history.history['custom_metric_i'])
如前所述,实际上只会打印一个维度的历史!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.