LoginSignup
4
4

More than 5 years have passed since last update.

Pylearn2で三目並べのAIをつくってみる - モデルの保存と読み込み -

Posted at

はじめに

この記事は「Pylearn2で三目並べのAIをつくってみる」の続編です。
使用しているMLPモデルや棋譜のフォーマットなどの情報が書いてあるので、前の記事をお読みいただいてから、この記事を読むことをお勧めいたします。

前の記事で

今後は一度のトレーニング結果を元に、任意の入力に対する次の一手を簡単に得られるようにして、三目並べのゲームに実装してみようと思います。まずは三目並べのゲームプログラムを作らねば。

と結んでいましたので、こちらを実現します。
そのために、トレーニング済みのモデルの保存と読み込みをする必要がありました。
その方法を紹介して、実際にwxPythonで三目並べを作成します。
ソースコードなどの必要なファイルはGitHubに上げていますので、そちらから取得してください。

Pylearn2でのモデルの保存と読み込み方法

分かってみれば、簡単でした。

from pylearn2.utils import serial
...
...
ann = mlp.MLP([h0,out], nvis=9)
path = "./hoge.pkl"

# save model
serial.save(path, ann, on_overwrite='backup')

# load model
ann = serial.load(path)

'on_overwrite'は'ignore', 'backup' が選択できます。

  • ignore : 無視して上書き
  • backup : save前に .bak としてバックアップをし、saveが成功したら .bakファイルを削除します。saveが失敗したとき、復旧できます。

特に理由がない限り、'backup'でよいのではないかと思います。

wxPythonによる三目並べ

動作確認環境

  • LinuxMint 17.3 (python2.7.6 + wxpython3.0.3)

wxPythonは2.8でも動作すると思います。
wxPythonのインストール手順はこちらなどをご覧ください。
WindowsではPylearn2のインストールが至難の業なので、Linuxで実行してください。Macでは...すいません、分かりません...

使い方

tic-tac-toe.png

1. モデルのパラメータを設定し、学習したモデルをSaveする
右半分のパネルでモデルのパラメータを設定します。

  • h0 : Sigmoid
    • irange : 初期の重みの範囲。±irangeの範囲からランダムで設定されます。
    • init bias : 初期バイアス値
  • out : Softmax
    • irange : 初期の重みの範囲。±irangeの範囲からランダムで設定されます。
  • open .csv
    • 読み込む棋譜ファイルの指定。tic_tac_toe.pyと同一フォルダから読み込まれます。
  • save .pkl
    • Saveするモデルファイル名。tic_tac_toe.pyと同一フォルダに作成されます。
  • term criterion
    • termination_criterion. 学習終了するEpochCounter値を設定します。

2. Game Modeの選択

  • Man vs Comp : 人が先攻、Computerが後攻
  • Comp vs Man : Computerが先攻、人が後攻

3.読み込むモデルファイルの指定してGame Start
4.マウスの左クリックで〇×を置きます。Computerは学習結果から自動で置きます。

一度モデルを保存すれば、それを指定するだけでそのモデルでゲームできます。

楽しむポイント

  • 読み込む棋譜ファイルを先攻が勝ったもの(records_1st_win.csv)、先攻が負けたもの(records_1st_lose.csv)、全部まとめたもの(records.csv)で変更すると挙動が変わります。先攻が勝った棋譜で学習させたモデルで、Computerに後攻で打たせる意地悪をすると...
  • termination_criterionを非常に小さい値にすると...
  • 自分で最善手を打っている棋譜を元にすると...

などパラメータを変えて、AIの挙動を見て楽しんでください。
また、以下のようなコンソール出力されるComputerが打つ手の自信の具合(と私は呼んでいます)を見ながらゲームするのもおススメです。

[ 0.1223754   0.07839377  0.1005455   0.09967972  0.0958171   0.05355689
  0.13877278  0.08772236  0.22313648]
[  1.69255291e-01   1.79474672e-01   6.59611187e-02   8.35728072e-02
   1.76704145e-01   5.69182580e-05   1.74977445e-01   1.48576416e-01
   1.42118607e-03]
[  3.94020768e-02   3.56583963e-03   9.39233627e-05   1.20089713e-01
   4.85647829e-01   2.05857441e-04   2.00150417e-01   1.50013023e-01
   8.31320404e-04]
[  3.55036488e-01   8.74969597e-03   2.24572898e-04   7.35919590e-04
   1.89100732e-02   3.48102279e-04   2.63566398e-01   3.48737495e-01
   3.69125555e-03]

[ ]で囲まれた9つの数字は合計で1になります。9つの数字は9つのマスに対応します。
この中で最大の値を取っているマスにAIは打ちます。
この数字を確率のように考えると、

  • どの数字もあまり大差がない場合 → あまり自信なし。
  • ひとつだけ圧倒的に値が大きい場合 → 自信満々

自信満々に変なマスに打つと、ちょっと愛らしい。

ぜひ、いろいろと試して遊んでみてください。

参考

https://github.com/lisa-lab/pylearn2/blob/master/pylearn2/train.py
http://fastml.com/how-to-get-predictions-from-pylearn2/
http://deeplearning.net/software/pylearn2/library/utils.html

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4