Keras多输出值损耗的计算

2024-09-29 00:12:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于如何计算Keras多重输出值损失的问题。 这是我的代码节选。在

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))))

在历史.csv,价值损失被写为3317.36。 由预测结果计算出的RMSE为66.4。在

根据我的理解,我的Keras规范历史.csv 是24个输出的平均均方误差。 假设它是正确的,RMSE可以计算为11.76(=sqrt(3317.36/24)),从历史.csv, 这与nRMSE的值(=66.4)大不相同 正如sqrt(3317.36)=57.6相当接近。在

我对Keras关于val_损失的规范的理解是否不正确?在


Tags: ofcsvaddtrueisnpsqrt历史
1条回答
网友
1楼 · 发布于 2024-09-29 00:12:21

您的第一个假设是正确的,但进一步的推导有点出错。
由于MSE是模型输出平方误差的平均值,正如您在Kerasdocumentation中看到的:

mean_squared_error
keras.losses.mean_squared_error(y_true, y_pred)

在Keras源代码中:

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

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

^{pr2}$

你写的是平方误差的平方根,即RSE。在

从你的实际例子来看:
RSE可以计算为sqrt(3317.36/24) = 11.76
RMSE可以计算为sqrt(3317.36) = 57.6

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

相关问题 更多 >