TensorFlow Keras多分类模型训练loss为nan、准确率异常问题求助
代码存在两处核心问题,修复后即可正常训练:
1. 输入特征未做归一化,导致梯度爆炸,损失值变为nan
你当前使用的784维特征为MNIST像素原始值,取值范围是0~255,直接输入全连接层会让前向传播计算的数值过大,反向传播时梯度超出数值范围变成nan,最终损失输出为nan。
修复方法:构建数据集前对所有特征做归一化,将数值缩放到0~1区间:
X_train = X_train / 255.0 X_val = X_val / 255.0 X_test = X_test / 255.0
2. 准确率指标选择错误,导致输出准确率不符合预期
你使用的tf.keras.metrics.Accuracy()指标的计算逻辑是直接判断预测值和真实值是否完全相等,但你当前的真实标签是one-hot编码的10维向量,模型输出是10维概率向量,两者永远不可能完全相等,所以输出准确率始终接近0。
修复方法:改用适配one-hot标签的多分类准确率指标CategoricalAccuracy,修改compile部分代码即可:
model.compile( optimizer=tf.keras.optimizers.SGD(), loss=tf.keras.losses.CategoricalCrossentropy(), metrics=[tf.keras.metrics.CategoricalAccuracy()], )
内容的提问来源于stack exchange,提问作者Syed Humayun
相关产品推荐
相关产品推荐

