Machine-Learning

在國際象棋數據上訓練神經網絡

  • July 26, 2020

我一直在和朋友一起寫一個國際象棋引擎,引擎本身已經非常好(2700+ CCRL)。我們的想法是使用神經網絡來更好地評估位置。

輸入到網絡

因為網絡的輸出很大程度上取決於哪一方必須移動,所以我們使用輸入的前半部分來解析誰必須移動的位置,而後半部分則用於分析對手的位置。事實上,我們為每個部分和每個正方形都有一個輸入,這將導致 12x64 輸入。我們的想法也包括對手國王的位置。所以每一方都有 6x64 輸入,對於每個方格,對手國王可以是 -> 6x64x64。總的來說,這會產生 12x64x64 二進制輸入值,其中最多設置 32 個。

圖層

下一層由 64 個神經元組成,其中前 32 個神經元只接受前半部分輸入特徵的輸入,後 32 個只接受後半部分輸入特徵的輸入。

它遵循一個具有 32 個完全連接的神經元的層,輸出層只有一個輸出。

激活功能

我們在隱藏層使用 LeakyReLU,在輸出使用線性激活函數。

訓練

最初,我想在大約 100 萬個位置上訓練網絡,但這需要很長時間。位置本身的目標值在 -20 到 20 的範圍內。我使用 ADAM 的隨機梯度下降,學習率為 0.0001,MSE 作為損失函數。

我遇到的問題是,即使訓練這 100 萬個職位也需要很長時間。目標是稍後在 3 億個位置上進行訓練。

我不確定在哪裡可以改善培訓進度。

下面是顯示超過 1000 次迭代的訓練進度的圖表

在此處輸入圖像描述

每次迭代的更改如下所示:

在此處輸入圖像描述

我希望有人能給我一兩個提示,告訴我我可以改進什麼,以便更快地訓練網絡。我很高興有任何建議!

問候,芬恩

編輯 1

正如建議的那樣,我應該將我的網絡轉換為 keras。我在讓稀疏輸入運行時遇到問題。

import keras
from keras.layers import Input, Concatenate, Dense, LeakyReLU
from keras.models import Model
from keras import backend as K
import numpy as np







# trainX1 = tf.SparseTensor(indices=[[0,0], [0,1]], values=[1, 2], dense_shape=[1,24576])
# trainX2 = tf.SparseTensor(indices=[[0,0], [0,1]], values=[1, 2], dense_shape=[1,24576])
#
# trainY = np.random.rand(1)


trainX1 = np.random.random((10000,24576))
trainX2 = np.random.random((10000,24576))

trainY = np.zeros((10000,1))



#input for player to move
activeInput = Input((64*64*6,))
inactiveInput = Input((64*64*6,))


denseActive = Dense(64)(activeInput)
denseInactive = Dense(64)(inactiveInput)


act1 = LeakyReLU(alpha=0.1)(denseActive)
act2 = LeakyReLU(alpha=0.1)(denseInactive)

concat_layer= Concatenate()([act1, act2])
dense1 = Dense(32)(concat_layer)

act3 = LeakyReLU(alpha=0.1)(dense1)

output = Dense(1, activation="linear")(act3)

model = Model(inputs=[activeInput, inactiveInput], outputs=output)
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])

# print(model.summary())

print(model.fit([trainX1,trainX2], trainY, epochs=1))


如果我sparse=True用於 Dense 層,它會拋出一些異常。如果有人可以幫助我創建稀疏輸入向量,我會很高興。

我認為您需要考慮在 GPU 上運行它。谷歌 Colab 是免費的,亞馬遜 AWS 非常便宜。您似乎知道自己在做什麼,因此您可能可以很快啟動並運行 PyTorch。一旦您比較了在 GPU 上實現的相同網絡與您的單處理器設置的性能,您將能夠更好地了解下一步該去哪裡。

引用自:https://stats.stackexchange.com/questions/479051

comments powered by Disqus