folk from NineLearning
实现9路幻影围棋的基础AI
Pyaq是仅用Python实现的Go程序。 该程序是旨在学习和玩Go神经网络模型的深度学习教程。
更具体地讲,做了以下内容。
它是Go游戏和深度学习的最低必需实现,它具有约1000行的所有学习和执行代码。如果您想学习更高级的内容,请阅读源代码。当然也欢迎拉取请求。
以下面的环境为例进行说明。
引进TensorFlow是在Ubuntu安装TensorFlow请参考。 将GPU与TensorFlow一起使用时
必须安装。此外,还需要nVidia生产的CUDA Capability 3.5或更高版本的图形板。 有关CUDA的安装,请参考在Ubuntu 16.04LTS上安装的CUDA 8.0和cuDNN 6(注意:版本与链接不同)。
接下来,下载源代码。
$ git clone https://github.com/ymgaq/Pyaq
您也可以从右上角的“克隆或下载”手动下载它。 准备完成。
如果要立即运行,请将学习到的数据文件复制Pyaq/pre_train/model.ckpt
到Pyaq/
“,并使用 GoGui。
让我们检查一下测试匹配是否有效。
$ ./pyaq.py --self --random
如果获得以下输出,则说明成功。转到“ 2.学习”。
A B C D E F G H J
9 . X X X X X X . X 9
8 X X X . X X X X X 8
7 O O X X X O O X O 7
6 O O O O O . O O O 6
5 O O X O O O O . O 5
4 X X X O . O . O O 4
3 . X O O O O O O . 3
2 X X X X X O O O O 2
1 X . X O O O O O . 1
A B C D E F G H J
A B C D E F G H J
9 . X X X X X X . X 9
8 X X X . X X X X X 8
7 O O X X X O O X O 7
6 O O O O O . O O O 6
5 O O X O O O O . O 5
4 X X X O . O . O O 4
3 . X O O O O O O . 3
2 X X X X X O O O O 2
1 X . X O O O O O . 1
A B C D E F G H J
result: W+16.0
首先,扩展学习文件。
$ cd Pyaq
$ unzip sgf.zip
使用9个跟踪记录文件(* .sgf)进行学习。当您运行以下命令时,学习开始:
$ ./pyaq.py --learn
如果要在没有GPU的情况下进行训练,请--cpu
添加一个选项。
(但是,纯CPU学习尚未经过全面测试。)
$ ./pyaq.py --learn --cpu
学习日志扩展如下:相同的内容也记录在log.txt中。 根据GPU的性能,学习将在大约3-4小时内完成。仅对于CPU,大约需要3天。
imported 34572 sgf files.
converting ...
learning rate=0.0003
progress: 0.10[%] 14.3[sec]
progress: 0.20[%] 13.3[sec]
progress: 0.30[%] 13.3[sec]
progress: 0.40[%] 13.4[sec]
progress: 0.50[%] 13.3[sec]
progress: 0.60[%] 13.4[sec]
progress: 0.70[%] 13.3[sec]
progress: 0.80[%] 13.3[sec]
progress: 0.90[%] 13.2[sec]
progress: 1.00[%] 13.2[sec]
progress: 1.10[%] 13.3[sec]
progress: 1.20[%] 13.3[sec]
progress: 1.30[%] 13.3[sec]
progress: 1.40[%] 13.2[sec]
progress: 1.50[%] 13.2[sec]
progress: 1.60[%] 13.2[sec]
progress: 1.70[%] 13.3[sec]
progress: 1.80[%] 13.3[sec]
progress: 1.90[%] 13.2[sec]
progress: 2.00[%] 13.2[sec]
progress: 2.10[%] 13.2[sec]
progress: 2.20[%] 13.4[sec]
progress: 2.30[%] 13.4[sec]
progress: 2.40[%] 13.2[sec]
progress: 2.50[%] 13.3[sec]
train: policy=46.95[%] value=0.469
test : policy=47.13[%] value=0.469
progress: 2.60[%] 15.5[sec]
progress: 2.70[%] 13.4[sec]
每2.5%对测试数据进行评估。policy
是游戏分数的下一手和神经网络输出的一手之间的匹配率,并且value
是分数分数与网络输出的评估值(-1至+1)之间的误差(均方误差)。最后,在测试数据中似乎策略为57%,值约为0.36。
学习完成后,将model.ckpt
保存参数文件。
网络模型的BLOCK_CNT
和FILTER_CNT
或板,KEEP_PREV_CNT
或改变,如改变该模型的形状,通过使用原始游戏记录数据,则可以产生更有力的参数。如果您有兴趣,请尝试为您创建最强大的网络。
使用在控制台上学习的模型,让我们首先进行不搜索的自我匹配。
$ ./pyaq.py --self --quick --cpu
无需搜索即可获得战斗结果。
A B C D E F G H J
9 . . . . . O O X . 9
8 . . O O . O X X X 8
7 . O X X O O O X . 7
6 . . . O X O X X . 6
5 O O . O X X O . . 5
4[X] X O O O X O . . 4
3 X X X O X X X . . 3
2 X . X O X . . . . 2
1 . X O O O X . . . 1
A B C D E F G H J
A B C D E F G H J
9 . . . . . O O X . 9
8 . . O O . O X X X 8
7 . O X X O O O X . 7
6 . . . O X O X X . 6
5 O O . O X X O . . 5
4 X X O O O X O . . 4
3 X X X O X X X . . 3
2 X . X O X . . . . 2
1 . X O O O X . . . 1
A B C D E F G H J
A B C D E F G H J
9 . . . . . O O X . 9
8 . . O O . O X X X 8
7 . O X X O O O X . 7
6 . . . O X O X X . 6
5 O O . O X X O . . 5
4 X X O O O X O . . 4
3 X X X O X X X . . 3
2 X . X O X . . . . 2
1 . X O O O X . . . 1
A B C D E F G H J
result: Draw
接下来,让我们与搜索进行自我匹配。
$ ./pyaq.py --self --byoyomi=3
如果没有GPU,则--cpu
添加一个选项。
$ ./pyaq.py --self --byoyomi=3 --cpu
游戏每步进行3秒。
move count=3: left time=0.0[sec] evaluated=104
|move|count |rate |value|prob | best sequence
|D5 | 1114| 54.7| 56.3| 90.4| D5 ->C5 ->C4 ->E5 ->D6 ->E6 ->E7 ->E4
|E4 | 150| 51.3| 55.2| 0.8| E4 ->E3 ->D5 ->C5 ->E5 ->F3 ->C4 ->D3
|F4 | 20| 51.2| 54.3| 0.8| F4 ->D6 ->D7
|D6 | 1| 48.1| 48.1| 3.0| D6
|C6 | 1| 46.0| 46.0| 2.3| C6
|C3 | 1| 44.4| 44.4| 1.8| C3
A B C D E F G H J
9 . . . . . . . . . 9
8 . . . . . . . . . 8
7 . . . . . . . . . 7
6 . . . . . X . . . 6
5 . . . [X] . . . . . 5
4 . . . O . . . . . 4
3 . . . . . . . . . 3
2 . . . . . . . . . 2
1 . . . . . . . . . 1
A B C D E F G H J
思想记录的内容如下。
move count
移动计数left time
剩余时间evaluated
以此想法评估的board数量move
选手步数count
搜索数rate
选手的胜率value
选手开始时的评估值prob
选手走棋的概率best sequence
最佳顺序pyaq.py的命令行选项如下。
--cpu
仅使用CPU--learn
从游戏记录中学习--self
在控制台上进行自我比试--random
随机play--quick
选择可能性最高的(不搜索)--clean
中止(仅在搜索时)--main_time=600
设定总时间10分钟--byoyomi=10
将读数时间设为10秒人谁不学习,学到的数据文件Pyaq/pre_train
中model.ckpt
的Pyaq/
被复制到请。
使用GoGui与AI一起玩。 将菜单>游戏>面板尺寸设置为“ 9”后,从菜单>程序>新程序中注册“命令”和“工作目录”。
启动后,您可以使用GUI。可以从菜单>工具> GTP Shell中查看思想日志。
让子:是围棋的一种对弈制度,指持黑子的一方先在棋盘上摆上一定数目的子之後,再由执白子的一方开始下
贴目:指黑方由于先手,在布局上占有一定的优势,为了公平起见,在最后计算双方所占地的多少时,黑棋必须扣减一定的目数或子数。
劫:如图,轮白下子时,白在A位提黑一子;此时,黑不能立即回提A位的白子,必须寻找劫材,即在别处下一着,待白方应后,再回提A位的白子。但是,并非所有的劫材都会导致对方应一手,在价值判断取舍的情况下,对方也可能不应劫而解消劫争,“劫胜”也叫“消劫”。
Author:
Thanks to origin Author: [Yu Yamaguchi](
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。