我正在尝试在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。
是什么原因造成的?为什么我不能提供大量数据进行训练? 谢谢
答案 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]]
关于目标体重和偏见的合理猜测。