请选择 进入手机版 | 继续访问电脑版

查看: 703|回复: 5

[原创] Unity机器学习项目实战:3D平衡小球

[复制链接]

910

主题

1570

帖子

2万

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
20185
QQ
发表于 2017-11-27 02:33:04 | 显示全部楼层 |阅读模式
本文将分享如何安装Unity机器学习代理工具(Unity Machine Learning Agents),建立示例项目运行环境,并将训练好的模型载入到Unity环境中。

Unity机器学习代理工具包中含很多示例环境项目,它们可以用作新建项目时的模板,或是用于测试新的机器学习算法,以确保算法能正常运行。

1.jpg


在本文中使用的案例是3D平衡小球(3D Balance Ball)的运行环境。该环境包含多个平板和小球。这些平板可以通过自身的调整来平衡,保持小球不掉离平板。每个平板都是一个代理,通过保持小球在平板上的时间得到奖励。一旦小球掉出平板,则会扣除奖励。这个训练过程的目的在于让平板学习永远不丢球。

开始准备

下载Unity在GitHub上的ml-agents代码库。
地址:https://github.com/Unity-Technologies/ml-agents
使用Unity 2017.1 或以上版本
配置系统环境,请参考以下配置方式。
Mac下配置Unity机器学习代理工具
Windows 10配置Unity机器学习代理工具和TensorFlow环境

设置Unity环境

运行启动Unity 2017.1,在Unity中打开unity-environment文件夹。在启动窗口中,选择Open,并在弹出的文件浏览窗口中,选择unity-environment,点击Open。
注意:如遇见弹出警告信息为”Opening Project in Non-Matching Editor Installation”,请直接忽略。

打开项目后,在Project窗口,定位到文件夹Assets/ML-Agents/Examples/3DBall/,双击Scene文件的图标,载入所有环境资源。

2.png


点击菜单Edit -> Project Settings -> Player,选中Resolution and Presentation里的Run in Background属性。

3.png


将Resolution and Presentation中的Display Resolution Dialog属性,选择Disabled。

4.png


在左边的场景层级窗口中,展开Ball3DAcademy游戏对象,并选中它的子对象Brain3DBrain,在右边的检视窗口中查看属性。

5.jpg

注意:该对象的Type of Brain设置为External。

点击File -> Build Settings,选择构建的目标平台。可以勾选Development Build来记录调试信息。

6.jpg


点击Build,保存环境文件到python文件夹中。

用强化学习训练大脑

测试Python API

要启动jupyter,在命令行中输入:jupyter notebook。在浏览器中打开localhost:8888,访问notebook文件。

7.jpg


若要确保你的环境和Python API正常运行,你可以在上述窗口中打开python/Basics Jupyter notebook。这个笔记本文件包含一个Python API的简单演示。在这个笔记本文件中,请记得把env_name变量赋值为你刚刚生成的那个文件名。


用PPO训练模型


下一步我们训练代理,让它在平台上平衡小球的位置,我们会使用一个叫做近端策略优化(Proximal Policy Optimization),简称PPO的强化学习算法。这个算法经过实验,证明是十分安全、高效且比其他强化学习算法实用性更强的,所以我们选择这个算法来作为Unity机器学习代理的示例算法。

如果想要了解更多关于近端策略优化算法的信息,请参阅OpanAI发布的博客文章:
https://blog.openai.com/openai-baselines-ppo/

8.jpg


  • 要在Ball Balance环境中训练代理,请按以下步骤操作:
  • 在Jupyter中打开python/PPO.ipynb

  • 修改env_name的值为刚刚生成的环境文件的文件名

  • 按自己需求修改run_path目录

  • 运行PPO.ipynb的代码,注意不要运行"Export the trained Tensorflow graph."这行文字后的代码。


9.jpg


观察训练过程

要更仔细地观察训练过程,你可以使用Tensorboard。在命令行中,切换到前面提到的python文件夹下,输入:tensorboard --logdir=summaries

10.jpg


然后在浏览器中打开localhost:6006。

11.jpg


从Tensorboard上,你会看到以下6个变量的统计数据:

  • Cumulative Reward:所有代理各自的平均累计奖励。在成功的训练过程中,这个变量应该会增大。

  • Value Loss:数值函数更新时的平均损失。这关系到模型是否能预测每个状态下的数值。在成功的训练过程中,这个变量会减小。

  • Policy Loss:策略函数更新时的平均损失。这关系到策略(决定行为的过程)的变化大小。在成功的训练过程中,这个变量的大小会减小。

  • Episode Length:设定环境下,所有代理中每个事件的平均长度。

  • Value  Estimates:代理所访问的所有状态下的平均数值估计。在成功的训练过程中,这个变量数值会增大。

  • Policy  Entropy:这个变量告诉你模型的决定随机度有多大。在成功的训练过程中,这个变量会缓慢减小。如果它减小得太快,beta hyperparameter应该会增大。


将训练好的模型载入Unity环境

当训练过程显示的平均回报为75或更大时,并且模型已经保存过后。你可以通过中止执行代码来停止训练。,现在你就已经有训练好的TensorFlow模型。你必须将保存的模型转换为Unity可使用的格式,这样就可以直接通过以下步骤载入到Unity项目中。
  
配置对TensorFlowSharp的支持
因为对TensorFlowSharp的支持目前还处于实验阶段,默认情况下它是被禁用的。要打开它,你必须按如下步骤操作。

请注意Internal Brain模式只在完成以下步骤后才能使用。

  • 确保使用的是Unity 2017.1以上版本。


  • 在Inspector检视窗口中对于你选择的所有平台(PC, Mac, Linux Standalone, iOS ,Android)这样操作:打开Other Settings; 在Scripting Runtime Version属性中选择Experimental (.NET 4.6 Equivalent);在Scripting Defined Symbols属性中,加入ENABLE_TENSORFLOW。

  • 重启Unity编辑器。


12.jpg


将训练好的模型载入Unity

  • 现在运行之前那个notebook文件脚本里"Export the trained TensorFlow      graph"后的代码,创建出<env_name >.bytes文件(也就是用env_name变量作为文件名,格式为.bytes的文件)


13.jpg


  • 将<env_name >.bytes文件从python/models/ppo/目录下移动到unity-environment/Assets/ML-Agents/Examples/3DBall/ TFModels/目录中。

  • 打开Unity编辑器,选择上面提到的3DBall场景。

  • 从场景的层级窗口选择Ball3DBrain对象

  • 将Type of Brain改为Internal。

  • 将<env_name>.bytes文件从项目窗口拖到3DBallBrain 检视窗口的Graph Model中。

  • 将Graph Placeholder的size值设为1。

  • 添加名为epsilon的占位符,设定类型为floating  point,范围从0到0。

  • 点击编辑器上方的Play按钮。

注意:第7步和第8步是有必要的,因为3DBall是个持续的控制环境,而TensorFlow模型会用噪音参数来决定行动。但那样的情况下控制过程是离散的,所以不需要epsilon变量)

小结

如果你按照步骤操作,现在可以看到在Unity中,训练好的模型已经能自行控制平衡小球的行为。你可以重新生成Unity文件,然后独立运行该模型,应用代理新学习的行为。后面我们还将继续为大家分享更多机器学习相关教程在Unity官方社区(unitychina.cn),请保持关注!


1

主题

17

帖子

255

贡献

初级UU族—3级

Rank: 3Rank: 3

积分
255
发表于 2017-11-29 05:39:14 | 显示全部楼层
“点击Build,保存环境文件到python文件夹中。”
请问这一步具体如何操作?python文件夹在哪?

1

主题

17

帖子

255

贡献

初级UU族—3级

Rank: 3Rank: 3

积分
255
发表于 2017-11-29 08:46:50 | 显示全部楼层
python文件夹是不是项目里的python文件夹?
那么【保存环境文件】是什么意思呢?
点击build后是选择导出的exe文件的位置,怎么保存环境文件呢?如何命名呢?

910

主题

1570

帖子

2万

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
20185
QQ
 楼主| 发表于 2017-12-1 06:07:07 | 显示全部楼层
那头小昆 发表于 2017-11-29 13:39
“点击Build,保存环境文件到python文件夹中。”
请问这一步具体如何操作?python文件夹在哪? ...


您好!建议您仔细看下项目。ml-agents下载下来,就有python文件夹的。希望能够帮助到您!

910

主题

1570

帖子

2万

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
20185
QQ
 楼主| 发表于 2017-12-1 06:08:14 | 显示全部楼层
那头小昆 发表于 2017-11-29 16:46
python文件夹是不是项目里的python文件夹?
那么【保存环境文件】是什么意思呢?
点击build后是选择导出的e ...


您好!

环境文件就是输出的exe文件,要放到python文件夹下面的。希望能够帮助到您!

0

主题

3

帖子

40

贡献

初级UU族—1级

Rank: 1

积分
40
发表于 2017-12-2 03:16:59 | 显示全部楼层
大佬!我在jupyter里运行PPO.ipynb 第一个cell就报错 说No module named 'tensorflow' 是环境还没配置好吗 搭环境时候用Anaconda Prompt里测试import tensorflow as tf 什么东西也没 也不报错 是搭好了么 求助
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表