Unity-ML-Agents安装

news2024/11/18 5:40:41

目录

1.下载ML-Agents

 1.1 前往官网

 1.2 选择版本

 1.3 下载文件

2.下载Anaconda

3.虚拟环境

3.1 构建虚拟环境

3.2 创建项目,导入package.json

3.2.1 创建项目,导入package.json

3.2.2 导入成功

3.2.3 将模板项目拖入unity项目中

3.3 开始训练 

3.3.1 开始训练

3.3.2 选择场景

3.3.3 利用训练结果

 4. 安装cuda和cudnn

4.1 安装cudatoolkit 

4.2 安装cudnn 


1.下载ML-Agents

官网下载:https://github.com/Unity-Technologies/ml-agents

 1.1 前往官网

注意事项:请看官网的叙述,比如要求的unity的版本等。发行版19要求的unity最低是2020.3

 1.2 选择版本

 1.3 下载文件

2.下载Anaconda

官网链接:https://www.anaconda.com/

3.虚拟环境

3.1 构建虚拟环境

(base) E:\>conda create -n ML_Agents python=3.8
(base) E:\>conda activate ML_Agents

(ML_Agents) E:\>pip install torch~=1.7.1   # 如果安装很慢的话,可以换镜像源

(ML_Agents) E:\>cd E:\ml-agents-release_19 # 切换到下载ml-agents的路径下,如果不在同一个磁盘,先切换磁盘

(ML_Agents) E:\ml-agents-release_19>pip install -e./ml-agents-envs
(ML_Agents) E:\ml-agents-release_19>pip install -e./ml-agents
这种警告,错误,记得关代理

问:pip install torch~=1.7.1 中的~什么意思?

在Python中,波浪号(~)通常用于指定包的版本范围。在pip install命令中,~用于指定一个包的兼容版本范围,表示可以安装指定版本的包以及在该版本的最小和最大次要版本之间的所有修订版本。

例如,torch~=1.7.1表示可以安装1.7.1版本的torch包,以及在1.7.1版本的最小和最大次要版本之间的所有修订版本,例如1.7.2、1.7.3等,但不包括1.8.0及以上的版本。

这种方式可以确保包的更新不会破坏现有代码的兼容性,同时可以获取到包的修复和改进的更新版本。

