繁体   English   中英

Keras nn损失是inf / nan

[英]Keras nn loss is inf/nan

我正在尝试为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。

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

使用默认的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]]

对于目标权重和偏见似乎是合理的猜测。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM