You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言训练MNIST神经网络时损失持续上升的问题排查

问题诊断与解决方案

训练损失和验证损失持续飙升是数值不稳定的典型表现,结合你的代码,以下几个关键点大概率被你忽略:

1. 未对输入数据做归一化处理

MNIST数据集的像素值范围是0-255,直接输入神经网络会导致激活层输出值过大,引发梯度爆炸,最终造成损失失控。必须将像素值缩放到0-1区间:

training_set <- training_set / 255.0
# 测试集需同步做相同处理
test_set <- test_set / 255.0

2. 标签格式与损失函数不匹配

你使用的categorical_crossentropy损失函数要求标签必须是**独热编码(one-hot)**格式。如果你的training_labels是0-9的整数向量,会导致损失计算逻辑错误,进而引发梯度异常。请检查并转换标签格式:

# 将整数标签转换为独热编码
training_labels <- to_categorical(training_labels, num_classes = 10)
# 验证集标签也需同步转换
validation_labels <- to_categorical(validation_labels, num_classes = 10)

3. RMSprop优化器学习率过高

默认的RMSprop学习率(0.001)可能对你的模型来说偏大,导致参数更新幅度过大,模型无法收敛甚至损失飙升。尝试降低学习率:

optimizer = optimizer_rmsprop(learning_rate = 0.0001)

4. 输入数据维度是否匹配模型要求

确认training_set的形状是(样本数量, 784),如果原始数据是(样本数量, 28, 28)的二维图像格式,需要先展平为一维向量:

training_set <- array_reshape(training_set, c(nrow(training_set), 784))

优先排查前两点,这是MNIST训练中最常见的失误,通常解决后就能让损失正常下降。


内容的提问来源于stack exchange,提问作者Gábor Garay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 07:04:53