另外推荐安装netron用于查看 onnx 模型结构(pip install netron

netron在线版本:浏览器中输入链接:https://lutzroeder.github.io/netro/

netron

点击Open Model,打开相应的网络模型文件即可。

参考博客:https://blog.csdn.net/nan355655600/article/details/106245563

windows版本netron下载链接:https://gitcode.net/mirrors/lutzroeder/netron?utm_source=csdn_github_accelerator

3.2 创建项目,导入package.json

3.2.1 创建项目,导入package.json

3.2.2 导入成功

3.2.3 将模板项目拖入unity项目中

解决报错

注意:原始的包里有PushBlockWithInput这个文件夹,我们要将其删除,因为我们没有导入inputSystemPackagee,所以会报缺失inputSystem的错。

注意:要在拖入后删除,这样不会影响本机文件的完整性。

3.3 开始训练 

3.3.1 开始训练

(ML_Agents) E:\ml-agents-release_19>mlagents-learn config/ppo/PushBlock.yaml --run-id=push_block_test_02

重点:如果需要换成其他算法,只需将ppo换成poca、sac等即可,也可以修改配置文件里的一些参数,如神经网络的层数和节点数,以及其他超参数等。

配置文件路径在 E:\ml-agents-release_19\config\ppo\PushBlock.yaml

配置文件内容-PushBlock.yaml

behaviors:
  PushBlock:
    trainer_type: ppo
    hyperparameters:
      batch_size: 128
      buffer_size: 2048
      learning_rate: 0.0003
      beta: 0.01
      epsilon: 0.2
      lambd: 0.95
      num_epoch: 3
      learning_rate_schedule: linear
    network_settings:
      normalize: false
      hidden_units: 256
      num_layers: 2
      vis_encode_type: simple
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
    keep_checkpoints: 5
    max_steps: 2000000
    time_horizon: 64
    summary_freq: 60000

这是一个ML-Agents配置文件的示例,以下是其中各个参数的详细的解释:

  • behaviors:行为列表,指定了每个行为的训练设置和网络架构。
  • PushBlock:行为名称。
  • trainer_type:训练器的类型,这里是PPO。
  • hyperparameters:超参数,包括以下几个:
    • batch_size:每个训练批次的大小。
    • buffer_size:经验缓存的大小。
    • learning_rate:学习率。
    • beta:熵正则化参数。
    • epsilon:控制策略更新步长的参数。
    • lambd:GAE参数。
    • num_epoch:PPO算法中的epoch数。
    • learning_rate_schedule:学习率调整策略,这里是线性调整。
  • network_settings:神经网络设置,包括以下几个:
    • normalize:是否对输入数据进行归一化处理。
    • hidden_units:每个隐藏层中神经元的数量。
    • num_layers:隐藏层数量。
    • vis_encode_type:可视化编码类型,这里是simple。
  • reward_signals:奖励信号设置,包括以下几个:
    • extrinsic:外部奖励信号,包括以下两个参数:
      • gamma:折扣率。
      • strength:奖励信号权重。
  • keep_checkpoints:保存检查点的数量。
  • max_steps:最大训练步数。
  • time_horizon:每个训练步长包含的最大时间步数。
  • summary_freq:训练日志的记录频率。

参数详情请见:https://blog.csdn.net/aaaccc444/article/details/130300451

解决报错1

这个错误提示显示您的 protobuf 版本过高导致了问题。建议您采取以下措施之一:

  1. 降低 protobuf 版本,使其小于等于 3.20.x
  2. 将环境变量 PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION 设置为 python。

第一种方法是安装一个旧版本的 protobuf。将protobuf包降级到3.20.x或更低版本,可以使用以下命令卸载当前版本的 protobuf,然后安装一个旧版本:

pip uninstall protobuf
pip install protobuf==3.19.6  # 之所以选择3.19.6这个版本,是结合了tensorboard版本后确定的。因为如果选择3.19.0版本会和tensorboard不兼容

第二种方法是将环境变量 PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION 设置为 python。这将使用纯 Python 解析,速度会慢一些,但可以解决问题。请注意,如果这个错误是由于你自己生成的代码导致的,则需要使用 protoc >= 3.19.0 重新生成代码。

在命令行中执行以下命令:

set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python

设置后,再次运行您的命令,应该就不会再遇到此错误了。

解决报错2

(ML_Agents) E:\ml-agents-release_19>mlagents-learn config/ppo/PushBlock.yaml --run-id=push_block_test_02
Traceback (most recent call last):
  File "D:\RuanJianAnZhunangWeiZhi\anaconda\anaconda3\envs\ML_Agents\Scripts\mlagents-learn-script.py", line 33, in <module>
    sys.exit(load_entry_point('mlagents', 'console_scripts', 'mlagents-learn')())
  File "D:\RuanJianAnZhunangWeiZhi\anaconda\anaconda3\envs\ML_Agents\Scripts\mlagents-learn-script.py", line 25, in importlib_load_entry_point
    return next(matches).load()
  File "D:\RuanJianAnZhunangWeiZhi\anaconda\anaconda3\envs\ML_Agents\lib\importlib\metadata.py", line 77, in load
    module = import_module(match.group('module'))
  File "D:\RuanJianAnZhunangWeiZhi\anaconda\anaconda3\envs\ML_Agents\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\learn.py", line 13, in <module>
    from mlagents.trainers.trainer_controller import TrainerController
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\trainer_controller.py", line 13, in <module>
    from mlagents.trainers.env_manager import EnvManager, EnvironmentStep
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\env_manager.py", line 12, in <module>
    from mlagents.trainers.policy import Policy
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\policy\__init__.py", line 1, in <module>
    from mlagents.trainers.policy.policy import Policy  # noqa
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\policy\policy.py", line 10, in <module>
    from mlagents.trainers.buffer import AgentBuffer
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\buffer.py", line 97, in <module>
    class AgentBufferField(list):
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\buffer.py", line 211, in AgentBufferField
    self, pad_value: np.float = 0, dtype: np.dtype = np.float32
  File "D:\RuanJianAnZhunangWeiZhi\anaconda\anaconda3\envs\ML_Agents\lib\site-packages\numpy\__init__.py", line 305, in __getattr__
    raise AttributeError(__former_attrs__[attr])
AttributeError: module 'numpy' has no attribute 'float'.
`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations

这个错误信息看起来是在使用 mlagents-learn 命令时出现的。根据错误信息显示的内容,问题可能出现在 NumPy 库版本的兼容性问题上。

具体来说,这里似乎出现了一个 AttributeError 异常,指出 numpy 模块中没有 float 属性。根据 NumPy 的文档,这个错误是因为 np.float 被废弃了,而正确的做法是直接使用 Python 内置的 float 类型。

要解决这个问题,一种方法是升级 NumPy 库到最新版本,然后修改相关代码,用 Python 的 float 类型替换所有使用了 np.float 的地方。另一种方法是降级 NumPy 到旧版本,例如 1.19.x 或更低版本,这个版本中仍然支持 np.float

因此,您可以尝试通过以下命令降级 NumPy 库到 1.19.x 或更低版本:

pip install numpy==1.19

请注意,这可能会影响其他依赖 NumPy 库的项目,因此请在升级或降级 NumPy 时格外小心,确保您的环境保持稳定。

3.3.2 选择场景

因为之前训练过,会提示是继续训练还是覆盖训练

解决报错

(ML_Agents) E:\ml-agents-release_19>mlagents-learn config/ppo/PushBlock.yaml --run-id=push_block_test_02

            ┐  ╖
        ╓╖╬│╡  ││╬╖╖
    ╓╖╬│││││┘  ╬│││││╬╖
 ╖╬│││││╬╜        ╙╬│││││╖╖                               ╗╗╗
 ╬╬╬╬╖││╦╖        ╖╬││╗╣╣╣╬      ╟╣╣╬    ╟╣╣╣             ╜╜╜  ╟╣╣
 ╬╬╬╬╬╬╬╬╖│╬╖╖╓╬╪│╓╣╣╣╣╣╣╣╬      ╟╣╣╬    ╟╣╣╣ ╒╣╣╖╗╣╣╣╗   ╣╣╣ ╣╣╣╣╣╣ ╟╣╣╖   ╣╣╣
 ╬╬╬╬┐  ╙╬╬╬╬│╓╣╣╣╝╜  ╫╣╣╣╬      ╟╣╣╬    ╟╣╣╣ ╟╣╣╣╙ ╙╣╣╣  ╣╣╣ ╙╟╣╣╜╙  ╫╣╣  ╟╣╣
 ╬╬╬╬┐     ╙╬╬╣╣      ╫╣╣╣╬      ╟╣╣╬    ╟╣╣╣ ╟╣╣╬   ╣╣╣  ╣╣╣  ╟╣╣     ╣╣╣┌╣╣╜
 ╬╬╬╜       ╬╬╣╣      ╙╝╣╣╬      ╙╣╣╣╗╖╓╗╣╣╣╜ ╟╣╣╬   ╣╣╣  ╣╣╣  ╟╣╣╦╓    ╣╣╣╣╣
 ╙   ╓╦╖    ╬╬╣╣   ╓╗╗╖            ╙╝╣╣╣╣╝╜   ╘╝╝╜   ╝╝╝  ╝╝╝   ╙╣╣╣    ╟╣╣╣
   ╩╬╬╬╬╬╬╦╦╬╬╣╣╗╣╣╣╣╣╣╣╝                                             ╫╣╣╣╣
      ╙╬╬╬╬╬╬╬╣╣╣╣╣╣╝╜
          ╙╬╬╬╣╣╣╜
             ╙

 Version information:
  ml-agents: 0.28.0,
  ml-agents-envs: 0.28.0,
  Communicator API: 1.5.0,
  PyTorch: 1.7.1+cpu
Traceback (most recent call last):
  File "D:\RuanJianAnZhunangWeiZhi\anaconda\anaconda3\envs\ML_Agents\Scripts\mlagents-learn-script.py", line 33, in <module>
    sys.exit(load_entry_point('mlagents', 'console_scripts', 'mlagents-learn')())
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\learn.py", line 260, in main
    run_cli(parse_command_line())
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\learn.py", line 256, in run_cli
    run_training(run_seed, options, num_areas)
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\learn.py", line 71, in run_training
    validate_existing_directories(
  File "e:\ml-agents-release_19\ml-agents\mlagents\trainers\directory_utils.py", line 25, in validate_existing_directories
    raise UnityTrainerException(
mlagents.trainers.exception.UnityTrainerException: Previous data from this run ID was found. Either specify a new run ID, use --resume to resume this run, or use the --force parameter to overwrite existing data.

这段错误信息提示你的ML-Agents训练过程出现了问题。具体来说,这个错误信息说先前这个run ID的训练数据已经存在,你需要指定一个新的run ID,使用--resume来恢复这个run ID的训练,或者使用--force参数来覆盖已有的数据。

正确训练开始

 这是训练262415和16269的结果(注意查找路径),正常是训练2000000步停止训练。

利用ctrl+c终止训练,利用代码:(ML_Agents) E:\ml-agents-release_19>mlagents-learn config/ppo/PushBlock.yaml --run-id=push_block_test_02 --resume 继续训练

 这是继续训练后:382252步的结果

3.3.3 利用训练结果

其他场景先禁用,方便将训练结果拖入Area,不然得重复操作32次

 新建一个NN文件夹,把382252步的结果拖入

 原先的是自带的网络,更换成我们自己的网络。

 利用训练结果直接完成任务

 4. 安装cuda和cudnn

在训练的同时,可以新打开一个命令行窗口,激活环境,安装cuda和cudnn

4.1 安装cudatoolkit 

(mlagents) C:\Users\HASEE>conda search cuda

(mlagents) C:\Users\HASEE>conda install cudatoolkit=10.1.243

4.2 安装cudnn 

(mlagents) C:\Users\HASEE>conda search cudnn

(mlagents) C:\Users\HASEE>conda install cudnn==7.6.5

具体的cudatoolkit 与cudnn的版本对应情况暂时没找到之前一篇写的比较好的博客,请等待后续补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低代码感觉很能打——可视化搭建系统,把格局做大

有人说「可视化搭建系统」说到底只是重复造轮子产生的玩具&#xff1b; 有人说「可视化搭建系统」本质是组件枚举&#xff0c;毫无意义。 片面的认知必有其产生的道理&#xff0c;但我们不妨从更高的角度出发&#xff0c;并真切落地实践&#xff0c;也许你会发现&#xff1a;我…

Java面试题总结 | Java面试题总结5- 数据结构模块(持续更新)

数据结构 文章目录 数据结构顺序表和链表的区别HashMap 和 Hashtable 的区别Java中用过哪些集合&#xff0c;说说底层实现&#xff0c;使用过哪些安全的集合类Java中线程安全的基本数据结构有哪些ArrayList、Vector和LinkedList有什么共同点与区别&#xff1f;ArrayList和Linke…

怎样正确做web应用的压力测试?

web应用&#xff0c;通俗来讲就是一个网站&#xff0c;主要依托于浏览器实现其功能。 提到压力测试&#xff0c;我们想到的是服务端压力测试&#xff0c;其实这是片面的&#xff0c;完整的压力测试包含服务端压力测试和前端压力测试。 下文将从以下几部分内容展开&#xff1a…

源码简读 - AlphaFold2的2.3.2版本源码解析 (1)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/130323566 时间&#xff1a;2023.4.22 官网&#xff1a;https://github.com/deepmind/alphafold AlphaFold2是一种基于深度学习的方法…

torch中fft和ifft新旧版本使用

pytorch旧版本&#xff08;1.7之前&#xff09;中有一个函数torch.rfft()&#xff0c;但是新版本&#xff08;1.8、1.9&#xff09;中被移除了&#xff0c;添加了torch.fft.rfft()&#xff0c;但它并不是旧版的替代品。 torch.fft label_fft1 torch.rfft(label_img4, signal…

25岁走出外包后,感到迷茫了.....

我认识一个老哥&#xff0c;他前段时间从外包出来了&#xff0c;他在外包干了3年左右的点工&#xff0c;可能也是自身的原因&#xff0c;也没有想到提升自己的技术水平&#xff0c;后面觉得快废了&#xff0c;待着没意思就出来了&#xff0c;出来后他自己更迷茫了&#xff0c;本…

Linux安装Jenkins搭配Gitee自动化部署Springboot项目

目录 前言一、环境准备二、全局工具配置jdk、maven、git三、配置Gitee四、新建任务-部署Springboot项目 前言 Jenkins是一款流行的开源持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;工具。它可以帮助开发人员自动构建、测试和部署软件应用程序&…

广州蓝景分享—快速了解Typescript 5.0 中重要的新功能

作为一种在开发人员中越来越受欢迎的编程语言&#xff0c;TypeScript 不断发展&#xff0c;带来了大量的改进和新功能。在本文中&#xff0c;我们将深入研究 TypeScript 的最新迭代版本 5.0&#xff0c;并探索其最值得注意的更新。 1.装饰器 TypeScript 5.0 引入了改进的装饰…

二、SQLServer 的适配记录

SQLServer 适配记录 说明:由于 SQLSERVER 数据库本身和MYSQL数据库有一定的语法,创表结构,物理模式等差别,在适配过程中,可能会出现各种错误情况,可参考本次适配记录。 当前环境: 适配项目:JDK11,SpringBoot服务。 适配数据库:SELECT @@VERSION,得 Microsoft SQL …

ProtocolBuffer入门和使用

<<<<<<< HEAD 基础 入门 优势 protocol buffer主要用于结构化数据串行化的灵活、高效、自动的方法&#xff08;简单来说就是结构化数据的可串行化传输&#xff0c;类似JSON、XML等&#xff09;。 比XML解析更快&#xff1a;解析的层数更少&#xff0c;…

【技术发烧】MySqlServer,MySQL WorkBench安装详细教程

目录 一.下载安装MySQLSever 1.下载 2.安装 1.解压 2.编写配置文件 二.初始化数据库 1.以管理员身份打开命令提示符 2.初始化数据库 3.安装mysql服务并启动 4.连接MySQL 5. 修改密码 三.MySQL WorkBench下载 一.下载安装MySQLSever 1.下载 下载路径&#xff1a;https:/…

java导入导出excel数据图片合成工具

目录 java导出和导入excel数据java读取excel数据java数据导出成excel表格 java服务端图片合成的工具 java导出和导入excel数据 可以使用hutool的ExcelUtil工具。 在项目中加入以下依赖&#xff1a; <dependency><groupId>cn.hutool</groupId><artifactI…

【计算机基础】绝对路径和相对路径

目录 一.绝对路径 二.相对路径 例如 三.举例 一.绝对路径 绝对路径是指从根目录开始的完整路径&#xff0c;包括所有父目录的路径&#xff0c;直到目标文件或者目录 所在的位置。 全文件名全路径文件名绝对路经完整的路径 例如&#xff0c;在windows系统中&#xff0c;绝…

《Linux基础》09. Shell 编程

Shell 编程 1&#xff1a;Shell 简介2&#xff1a;Shell 脚本2.1&#xff1a;规则与语法2.2&#xff1a;执行方式2.3&#xff1a;第一个 Shell 脚本 3&#xff1a;变量3.1&#xff1a;系统变量3.2&#xff1a;用户自定义变量3.2.1&#xff1a;规则3.2.2&#xff1a;基本语法3.2…

Python自动发送消息小脚本,可用于各种聊天框~

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect 个…

安装k3s

k3s官方文档 architecture quick start 概述&#xff1a;k3s一个轻量级的kubernetes,因资源消耗知识kubernetes的一半&#xff0c;故取名k3s k3s的node分为 server node 和agent node: server node: 可以运行kubectl等命令&#xff0c;且包含 agent node的功能。agent node:…

【升级】专为小白设计的TypeScript入门课无密拟把疏狂图一醉

TypeScript&#xff1a;JavaScript的超集&#xff0c;提高代码可靠性和可维护性 【升级】专为小白设计的TypeScript入门课 download&#xff1a;https://www.666xit.com/3817/ 随着现代Web应用程序的复杂性增加&#xff0c;使用JavaScript编写大型项目变得越来越困难。TypeS…

Centos 安装MySQL

CentOS 安装 MySQL 1. 安装 VMware 以及 CentOS2. 安装 docker2.1 卸载&#xff08;可选&#xff09;2.2 安装 Docker2.3 启动 Docker2.4.配置镜像加速2.5 设置 Docker 开机自启 3. 安装 MySQL3.1 从docker镜像仓库中拉取mysql镜像3.2 创建实例&#xff0c;并启动3.3.查看docke…

20230422 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142. 环形链表 II

1、24. 两两交换链表中的节点 初始时&#xff0c;cur指向虚拟头结点&#xff0c;然后进行如下三步&#xff1a; 操作之后&#xff0c;链表如下&#xff1a; 看这个可能就更直观一些了&#xff1a; /*** Definition for singly-linked list.* public class ListNode {* i…

camunda流程引擎send task节点用途

Camunda的Send Task用于向外部系统或服务发送消息。消息可以是同步或异步的&#xff0c;可以发送到队列、主题或其他类型的消息中间件。Send Task通常用于将消息发送到外部系统&#xff0c;而无需等待响应或结果。相反&#xff0c;它只是向外部系统发出信号&#xff0c;通知其执…