Giter Club home page Giter Club logo

ninelearning's Introduction

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](

ninelearning's People

Contributors

blont714 avatar freedomisgood avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.