Этот пост является частью 12-месячного проекта ускоренного обучения Month to Master. На октябрь моя цель - победить чемпиона мира Магнуса Карлсена в шахматной партии.

Сегодня я закончил писать небольшой скрипт Python, который преобразует шахматные партии, загруженные из Интернета, в правильно отформатированные данные, необходимые для обучения моей модели машинного обучения.

Таким образом, сегодня пришло время приступить к построению самой модели машинного обучения.

Вместо того, чтобы начинать с нуля, я поискал уже закодированную модель на Github. В частности, мне нужно было найти модель, достаточно хорошо аналогичную шахматам.

Мне не пришлось особо искать: версия Hello World для машинного обучения называется MNIST, и она идеально подходит для моих целей.

MNIST - это набор данных, который состоит из изображений рукописных цифр размером 28 x 28 пикселей, таких как:

Набор данных также включает десять меток, указывающих, какая цифра представлена ​​на каждом изображении (т.е. метки для приведенных выше изображений будут 5, 0, 4, 1).

Цель состоит в том, чтобы создать модель, которая, учитывая набор из 28 x 28 = 784 значений, может точно предсказать правильную числовую цифру.

Точно так же цель моей шахматной модели, учитывая набор из 8 x 8 = 64 значений (где каждое значение представлено с использованием 12-значного горячего кодирования), состоит в том, чтобы точно предсказать, является ли шахматный ход правильным. хороший ход или плохой ход.

Итак, все, что мне нужно сделать, это загрузить пример кода с Github, изменить его для моих целей и дать ему поработать. Конечно, с этим подходом все еще есть сложности (например, получение данных в правильном формате, оптимизация модели для моих целей и т. Д.), Но я должен иметь возможность использовать уже существующий код в качестве прочной основы.

Вот код, который я нашел:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import argparse
import sys
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
FLAGS = None
def main(_):
  # Import data
  mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
# Create the model
  x = tf.placeholder(tf.float32, [None, 784])
  W = tf.Variable(tf.zeros([784, 10]))
  b = tf.Variable(tf.zeros([10]))
  y = tf.matmul(x, W) + b
# Define loss and optimizer
  y_ = tf.placeholder(tf.float32, [None, 10])
# The raw formulation of cross-entropy,
  cross_entropy = tf.reduce_mean(
      tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
  train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
  tf.global_variables_initializer().run()
  # Train
  for _ in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
# Test trained model
  correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
  accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
  print(sess.run(accuracy, feed_dict={x: mnist.test.images,
                                      y_: mnist.test.labels}))
if __name__ == '__main__':
  parser = argparse.ArgumentParser()
  parser.add_argument('--data_dir', type=str, default='/tmp/tensorflow/mnist/input_data',
                      help='Directory for storing input data')
  FLAGS, unparsed = parser.parse_known_args()
  tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)

Завтра я попробую изменить этот код и посмотрю, смогу ли я заставить что-нибудь работать.

Прочтите следующий пост. Прочтите предыдущий пост.

Макс Дойч - заядлый ученик, создатель продукта и подопытный кролик в Месяце, чтобы стать мастером.

Если вы хотите участвовать в рассчитанном на год проекту ускоренного обучения Макса, обязательно подпишитесь на этот средний аккаунт.