囲碁はよく分からないので練習問題にも適さないと思ってたのですが
まぁ,こういう話ならちょっと触ってみます。
Pythonのみで動く囲碁プログラム Pyaqを公開しました。
— 山口 祐 @囲碁ソフトAQ開発中 (@ymg_aq) 2018年2月12日
深層学習を行うための教育目的のプログラムで、探索・学習のコードを合わせても1000行以内に収まります。9路のデータセットも付帯するので、すぐに学習が試せます。
手書き数字の分類に飽きた人におすすめです。https://t.co/AwL7UacEyL
本家はpython 2.7 on ubuntu 16.04 らしいんですが,そんな環境作るのもあれなので
うちのpython 3.6 on windows10 でやってみます。
結論から言うと探索なしまでは簡単に動きました。
以下,メモ。
tensorflowのWindows版もpython3.6に対応したので今では難なくインストール可能。
learn.pyの中のxrangeを二か所rangeに。(python2->3あるある)
learn.pyの中でlog吐くところでopenオプション"aw"を"a"に。
これはpython2系ならワーニングも出ないんだろうか?
学習は時間かかりそうなので少し走らせて負荷がかかることを確認して打ち切った。
メモリは1.3GB程度しか使ってない感じ。(--cpuで)
既学習データを用いての探索なし自己対戦は問題なく動く。
探索を入れるとエラー。
search.pyの117行目でdivision by 0である。
python2系は容認するらしいのだけど3系はスルーしてくれない。
np.seterr(all='ignore') # 3系で走らせるおまじないを宣言部に置く
それからもスタック不足とか色々
もしかして演算系の結果違いとかが出てるんかなぁ・・・
rate[np.isnan(rate)] = 0.0
とか行足してもどうもダメっぽい。
ってところで今夜は終わりにします。
---
2/14 追記
探索させると,numpyの実装が悪いんでしょうけどignoreしてもoldstateとかで内部で状態確保してるらしくスタック溢れて止まるようだ。
最悪2手目。たまに5,6手まで進む。
エラー前に分岐させるか・・・ #後でやる
2/16 追記
python3での不具合はhash衝突っぽい
board.pyに
import hashlib して
def hash(self):
return (int(hashlib.md5(self.color.data).hexdigest()[:4], 16) ^
int(hashlib.md5(self.prev_color[0].data).hexdigest()[:4], 16) ^ self.turn)
とhashを書き換えてやると遅くなるが衝突しなくなる。
もっとエレガントな方法があるとおもうが
python歴1年程度なので,hashについて詳しくは知らない。
2/17 追記
公式の方がエレガントに対応したので私の役割は終わりました。pyaqはいい玩具なので皆で遊びましょう。