【问题标题】:weights of keras model are nankeras模型的权重是nan
【发布时间】:2019-01-30 16:15:33
【问题描述】:

我将以下模型用于回归目的;输入大小为 2,输出大小为 28。

from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD

model = Sequential()
model.add(Dense(16, input_dim=2, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(28, activation='linear'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error',optimizer=sgd)

在训练中一切顺利,但是当我保存并重新加载模型时;作为一个nan,我正在举重。

from keras.models import model_from_json

model_json = model.to_json()
with open('/models/model_ar.json', "w") as json_file:
     json_file.write(model_json)
model.save_weights('/models/model_wt.h5')

json_file = open('/models/model_ar.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
new_model = model_from_json(loaded_model_json)
# load weights into new model
new_model.load_weights('/models/model_wt.h5')

将权重设为“nan”。将所有权重设为 nan 的原因是什么

    new_model.get_weights()
[array([[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan],
        [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan]], dtype=float32),
 array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
        nan, nan, nan], dtype=float32),
 array([[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan],
        [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan],
        [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan],
        [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan],
        [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan],
        [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan]], dtype=float32),
 array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
        nan, nan, nan], dtype=float32),
 array([[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan],
        [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan],
        [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan]], dtype=float32),
 array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
        nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
        nan, nan], dtype=float32)]

【问题讨论】:

  • 如果使用save而不是save_weights,情况是否相同?
  • 是的,保存也面临同样的问题。
  • stackoverflow.com/questions/44258458/… 你能解决这个问题吗?这能解决问题吗?
  • 训练结束后get_weights 是否打印nan?在训练时它可能会变成nan
  • 是的,我已经检查过了。他们在训练时是nan。这就是relaod之后的原因。

标签: python keras deep-learning


【解决方案1】:

试试

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True, clipvalue=0.5)

来自https://www.dlology.com/blog/how-to-deal-with-vanishingexploding-gradients-in-keras/
您也可以尝试clipnorm=1. 或尝试使用更小值的参数之一。

这限制了梯度下降的每一步中权重的变化量。当我遇到同样的问题时,它对我有用,我希望它有所帮助!

【讨论】:

    【解决方案2】:

    就我而言,我没有注意到数据集中有 NaN 行。因此,请检查您的数据集和值。查看答案here

    【讨论】:

      猜你喜欢
      • 2019-05-20
      • 1970-01-01
      • 2018-12-19
      • 2020-12-05
      • 2018-06-21
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      相关资源
      最近更新 更多