我对张量流一无所知。我一直在尝试训练一个神经网络,以根据给定的棋盘位置和Stockfish的评估来预测Stockfish的棋盘评估功能,但是我的神经网络没有收敛。如果有人可以快速浏览一下并指出我正在犯的明显错误,或者提出一些建议,我将不胜感激。现在,训练损失看起来完全是随机的。
数据表示形式: X:8x8 numpy数组,空白方块为0,白卒为1,白鸦为2,白骑士为3,白主教为4,白皇后为5,白王为6,为1。除了从7变到12外,我对黑色作品也做同样的事情。
Y:具有一个值的数组,该位置的干鱼评估。我已经对数据进行了归一化,因此值在-1和1之间。评估始终是针对白色的。 1表示具有强制将死的白色,而-1将表示具有强制将死的黑色。
X和Y由500,000个带有评估的董事会职位组成
模型:
# Neural Net
learning_rate = 0.001
# Network Parameters
n_hidden_1 = 100 # 1st layer number of neurons
n_hidden_2 = 100 # 2nd layer number of neurons
n_input = 64 # 12 8x8 chessboards
n_classes = 1
# tf Graph input
X = tf.placeholder("float", [None, n_input])
Y = tf.placeholder("float", [None, 1])
# Store layers weight & bias
weights = {
'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
}
biases = {
'b1': tf.Variable(tf.random_normal([n_hidden_1])),
'b2': tf.Variable(tf.random_normal([n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_classes]))
}
# Create model
def multilayer_perceptron(x):
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
layer_1 = tf.nn.relu(layer_1)
layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
layer_2 = tf.nn.relu(layer_2)
out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
out_layer = tf.nn.tanh(out_layer)
return out_layer
训练模型:
# Construct model
output = multilayer_perceptron(X)
# using mean squared error cost function
cost = tf.square(output - Y)
# using Gradient Descent algorithm
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
# Initializing the variables
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
cost_history=[]
for step in np.arange(10):
for x in range(0,100):
start = x*100
end = start+999
sess.run(optimizer, feed_dict={X:positions[start:end],
Y:normalized_evaluations[start:end]})
cost_history = np.append(cost_history, sess.run(cost,feed_dict= .
{X:positions[start:end],
Y:normalized_evaluations[start:end]}))
print(cost_history)