OpenMythosのサンプルプログラムを動かしました

1.概要 前回、OpenMythosの環境構築まで実現したので、GitHubにあるサンプルプログラム(Usage)を動かしてみました。一部エラーが発生しましたが、結果出力部分なので修正をしました。その内容を記述します。 2.詳細 Usageに記載されているPythonプログラムをopenmythos_usage.pyとして作成します。 $ source ~/mypy/bin/activate (mypy) $ pythoh3 openmythos_usage.py 下記エラーとなります [MLA] Parameters: 1,538,626 [MLA] Logits shape: torch.Size([2, 16, 1000]) [MLA] Generated shape: torch.Size([2, 24]) Traceback (most recent call last):   File "/home/nakasima/openmythos/openmythos_usage.py", line 48, in <module>     rho = torch.linalg.eigvals(A).abs().max().item()           ^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: linalg.eig: The input tensor A must have at least 2 dimensions. コードの下記部分を修正します #rho = torch.linalg.eigvals(A).abs().max().item() rho = A.abs().max().item() $ source ~/mypy/bin/activate (mypy) $ pythoh3 openmythos_usage.py [MLA] Parameters: 1,538,626 [MLA] Logits shape: torch.Size([2, 16, 1000]) [MLA] Generated shape: torch.Size([2, 24]) [MLA] Spectral radius ρ(A) = 0.3679 (mus...

3目並べを利用したAlphaGoの学習 tensorflow-1編 学習

1.概要

AlphaGoの勉強過程で3目並べを学んでいます。考え方の基礎を知る上で大切なことであると思いネット上の資料も参考にしています。まず、3目並べのルールを記述したClassを作成して、対戦ができることを実現しました。今回はDeepLearningを利用した2回目の手順説明です。

2.詳細

(1) 概要

3目並べのフィールドを3☓3のイメージと考えて、手書き文字認識の手法を利用します。利用する環境はtensorflow-1.15の環境です。入力データはminimax法で活用したすべての手順(9!=362880)の組み合わせの中から勝負が決まった時点の3目並べのフィールド情報と結果(勝ち、負け、引き分け)を利用します。

tensorflowで利用できる形式に変換し、学習をしてモデルを作成し、モデルを利用して3目並べの対戦をします。元情報がminimax法で解析した情報なので、tensorflowによる学習結果がminimax法まで到達できると最高の結果です。大まかな手順は以下の通りです。

(1) minimax法の解析を利用して学習用入力データを作成
(2) 作成した学習用入力データを利用して、tensorflowでモデル作成
(3) tensorflowのモデルを利用して実際に対戦

上記手順を3回に分けて記述し、今回は2回目です。

(2) 詳細

(2) 作成した学習用入力データを利用して、tensorflowでモデル作成

dltensorflow.pyを作成します。動作環境はtensorflow-1.15の環境です。

学習用データは、r1_data.npy(フィールドデータ)、r2_data.npy(結果データ)で、件数は、255,168件です。これを75%のトレーニングデータと25%のテストデータに分割して動作確認後、再度100%のデータを利用して、もう一度トレーニングをしてモデルを作成、保存します。

下記コードのコメント部分が最初のトレーニング部分です。現在は100%でトレーニングの状態になっています。
完成したモデルは、dlmodel.h5で保存します。

import tensorflow as tf
from tensorflow.keras.layers import Activation, Dense, Dropout
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.optimizers import SGD

import numpy as np
import matplotlib.pyplot as plt

images = np.load('r1_data.npy')
labels = np.load('r2_data.npy')
print(images.shape, labels.shape)

count = int(images.shape[0] * 0.75)

train_images, test_images = np.split(images, [count])
print(train_images.shape, test_images.shape)

train_labels, test_labels = np.split(labels, [count])
print(train_labels.shape, test_labels.shape)

model = Sequential()
model.add(Dense(64, activation='sigmoid', input_shape=(9,)))
model.add(Dense(32, activation='sigmoid'))
model.add(Dropout(rate=0.5))
model.add(Dense(3, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.1),
        metrics=['acc'])

#history = model.fit(train_images, train_labels, batch_size=500,
#        epochs=50, validation_split=0.2)

history = model.fit(images, labels, batch_size=500,
        epochs=100, validation_split=0.2)

plt.plot(history.history['acc'], label='acc')
plt.plot(history.history['val_acc'], label='val_acc')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(loc='best')
plt.show()

model.save('dlmodel.h5')
model = load_model('dlmodel.h5')

test_loss, test_acc = model.evaluate(test_images, test_labels)
print('loss: {:.3f}\nacc: {:.3f}'.format(test_loss, test_acc))

参考

AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門
布留川 英一 著 

コメント

このブログの人気の投稿

miniPCのBMAXでWindows11のsecure boot設定漏れでトラブル発生

LinuxMint-22.3にWine 11.6をサクッと入れてみました

LinuxMint 21.3にWinBoat導入を試してみました