1 Star 0 Fork 0

blackldh / NineLearning

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

NjuptGo

folk from NineLearning

实现9路幻影围棋的基础AI

Pyaq

Pyaq是仅用Python实现的Go程序。 该程序是旨在学习和玩Go神经网络模型的深度学习教程。

top

更具体地讲,做了以下内容。

  • 使用TensorFlow学习9条记录
  • 玩学习的模型

它是Go游戏和深度学习的最低必需实现,它具有约1000行的所有学习和执行代码。如果您想学习更高级的内容,请阅读源代码。当然也欢迎拉取请求。

1.准备

以下面的环境为例进行说明。

  • Ubuntu 16.04
  • Python 2.7
  • TensorFlow

引进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.ckptPyaq/“,并使用 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

2.学习

首先,扩展学习文件。

$ 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_CNTFILTER_CNT或板,KEEP_PREV_CNT或改变,如改变该模型的形状,通过使用原始游戏记录数据,则可以产生更有力的参数。如果您有兴趣,请尝试为您创建最强大的网络。

3.让我们玩自我比赛(控制台)

使用在控制台上学习的模型,让我们首先进行不搜索的自我匹配。

$ ./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秒

4.在GoGui上玩

人谁不学习,学到的数据文件Pyaq/pre_trainmodel.ckptPyaq/被复制到请。

使用GoGui与AI一起。 将菜单>游戏>面板尺寸设置为“ 9”后,从菜单>程序>新程序中注册“命令”和“工作目录”。

resister

启动后,您可以使用GUI。可以从菜单>工具> GTP Shell中查看思想日志。

top

https://twitter.com/ymg_aq)

附录:

围棋英文术语:

  • 贴目 (komi)
  • 气 (liberty)
  • 叫吃 (atari)
  • 劫(Ko)

规则说明:

让子:是围棋的一种对弈制度,指持黑子的一方先在棋盘上摆上一定数目的子之後,再由执白子的一方开始下

贴目:指黑方由于先手,在布局上占有一定的优势,为了公平起见,在最后计算双方所占地的多少时,黑棋必须扣减一定的目数或子数。

:如图,轮白下子时,白在A位提黑一子;此时,黑不能立即回提A位的白子,必须寻找劫材,即在别处下一着,待白方应后,再回提A位的白子。但是,并非所有的劫材都会导致对方应一手,在价值判断取舍的情况下,对方也可能不应劫而解消劫争,“劫胜”也叫“消劫”。

License

MIT License

Author:

Thanks to origin Author: [Yu Yamaguchi](

MIT License Copyright (c) 2018 Yu Yamaguchi Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

暂无描述 展开 收起
Python 等 2 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/blackldh/NineLearning.git
git@gitee.com:blackldh/NineLearning.git
blackldh
NineLearning
NineLearning
master

搜索帮助