gpt4 book ai didi

python - Keras的多重输出中val_loss的计算

转载 作者:行者123 更新时间:2023-12-01 08:38:14 27 4
gpt4 key购买 nike

我有一个关于如何计算 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 规范的理解,val_loss 写在history.csv 中是 24 个输出的平均 MSE。假设它是正确的,则可以从history.csv计算出RMSE为11.76(= sqrt(3317.36/24)),这与 nRMSE 的值 (=66.4) 有很大不同正如 sqrt(3317.36) = 57.6 相当接近它一样。

我对 Keras val_loss 规范的理解是否不正确?

最佳答案

你的第一个假设是正确的,但进一步的推导有点错误。
作为MSE 是模型输出平方误差的平均值,正如您在 Keras documentation 中看到的那样:

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)值是正确的。

关于python - Keras的多重输出中val_loss的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53607755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com