Keras nn损失为inf / nan

时间:2019-06-27 16:20:32

标签: python tensorflow keras neural-network

我正在尝试在keras(tensorflow)中为NN开发一个hello world应用程序。 我想创建一个适合方程y=0.5+0.5x的基本模型,我编写了这段代码

import tensorflow as tf
import numpy as np
from tensorflow import keras
TRAINING_DATA_SIZE = 20
model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])]) 
model.compile(optimizer='sgd', loss='mean_squared_error')
xs = np.array(range(TRAINING_DATA_SIZE), dtype=float)
ys = np.array([(0.5 + 0.5 * i) for i in range(TRAINING_DATA_SIZE)], dtype=float)
model.fit(xs, ys, epochs=500)
print(model.predict([7.0]))

但是如果我TRAINING_DATA_SIZE> 10,则损失在100个周期后为INF,而在200个周期后变为nan。

是什么原因造成的?为什么我不能提供大量数据进行训练? 谢谢

1 个答案:

答案 0 :(得分:0)

使用默认的sgd学习率,优化程序会完全超调。

尝试:

model.compile(optimizer='adam', loss='mean_squared_error')

您只有一个权重和偏见。通过稍微调整学习率,该模型可以进行几次迭代收敛。

例如:

TRAINING_DATA_SIZE = 200

opt=keras.optimizers.Adam(lr=0.1)
model.compile(opt, loss='mean_squared_error')

model.fit(xs, ys, epochs=50, validation_split=0.2, verbose=False)

print('w, b:', model.layers[0].get_weights())
print(model.predict([7.0]))

显示:

w, b: [array([[0.5000057]], dtype=float32), array([0.49888334], dtype=float32)]

[[3.9989233]]

关于目标体重和偏见的合理猜测。