如何获取深度学习模型的平均绝对误差(MAE)?深度自编码器推荐系统中MAE损失函数定义与模型精度计算
深度自编码器推荐系统:MAE损失定义与指标获取
我来帮你一步步解决MAE相关的问题,结合你给出的代码来调整:
1. 定义MAE损失函数并用于模型训练
Keras已经内置了MAE损失函数,你可以直接使用,也可以自定义实现(内置版本更高效稳定):
方式1:使用内置MAE损失
直接在model.compile里把loss参数改成"mae",同时在metrics里加入"mae",这样训练时会实时输出训练集和验证集的MAE指标:
from tensorflow.keras.optimizers import Adam # 你的模型定义保持不变 model = deep_model(train_, layers, activation, last_activation, dropout, regularizer_encode, regularizer_decode) # 修改compile部分,指定MAE损失并监控MAE指标 model.compile(optimizer=Adam(lr=0.001), loss="mae", metrics=["mae"]) model.summary()
方式2:自定义MAE损失函数
如果你想自己实现MAE的计算逻辑,可以这样写(和内置效果完全一致):
import tensorflow as tf def custom_mae(y_true, y_pred): return tf.reduce_mean(tf.abs(y_true - y_pred)) # 编译时使用自定义损失 model.compile(optimizer=Adam(lr=0.001), loss=custom_mae, metrics=["mae"])
2. 使用MAE评估模型精度
在推荐系统场景中,MAE是衡量预测评分与真实评分之间平均绝对误差的核心指标,你可以通过两种方式获取评估结果:
训练过程中实时监控
你的model.fit代码无需大幅改动,训练时会自动输出每个epoch的训练MAE和验证MAE:
data_valid = (train, validate) hist_model = model.fit(x=train, y=train, epochs=100, batch_size=128, validation_data=data_valid, verbose=2, shuffle=True)
输出内容里会类似val_mae: 0.78这样的字段,数值越小说明模型的预测精度越高。
训练后评估验证/测试集MAE
训练完成后,你可以用model.evaluate直接计算验证集或测试集的MAE:
# 计算验证集的MAE val_loss, val_mae = model.evaluate(validate, validate, verbose=0) print(f"验证集MAE: {val_mae:.4f}") # 如果有测试集,同样可以用相同方式计算 # test_loss, test_mae = model.evaluate(test_data, test_data, verbose=0) # print(f"测试集MAE: {test_mae:.4f}")
3. 获取训练过程中的MAE历史数据
hist_model是训练的历史记录对象,你可以从中提取每个epoch的训练MAE和验证MAE,用于后续的趋势分析或可视化:
# 获取训练集每轮的MAE数据 train_mae_history = hist_model.history['mae'] # 获取验证集每轮的MAE数据 val_mae_history = hist_model.history['val_mae'] # 示例:打印最后一轮的MAE结果 print(f"最后一轮训练MAE: {train_mae_history[-1]:.4f}") print(f"最后一轮验证MAE: {val_mae_history[-1]:.4f}")
小提示:自编码器做推荐时,输入输出都是用户-物品评分矩阵,所以训练时设置y=train是合理的,MAE能很好反映模型还原真实评分的能力~
内容的提问来源于stack exchange,提问作者kams




