TensorFlow回归模型:预测MSE损失为何远超训练损失?
训练损失与预测损失差距过大的原因分析
输出缩放逻辑不匹配:训练时损失函数直接用模型原始输出计算,预测时却把模型输出乘以32后再算损失。如果训练阶段对真实标签
offset做了除以32的归一化(让模型输出和归一化后的标签对齐),那训练损失是(gt/32 - res)²的均值,预测损失则是(gt - res*32)²的均值——后者是前者的32²=1024倍。你的训练损失0.06乘以1024约为61.44,和实际的18有差距,说明可能还有部分样本的处理逻辑不一致,但这是核心问题。数据形状/类型不兼容:预测时
gt是TensorFlow张量,pre是numpy数组,要是两者形状不对齐(比如gt是(2,)的张量,pre是(1,2)的数组),会触发自动广播,导致平方差计算错误,最终均值严重偏离。得检查model.predict(image)[0]的输出形状是否和features["offset"]完全一致。数据集预处理不一致:训练时的数据集可能对
offset做了额外变换(比如归一化、截断),但预测阶段的parsed_dataset没做同样操作,导致真实值和模型输出的分布不匹配,损失自然算不准。损失归约维度不同:
tf.reduce_mean和np.mean默认的归约逻辑有差异——如果训练时是对整个batch的所有元素取均值,而预测时先对单个样本的元素取均值,再算样本间的平均,当样本内元素数量不一致时,结果就会偏差。要确认两者的归约维度完全一致。
内容的提问来源于stack exchange,提问作者jituan
相关产品推荐
相关产品推荐

