如何解决在 Keras 中使用 SGD 优化器的 NAN 值用于回归神经网络
朋友,
我尝试训练神经网络进行回归。在使用 Keras 的 SGD 优化器类时,我突然在第一步后从我的网络中获得了 NAN 值作为预测。在我使用 Adam 优化器类进行培训之前,一切正常。我已经尝试改变 SGD 的学习率,但在第一步和编译后仍然出现 NAN 值作为模型预测。
由于我的训练使用了 Adam 优化器,我不相信我的输入会导致 NAN。我已经检查了 NaN 的输入值并删除了所有这些值。那么是什么导致了这种行为?
这是我的代码:
from keras.optimizers import Adam
from keras.optimizers import SGD
model = Sequential()
model.add(Dense(300,input_shape=(50,),kernel_initializer='glorot_uniform',activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(300,activation='relu')) model.add(Dropout(0.3))
model.add(Dense(500,activation='relu')) model.add(Dropout(0.3))
model.add(Dense(400,activation='relu')) model.add(Dense(1,activation='linear'))
opt = SGD(lr=0.001,decay=1e-6)
model.compile(loss='mse',optimizer=opt)
model.fit(x_train,y_train,epochs=100,batch_size=32,verbose=0,validation_data=(x_test,y_test))
#print(type(x_train)) ='pandas.core.frame.DataFrame'>
#print( x_train.shape) = (10000,50)
感谢您的建议。
问候 ML 学生
解决方法
使用人工神经网络进行回归有点棘手,因为输出没有上限。
损失函数中的 NaN 很可能是因为梯度爆炸。 使用 Adam 时不显示 NaN 的原因是 Adam 调整了学习率。 Adam 大部分时间都在工作,因此只要没有特定原因,请避免使用 SGD。
我不确定您的数据集包含什么,但是您可以尝试:
- 添加 L2 正则化
- 规范化输入
- 增加批量大小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。