输出层的激活函数导致训练没有进展

问题描述 投票:0回答:0

我目前正在研究国际象棋引擎,更具体地说是评估某些位置并返回获胜(1)/平局(0.5)/损失(0)的概率。我正在使用 Tensorflow 和自己创建的数据,这些数据均匀分布在大约 200,000 个不同的棋盘状态中。棋盘大小为 70(64 个文件 + 6 个额外信息)。问题是,当我为最后一层选择一个激活函数以将值剪裁在 0 和 1 之间时。错误在第一个纪元之后保持不变。我是 Tensorflow 的新手,但我知道神经网络是如何工作的并且对该主题有基本的了解。

#Loading data
inp, out = loadData("pathname", 200000)

X_train, X_val, Y_train, Y_val = train_test_split(inp, out, test_size=0.1, random_state=42)

我选择了 sigmoid 函数,但我也尝试了自定义函数

tf.clip_by_value(x,clip_value_min=0,clip_value_max=1)
。 我也玩过损失,但损失仍然不变。

#Architecture
model = tf.keras.Sequential([
    tf.keras.layers.Input(shape=(70,), dtype=tf.int8),
    tf.keras.layers.Dense(1000, 'relu'),
    tf.keras.layers.Dense(700, 'relu'),
    tf.keras.layers.Dense(500, 'relu'),
    tf.keras.layers.Dense(1, 'sigmoid'),
])
model.compile('adam', 'mae', ['mae'])

调整 batch_size 也没有任何区别。

model.fit(x=X_train, y=Y_train, validation_data=[X_val, Y_val], epochs=20, batch_size=64,callbacks=tensorboard_callback)

输出:

Epoch 1/20
4079/4079 [==============================] - 19s 4ms/step - loss: 0.4856 - mae: 0.4856 - val_loss: 0.4865 - val_mae: 0.4865
Epoch 2/20
4079/4079 [==============================] - 20s 5ms/step - loss: 0.4856 - mae: 0.4856 - val_loss: 0.4865 - val_mae: 0.4865
Epoch 3/20
4079/4079 [==============================] - 19s 5ms/step - loss: 0.4856 - mae: 0.4856 - val_loss: 0.4865 - val_mae: 0.4865
Epoch 4/20
4079/4079 [==============================] - 20s 5ms/step - loss: 0.4856 - mae: 0.4856 - val_loss: 0.4865 - val_mae: 0.4865
Epoch 5/20
4079/4079 [==============================] - 20s 5ms/step - loss: 0.4856 - mae: 0.4856 - val_loss: 0.4865 - val_mae: 0.4865
Epoch 6/20
4079/4079 [==============================] - 19s 5ms/step - loss: 0.4856 - mae: 0.4856 - val_loss: 0.4865 - val_mae: 0.4865
...

所以我尝试了同样的方法,在最后一层没有激活函数,瞧

Epoch 1/20
4079/4079 [==============================] - 18s 4ms/step - loss: 0.3748 - mae: 0.3748 - val_loss: 0.2684 - val_mae: 0.2684
Epoch 2/20
4079/4079 [==============================] - 18s 4ms/step - loss: 0.2629 - mae: 0.2629 - val_loss: 0.2514 - val_mae: 0.2514
Epoch 3/20
4079/4079 [==============================] - 18s 4ms/step - loss: 0.2450 - mae: 0.2450 - val_loss: 0.2404 - val_mae: 0.2404
Epoch 4/20
4079/4079 [==============================] - 19s 5ms/step - loss: 0.2294 - mae: 0.2294 - val_loss: 0.2320 - val_mae: 0.2320
Epoch 5/20
4079/4079 [==============================] - 17s 4ms/step - loss: 0.2166 - mae: 0.2166 - val_loss: 0.2228 - val_mae: 0.2228
Epoch 6/20
4079/4079 [==============================] - 18s 4ms/step - loss: 0.2065 - mae: 0.2065 - val_loss: 0.2170 - val_mae: 0.2170
...

我知道这些值远非好,但我想在收集更多数据来训练和微调模型之前先让它工作。

如何修复模型,以便获得更好的结果? 感谢您的帮助。

python tensorflow machine-learning keras chess
© www.soinside.com 2019 - 2024. All rights reserved.