Unity的机器学习项目ML-Agent出来有一阵子了,但之前一直没有接触过,这次我打算利用这篇文章初步熟悉下这个神器,也希望我的分享能给读者带来帮助。
环境篇
安装Anaconda和Python 3
可以从Anaconda官方网站下载安装,并且Anaconda本身就内置Python 3和一些数据科学的库。当然如果追求效率(图省事)也可以像我一样用Visual Studio的安装工具。
值得一提的是安装完后需要添加一下环境变量的Path,类似这样
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Scripts
一个是Python的安装路径,一个是路径下的Scripts文件夹。
下载ML-Agent项目代码,并安装依赖库
到ML-Agent的GitHub地址下载项目,这里选择直接下载压缩包。
下载完后解压打开,会发现python文件夹下有一个requirements.txt文件,记录了所需要的库:
tensorflow==1.7.1
Pillow>=4.2.1
matplotlib
numpy>=1.11.0
jupyter
pytest>=3.2.2
docopt
pyyaml
protobuf==3.5.2
grpcio==1.11.0
这么多库总不能一个个手动pip install吧。别急,用pip install .
命令即可全部安装,其中最后的 .
代表全部,不能省略。
现在,我们可以选择在命令行中直接进到...\ml-agents-master\python
中,输入pip install .
,或者为了方便环境管理,也可以用Anaconda先建一个环境,然后在环境中安装库。这里选择了后者。
在Anaconda Prompt中用 conda create -n ML-Agent python=3.6
或者在Anaconda Navigator中创建,如图(注意要选3.x版本)。
打开终端
依次输入cd E:\Python\ml-agents-master\python
(对应ML-Agent中python文件夹的路径)、:E
(上述文件夹的根目录)和pip install .
。
好了,万事俱备,现在可以愉快地开始了。
使用篇
设置并生成工程
用Unity打开...\ml-agents-master\unity-environment
,在Example中选择Tennis网球游戏,说是网球,但其游戏规则更类似于羽毛球,双方互相击球,不能让球在己方落地或打出界。
在这个游戏中,会有一个老师和一个学生,我们需要给老师附上预设的模型(...\Assets\ML-Agents\Examples\Tennis\TFModels\Tennis.bytes
),来训练学生。
首先将TeacherBrain的BrainType改为Internal,这个时候会发现报错了,点击show me how,可以看到在文档最后给出了解决方案。
原来我们还缺了关键的一环,预设的模型有了,但是在Unity中怎么运行TensorFlow来用这个模型呢?这就要用到TFSharpPlugin.unitypackage 了,这个插件中有Tensorflow Sharp封装成的动态链接库,而后者是Tensorflow的C#版本。导入完后还需如下设置。
好,现在我们可以把模型导入到TeacherBrain中了。
接下来还需要将StudentBrain的BrainType设为External,才能从外部操控和训练。
然后Build。
训练模型
得到运行程序后,依然是打开终端,进入刚才的python文件夹,输入python learn.py E:\Unity\TennisTrain\TennisTrain.exe --run-id=TennisTrain --train
(其中E:\Unity\TennisTrain\TennisTrain.exe是刚才Build出来的程序路径,run-id=TennisTrain则是完成训练后存放的路径,在...\ml-agents-master\python\model
下 ),然后就开始训练了。
导入模型并运行
训练得到的模型就保存在...\ml-agents-master\python\model\TennisTrain
下,将其复制到工程中,与之前对TeacherBrain的处理类似,我们将得到的模型导入到StudentBrain中。
然后运行就可以了。
不愧是ML-Agent和TensorFlow,效果拔群。