(三十九)从训练异常追踪数据与状态
损失不变时,先读一批数据和目标,确认读取正确;再打印模型输出、损失和参数 .grad,追踪是否执行了反向与 step。若中间调用了 detach、转成普通数值或重新构造张量,也沿图检查求导联系停在何处。
损失突然变为 NaN 时,先看输入是否已经含异常数值,再检查除数、对数和学习率。可以只保留一批,逐层检查输出,找到第一处从有限数值变为异常值的位置。
预测结果看似有值却明显不对时,分别核对输入轴、特征次序、dtype、设备、保存的标准化统计和类别表。前面 (B,) 与 (B,1) 广播的例子说明,成功得到一个数还需要继续核对这个数比较了哪些对象。
恢复后的轨迹变了,就按模型、优化器、分组和随机状态逐项比较;加载后预测变了,先检查模型结构、eval、权重文件和输入转换。把第一个差异缩成可复现的小输入,再用测试保留下来。