【发布时间】:2021-11-07 16:39:23
【问题描述】:
我正在用一组随机数字训练一个非常简单的模型,只是想学习 y=x。代码如下,但也在这里:https://pastebin.com/6cNdjNNF。但是,该模型有时会表现异常并且不会训练/达到平台期。我应该注意,我为 x 和 y=x 设置了 10000 个值的随机列表,因此每次迭代中的数据都是相同的。
prng = np.random.RandomState(1234567891)
x = prng.rand(10000, 1)
y = x
def create_model():
dropout_nodes = 0.0
intermediary_activation = 'relu'
final_activation = 'linear'
# initialize sequential model
model = tf.keras.models.Sequential()
layer_nodes = [16, 8, 4, 2]
for i, layer_node in enumerate(layer_nodes):
if i==0:
# first layer
model.add(tf.keras.layers.Dense(layer_node, input_dim=1))
model.add(tf.keras.layers.Activation(intermediary_activation))
model.add(tf.keras.layers.Dropout(dropout_nodes))
# model.add(tf.keras.layers.BatchNormalization())
else:
# other layers
model.add(tf.keras.layers.Dense(layer_node))
model.add(tf.keras.layers.Activation(intermediary_activation))
model.add(tf.keras.layers.Dropout(dropout_nodes))
# model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Dense(1))
model.add(tf.keras.layers.Activation(final_activation))
loss = 'mse'
metric = ["mae", "mape"]
opt = tf.keras.optimizers.SGD(learning_rate=1e-2)
# opt = tf.keras.optimizers.Adam(learning_rate=1e-3)
model.compile(loss=loss, optimizer=opt, metrics=[metric])
return model
model = create_model()
history = model.fit(x=x, y=y,
validation_split=0.1, shuffle=False,
epochs=20,
batch_size=32,
verbose=1, )
pred = model.predict(x)
df = pd.DataFrame(x, columns=["x"])
df['y'] = y
df['pred'] = pred
model_evaluation = model.evaluate(x, y, verbose=2)
dict_model_evaluation = {k.name: model_evaluation[i] for i, k in enumerate(model.metrics)}
print(dict_model_evaluation)
具体来说,在打印最终评估时,我通过运行脚本 10 次得到以下结果。请注意,在五次迭代中,结果是相同的;当您查看其中一次迭代的每个 epoch 时,模型会达到平稳状态并且不再改进。为什么会这样?
{'loss': 0.08206459134817123, 'mae': 0.24807175993919373, 'mape': 797.3375854492188}
{'loss': 4.3269268644507974e-05, 'mae': 0.0054251449182629585, 'mape': 33.66191101074219}
{'loss': 3.115053550573066e-05, 'mae': 0.003888161387294531, 'mape': 47.37348937988281}
{'loss': 0.08206459134817123, 'mae': 0.24807175993919373, 'mape': 797.3375854492188}
{'loss': 0.08206459134817123, 'mae': 0.24807175993919373, 'mape': 797.3375854492188}
{'loss': 0.08206459134817123, 'mae': 0.24807175993919373, 'mape': 797.3375854492188}
{'loss': 5.879357559024356e-06, 'mae': 0.0013944993261247873, 'mape': 23.40262794494629}
{'loss': 0.08206459134817123, 'mae': 0.24807175993919373, 'mape': 797.3375854492188}
{'loss': 6.495025900221663e-06, 'mae': 0.0019656901713460684, 'mape': 20.390905380249023}
{'loss': 1.061584316630615e-05, 'mae': 0.0014895511558279395, 'mape': 38.272361755371094}
Epoch 1/20
282/282 [==============================] - 1s 3ms/step - loss: 0.1051 - mae: 0.2714 - mape: 645.1287 - val_loss: 0.0807 - val_mae: 0.2468 - val_mape: 481.0587
Epoch 2/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 821.4997 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6515
Epoch 3/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1142 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 4/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 5/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 6/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 7/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 8/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 9/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 10/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 11/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 12/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 13/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 14/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 15/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 16/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 17/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 18/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 19/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
Epoch 20/20
282/282 [==============================] - 1s 2ms/step - loss: 0.0822 - mae: 0.2483 - mape: 822.1162 - val_loss: 0.0806 - val_mae: 0.2468 - val_mape: 482.6568
【问题讨论】:
-
最好让你的 MWE 可以通过导入运行。您是否尝试过简化网络并逐渐将其构建为更复杂的网络以查看何时停止工作?
标签: python tensorflow keras deep-learning neural-network