TensorFlow2训练的简单线性回归模型的池性能



我的模型和y = 2*x + 200 + error一样简单,但我无法用简单的方式获得正确的结果。我不知道发生了什么。

import numpy as np
from tensorflow import keras
x = np.arange(100)
error = np.random.rand(100,1).ravel()
y = 2*x + 200 + error
opt = keras.optimizers.Adam(lr=0.0005)
model = keras.Sequential([keras.layers.Dense(1, input_shape=[1])])
model.compile(optimizer=opt, loss='mse', metrics=['mae'])
early_stopping_callback = keras.callbacks.EarlyStopping(
patience=10,
monitor='val_loss',
mode='min',
restore_best_weights=True)
history = model.fit(x, y, epochs=2000, batch_size=16, verbose=1,
validation_split=0.2, callbacks=[early_stopping_callback])

当验证损失很大时,我的模型总是停止:

Epoch 901/2000 5/5〔==========================〕-0s 3ms/步-损失:14767.1357-价值损失:166.8979

在训练参数后,我一直不正确:

model.weights

[lt;tf.Variable'dense_28/kernel:0'shape=(1,1(dtype=float32,numpy=数组([[4.2019334]],dtype=fluat32(>
<tf.变量'dense_28/bias:0'shape=(1,(dtype=float32,numpy=array([2.611792],dtype=float32(>]

请帮我找出我的代码出了什么问题。

我使用tensorflow-v2.3.0

我明白了,主要问题是EarlyStopping过早停止了我的训练过程!另一个问题是学习率太低。

所以当我改变两个参数设置时,我得到了正确的结果:

import numpy as np
from tensorflow import keras
x = np.arange(100)
error = np.random.rand(100,1).ravel()
y = 2*x + 200 + error
opt = keras.optimizers.Adam(lr=0.8)  # <--- bigger lr
model = keras.Sequential([keras.layers.Dense(1, input_shape=[1])])
model.compile(optimizer=opt, loss='mse', metrics=['mae'])
early_stopping_callback = keras.callbacks.EarlyStopping(
patience=100,  # <--- longer patience to training
monitor='val_loss',
mode='min',
restore_best_weights=True)
history = model.fit(x, y, epochs=2000, batch_size=16, verbose=1,
validation_split=0.2, callbacks=[early_stopping_callback])

最新更新