赋闲在家,在Unity3D官方论坛上看到“机器学习挑战赛”后琢磨着学习学习。然后在网上看到一篇难得的指导详尽、新手友好的环境搭建教程,可惜是英文的,想着以后可能还会参考,还是读中文比较快,所以就自己简译一次放在这里,也供他人参考。
原文链接: https://unity3d.college/2017/10/25/machine-learning-in-unity3d-setting-up-the-environment-tensorflow-for-agentml-on-windows-10/
操作系统:Win10 x64
Unity3D: 2017.2.0f3
下载CUDA Toolkit 8.0 GA2,链接地址:https://developer.nvidia.com/cuda-toolkit-archive
下载完毕后运行并安装,一路默认next即可,不过需要注意的是安装前应确保Unity3D Editor 和 Visual Studio没有实例在运行。
CUDNN:CUDA Deep Neural Network library
下载链接:https://developer.nvidia.com/cudnn
这里下载需要注册Nvidia的账号,注册一个就好了,免费的。之后选择版本“v6.0 for CUDA 8.0”
下载的是zip压缩文件,下载后将其中的bin、include、lib三个文件夹拷贝到CUDA的文件目录下,一般是:C:\Program Files\NVIDIA GPU Computing Toolkit\cuda\v8.0
这个是用于配置Python环境,下载链接:https://www.anaconda.com/download/
下载后一路默认安装即可。安装完毕后开始菜单栏中搜索Anaconda Prompt并点击运行
接下来,搭建并安装tensorflow环境,依次输入以下命令:
> conda create -n tensorflow-gpu python=3.5.2
> activate tensorflow-gpu
> pip install tensorflow-gpu
> python
> import tensorflow as tf
下载地址:https://github.com/Unity-Technologies/ml-agents
“以管理员身份运行”另一个Anaconda Prompt窗口,命令行进入工程文件下的python目录,比如我的是:D:\program study\ML-Agent\ml-agents-master\python
运行如下命令以安装html5lib库
> conda install –f html5lib
> pip install .
注意别漏了那个点,表示当前目录
如果上述步骤都没有出错,那么环境搭建部分就算完成了,接下来进入机器学习部分。
这里我选择了平衡球项目,详细步骤可在下载下来的样例工程目录中的“docs/Getting-Started-with-Balance-Ball.md”文件里查看。
Assets/ML-Agents/Examples/3DBall/
在Anaconda Prompt窗口下,切换路径到python目录下后,输入命令
> jupyter notebook
然后用浏览器打开http://localhost:8888
,可以看到如下页面
点击上述页面(http://localhost:8888)中的ppo.ipynb,在新开窗口中修改如下配置:
- env_name设置为你的输出exe文件名
- max_steps设置为50000
- buffer_size设置为5000
- batch_size设置为512
其中后三个修改是为了加快学习速度,也可以保持默认不变,或者修改为其他值。
设置完后,鼠标点击页面最下方的“Export the trained Tensorflow graph”模块,然后点击菜单栏”Cell”->”Run All Above”,稍等片刻后,即会自动运行输出的exe程序开始训练,训练完毕后会在python/models/ppo
目录下生成对应的.bytes文件并自动关闭exe程序窗口。
在cmd窗口下进入python目录,运行以下命令后,用浏览器打开localhost:6006
即可观察训练过程(不过我使用时页面是空白的)
> tensorboard --logdir=summaries
具体参数含义可见docs下的Getting-Started-with-Balance-Ball.md文档,这里就不写了。
这个需要下载TFSharpPlugin.unitypackage插件,下载链接:https://s3.amazonaws.com/unity-agents/0.2/TFSharpPlugin.unitypackage
下载速度可能比较慢,可以网上搜下有没有相应资源,我在网上搜了一个,但是下载后无法导入Unity,报错无法解压缩,后来再用原链接下,很快又下好了,不知道为啥。
下载完毕后,导入到Unity工程中,这个包中包含了样例工程的文件和我们需要的Plugins下的文件,因为导入时不能选择特定文件,所以全部导入覆盖即可,完成后会发现Plugins目录下相较之前多了Android、IOS、Computer三个文件夹和System.Numerics及System.ValueTuple两个文件。
然后在PlayerSettings中修改如下两个设置:
- Other Settings下Scripting Runtime Version设置为Experimental (.NET 4.6 Equivalent)
- Other Settings下Scripting Defined Symbols添加ENABLE_TENSORFLOW后切记回车
点击File
-> Save Project
后重启Unity3D Editor。
注意: TensorFlowSharp支持仍为实验功能,启用支持后,Brain Type只能选择”Internal”!
unity-environment/Assets/ML-Agents/Examples/3DBall/TFModels/
目录Name:epsilon,ValueType:FloatingPoint,MinValue:0,MaxValue:0
以上设置完毕后,点击运行,即可看到球体掉落在平板上后已可维持平衡而不是之前从平板上滑落。