Keras多重输出中val_loss的计算

沙田

我对如何在Keras的多个输出中计算val_loss有疑问。这是我的代码的摘录。

nBatchSize  = 200
nTimeSteps  = 1
nInDims     = 17
nHiddenDims = 10
nFinalDims  = 10
nOutNum     = 24
nTraLen     = 300
nMaxEP      = 20
nValLen     = 50
sHisCSV     = "history.csv"

oModel = Sequential()
oModel.add(Input(batch_input_shape=(nBatchSize, nTimeSteps, nInDims)))
oModel.add(LSTM(nHiddenDims, return_sequences=True,  stateful=True))
oModel.add(LSTM(nHiddenDims, return_sequences=False, stateful=True))
oModel.add(Dense(nFinalDims, activation="relu")
oModel.add(Dense(nOutNum,    activation="linear")
oModel.compile(loss="mse", optimizer=Nadam())

oModel.reset_states()
oHis = oModel.fit_generator(oDataGen, steps_per_epoch=nTraLen,
epochs=nMaxEP, shuffle=False,
validation_data=oDataGen, validation_steps=nValLen,
callbacks=[CSVLogger(sHisCSV, append=True)])

# number of cols is nOutNum(=24), number of rows is len(oEvaGen)
oPredDF = pd.DataFrame(oPredModel.predict_generator(oEvaGen, steps=len(oEvaGen))

# GTDF is a dataframe of Ground Truth
nRMSE   = np.sqrt(np.nanmean(np.array(np.power(oPredDF - oGTDF, 2))))

在history.csv中,写入了val_loss并将其写入为3317.36。根据预测结果计算出的RMSE为66.4。

根据我对Keras规范的了解,history.csv中编写的val_loss是24个输出的平均MSE。假设它是正确的,则可以从history.csv计算RMSE为11.76(= sqrt(3317.36 / 24)),这与nRMSE(= 66.4)的值完全不同,就像sqrt(3317.36)= 57.6相当它。

我对Keras关于val_loss的规范理解不正确吗?

地理编码

您的第一个假设是正确的,但进一步的推导有误。
由于MSE是模型输出的平方误差的平均值,因此您可以在Keras文档中看到

mean_squared_error
keras.losses.mean_squared_error(y_true,y_pred)

并在Keras源代码中:

K.mean(K.square(y_pred - y_true), axis=-1)

因此,RMSE是该值的平方根:

K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1))

您写的是平方误差的平方根,即RSE

因此,从您的实际示例来看:
RSE可以计算为sqrt(3317.36/24) = 11.76
RMSE可以计算为sqrt(3317.36) = 57.6

因此,模型提供的RMSE(和nRMSE)值是正确的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 TFRecord 在 Keras 中的 Val_loss

keras日志中缺少val_loss,但在时代结束时正确打印

如何在keras中记录val_loss和批次损失

Keras:val_loss 增加并且评估损失太高

Keras:监控 val_loss 以提前停止 - 误报问题

具有多个输出的Tensorflow val_loss定义

如何在keras中修改ModelCheckPoint以监视val_acc和val_loss并相应地保存最佳模型?

尝试从训练模型中获得val_loss

Val_loss & Loss 是相同的数量(tensorflow)

Keras提前停止回调错误,val_loss指标不可用

如何在多元模型中获得平均val_loss和val_accuracy?

手动计算的验证损失与使用正则化时报告的val_loss不同

训练损失可用,但val_loss = nan

为什么 val_loss 超过一百?

训练时监控val_loss

CNN模型的val_loss下降得很好,但val_loss变化很多

val_loss减半,但val_acc保持不变

關於PyTorch中驗證過程的一個問題:val_loss低於train_loss

KeyError:训练模型时出现“ val_loss”

當我在 model.fit() 的參數中已經有了 validation_data 時,沒有 val_loss 和 val_accuracy 鍵

为什么我的 val_loss 下降但我的 val_accuracy 停滞不前

为什么val_loss和val_accuracy不显示在时代

损失,val_loss,acc和val_acc在整个时期都不会更新

从已保存的 .h5 cnn 保存模型加载 val_acc 和 val_loss

输出Keras中add_loss加的多个损失

当使用与验证数据相同的训练数据时,为什么val_loss与训练损失不同?

使用fit_generator的训练模型不显示val_loss和val_acc并在第一个时期中断

为什么当val_loss从一开始就增加时,我的val_accuracy停滞在0.0000e + 00?

Keras中的多个输出