Unity-ML-Agents注意事项及报错、警告等解决方式

这篇具有很好参考价值的文章主要介绍了Unity-ML-Agents注意事项及报错、警告等解决方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.注意事项

1.1 ml-agents 0.28.0找不到Scripts/Brain组件?

在 ml-agents 0.16.0 版本中,Unity 中的 ML-Agents 插件中包含了名为 Brain 的组件,用于控制智能体的决策过程。然而,在 ml-agents 0.28.0 版本中,该组件已经被重构为 IAgent 接口和 Agent 类。因此,如果您正在使用 ml-agents 0.28.0 或更高版本,您不会在 Unity 的 "Add Component" 菜单中找到 Brain 组件。相反,您应该使用 IAgent 接口和 Agent 类来控制智能体的行为和决策过程。

1.2 ML-Agents SDK

ML-Agents SDK(Machine Learning Agents Software Development Kit)是由Unity Technologies开发的一款用于训练AI智能体的开发工具包。该工具包利用深度强化学习技术,使开发者可以通过Unity引擎创建虚拟环境,让AI智能体在其中进行学习,最终实现自主决策的能力。

ML-Agents SDK提供了一系列组件和工具,包括智能体、环境、训练、评估和推理等,使得开发者可以更加方便地进行机器学习和深度强化学习的开发工作。同时,ML-Agents SDK还支持多种深度学习框架,如TensorFlow和PyTorch等。它包含了许多功能模块,例如Agent、Brain、Environment等,这些模块可以协同工作,使得用户可以方便地构建和训练强化学习模型。

其中,Agent表示智能体,它是一个能够感知环境、做出决策并执行动作的实体。Brain表示智能体的大脑,它用于训练智能体,并且决定智能体在不同状态下应该采取何种动作。Environment表示虚拟环境,用于模拟智能体在现实世界中的行为和情境。用户可以使用Unity创建一个虚拟环境,并在其中创建Agent和Brain,然后使用ML-Agents SDK进行训练和测试。

总的来说,ML-Agents SDK是一个非常强大的工具,可以帮助用户快速构建和训练强化学习模型,特别适合需要在虚拟环境中进行试验和仿真的应用场景。

1.3  perform inference

  • Inference Only - the Agent will always perform inference.

Inference是机器学习中一种使用训练好的模型对新数据进行预测或分类的过程。在这个场景中,"perform inference"的意思是Agent只会使用已经训练好的模型,而不会进行任何的训练。也就是说,Agent只会进行推断,根据已有的知识来做出决策,而不会再进行学习。

  • Heuristic Only - the Agent will always use the Heuristic() method.

Heuristic() 方法是指在强化学习中,一种基于规则或经验的决策方法。当 Agent 被设置为“仅启发式方法”时,它将始终使用此方法作为其行为策略。在这种情况下,Agent 将不会接受任何来自外部环境的观察和奖励信息,而是将根据其启发式方法进行动作选择。一般而言,这种方法是一种简单的“手工设计”的策略,可能不具备在复杂环境中进行智能决策所需的复杂度和灵活性。

当使用 "Heuristic Only" 模式时,代理程序将忽略神经网络模型,而是直接使用 "Heuristic()" 方法来决定每一步的行动。这意味着您可以手动编写一个简单的算法来控制代理的行动,而不需要训练神经网络。这在调试和测试模型时非常有用,因为您可以随时查看代理程序的行为,而不必等待训练完成。但是,这种方法也存在一些限制,因为它可能无法探索所有可能的策略,并且通常比使用深度强化学习训练的代理程序的性能差。

  • Default - the Agent will train if they connect to a python trainer, otherwise they will perform inference.

在 Unity ML-Agents 中,Default 是默认的 Agent 行为模式,它根据 Agent 是否与 Python Trainer 相连来判断 Agent 的操作模式。如果 Agent 与 Python Trainer 相连,则会进行训练;否则,将执行推断(inference)操作。推断是指 Agent 将使用训练好的模型进行预测并采取行动,而不会在此过程中更新模型的权重。在 Default 模式下,如果 Agent 未与 Trainer 相连,那么它将仅仅使用模型进行推断操作。

1.4 MonoBehaviour 和 Agent 基类

Unity 中的 MonoBehaviour 是一个重要的基类,它提供了许多实用的方法和属性,用于处理游戏对象的生命周期、输入事件、物理事件等。MonoBehaviour 可以在自己的派生类中被重载和扩展,以实现更加具体的功能。

在 ML-Agents 的 Agent 中,它的基类是 Agent,它提供了许多与强化学习相关的方法和属性,用于与智能体环境进行交互,例如:观察环境、决策动作、接收奖励等。与此同时,Agent 还可以重载 MonoBehaviour 中的方法,例如:Update()OnTriggerEnter() 等,以实现更加具体的功能。

1.5 Training on Headless Server

Training on Headless Server是指在没有显示器和图形界面的服务器上进行训练。这种服务器通常被称为Headless Server,因为它们没有图形界面,用户只能通过终端或者远程登录进行操作。在这种情况下,训练过程需要通过命令行界面进行配置和启动,并且所有的输出结果都会以文本形式在终端中显示。

使用Headless Server进行训练的好处在于可以充分利用服务器的计算资源,而不必担心图形界面对计算性能的影响。此外,使用Headless Server还可以节省成本,因为通常来说,Headless Server比带有图形界面的服务器价格更低。

在深度学习领域,使用Headless Server进行训练是非常常见的,特别是在大规模模型训练或者超参数调整时。例如,训练大规模的神经网络模型需要大量的计算资源和内存,这些计算资源可以通过Headless Server来获得,同时通过使用分布式训练技术,可以进一步提高训练效率。

1.6 ML-Agents Toolkit (v0.14)中的0.14

在 ML-Agents Toolkit (v0.14) 中的版本号“0.14”指的是软件的版本号。这是一种常见的方式,开发人员通常使用版本号来跟踪软件的不同版本,以便用户和其他开发人员可以知道他们正在使用哪个版本,并根据需要进行更新或回滚。在 ML-Agents Toolkit 中,版本号通常表示软件的主要功能和更新内容。

ML-Agents Toolkit (v0.14) 对应的是 ML-Agents Release 0.14.x 版本。其中的 "0.14" 指的是该版本的主要版本号,即该版本是从 ML-Agents 项目的主要版本中发布的。".x" 表示在该主要版本中的某个特定的次要版本中发布的。因此,ML-Agents Release 0.14.x 包括所有次要版本为 0.14 的发布。

1.7 Elo rating system

Elo评分系统是一种常见的用于测量竞技比赛中选手等级的算法。它最初是由国际象棋大师艾洛(Arpad Elo)为了计算棋手等级而提出的,现在也广泛应用于其他竞技项目中。

在Elo评分系统中,每个选手都有一个初始的分数,一般为1500分。比赛结束后,赢者将获得一定数量的分数增加,而输者将失去一定数量的分数。分数变化的多少取决于两个选手的初始分数以及他们在比赛中的表现。分数变化的计算方式采用的是一个称为期望胜率的数学公式。

通过这种方式,Elo评分系统可以根据选手的表现动态调整他们的等级,从而更加准确地反映选手的实际水平。该系统还可以应用于团队竞技项目中,例如足球、篮球等,通过对每个队员的分数进行加权平均来计算整个团队的等级。

1.8 Reward Signals

官方文档:https://github.com/Unity-Technologies/ml-agents/blob/release_19/docs/Training-Configuration-File.md#reward-signals

The reward_signals section enables the specification of settings for both extrinsic (i.e. environment-based) and intrinsic reward signals (e.g. curiosity and GAIL). Each reward signal should define at least two parametersstrength and gamma, in addition to any class-specific hyperparameters. Note that to remove a reward signal, you should delete its entry entirely from reward_signals. At least one reward signal should be left defined at all times. 

reward_signals 是一个配置项,可以用来设置训练中使用的奖励信号,包括外在奖励(即基于环境的奖励)和内在奖励(例如好奇心和 GAIL 等)。每个奖励信号都应该定义至少两个参数,即强度(strength)和折扣率(gamma),以及任何类特定的超参数。注意,如果要删除一个奖励信号,应该完全从 reward_signals 中删除其条目。同时,至少应该始终定义一个奖励信号。

问:如果要删除一个奖励信号,应该完全从 reward_signals 中删除其条目。同时,至少应该始终定义一个奖励信号?

这句话的意思是,如果你想要删除一个奖励信号,你不仅需要将该奖励信号的参数值设置为 0,还需要从 reward_signals 配置项中完全删除该奖励信号的条目,即删除包含该奖励信号名称及其参数的整个字典。如果只是将其参数值设置为 0,该奖励信号仍然会在训练过程中存在,但是它不会对智能体的行为产生任何影响。

另外,reward_signals 配置项中至少需要定义一个奖励信号,因为至少需要一个奖励信号来引导智能体进行学习。如果你将所有的奖励信号都删除了,智能体就不会接收到任何奖励信号,也就无法进行学习。

例子:

假设在 reward_signals 中定义了两个奖励信号,分别为 "extrinsic""intrinsic",其中 "extrinsic" 为外部环境提供的奖励,而 "intrinsic" 为基于智能体行为的奖励信号。如果你想要删除 "intrinsic" 奖励信号,那么你需要从 reward_signals 中完全删除 "intrinsic" 的配置,即将该奖励信号的条目从字典中删除。

如果你只是将 "intrinsic" 奖励信号的参数值设置为 0,例如:

reward_signals:
  extrinsic:
    strength: 1.0
    gamma: 0.99
  intrinsic:
    strength: 0.0
    gamma: 0.99

那么 "intrinsic" 奖励信号仍然会存在,虽然其强度(strength)设置为 0,但在训练过程中它仍然会占据计算资源,这可能会导致训练速度变慢或占用过多的内存。因此,建议在删除奖励信号时,要从 reward_signals 中完全删除其条目。

2.警告和报错

2.1 警告

e:\ml-agents-release_19\ml-agents\mlagents\trainers\torch\utils.py:309: UserWarning: This overload of nonzero is deprecated:
        nonzero()
Consider using one of the following signatures instead:
        nonzero(*, bool as_tuple) (Triggered internally at  ..\torch\csrc\utils\python_arg_parser.cpp:882.)
  res += [data[(partitions == i).nonzero().squeeze(1)]]

这个 UserWarning 提示是由 PyTorch 在调用 nonzero() 函数时触发的。这是因为在 PyTorch 1.7 版本中,nonzero() 函数的函数签名有所更改,原先的 nonzero() 函数签名已被弃用,现在的建议使用新的函数签名。但是,此更改不应该对代码的运行产生任何实际影响,仅仅是一个警告。

如果您想避免此警告,可以根据警告信息提供的提示,使用新的 nonzero(*, bool as_tuple) 函数签名。例如,将 nonzero() 替换为 nonzero(as_tuple=True) 可以消除此警告。或者,您也可以通过设置环境变量 PYTHONWARNINGS=ignore::UserWarning 来在运行代码时禁用此警告。

2.2 报错

2.2.1 Curl error 60

Curl error 60: Cert verify failed: UNITYTLS_X509VERIFY_FLAG_USER_ERROR1

Curl error 60通常表示SSL证书验证失败。该错误提示指出SSL证书的验证过程中出现了问题,可能是由于证书不受信任、证书过期、证书链不完整或证书配置错误等原因导致的。

错误消息中的"UNITYTLS_X509VERIFY_FLAG_USER_ERROR1"是Unity引擎中使用的SSL库的一个错误代码,表示用户自定义的证书验证错误。这可能是在使用Curl库进行网络请求时,遇到了证书验证错误,因此导致了该错误消息的出现。

解决此问题的方法通常有以下几种:

①证书信任链:确保你的请求目标网站的SSL证书是由受信任的证书颁发机构(CA)签发的,而不是自签名证书。如果使用自签名证书,你可能需要将其添加到信任证书存储区,或者在代码中禁用SSL证书验证(不推荐,因为会存在安全风险)。

②证书有效性:检查目标网站的SSL证书是否已过期。过期的证书会导致验证失败。确保目标网站及其证书都是有效的。

③证书配置:检查证书的配置是否正确。这包括证书的有效性、证书链的完整性、证书的密钥匹配等。确保证书的配置没有问题。

④Curl选项:在使用Curl库时,你可以尝试设置一些特定的选项来处理证书验证问题。例如,禁用证书验证可以使用CURLOPT_SSL_VERIFYPEER选项设置为false,但这会降低安全性,因此不推荐在生产环境中使用。

请注意,具体的解决方法可能因你的具体环境和代码实现而有所不同。建议仔细检查证书配置和证书验证过程,确保证书的有效性和正确性。如有需要,还可以查阅Curl和Unity文档,以获取更多关于证书验证和SSL连接的信息和指导。

 为何刷新之后,错误就消失了?

当你刷新之后错误消失的情况,可能是由于以下原因之一:

①证书更新:目标网站可能在你刷新页面之后更新了其SSL证书。如果之前的证书存在问题(如过期、配置错误等),而在刷新之后进行了更新,那么验证错误就不再出现。

②缓存问题:有时,浏览器或其他网络客户端会对SSL证书进行缓存。如果之前的证书已经缓存,并且出现了验证错误,刷新页面可能会清除缓存并重新获取最新的证书信息。这可能导致错误不再出现。

③临时网络问题:在某些情况下,网络连接可能会出现临时问题,导致证书验证失败。刷新页面可能会重新建立连接,并且在重新验证证书时可能会解决此类临时问题。

无论是哪种情况,当刷新页面后错误消失时,可以认为是与证书相关的问题在刷新后得到了解决。然而,仍然建议确保目标网站的证书配置正确,并且与你的应用程序的证书验证过程保持一致。这样可以确保在日常使用中不会遇到类似的证书验证错误。

2.2.2 行尾符问题

There are inconsistent line endings in the 'Assets/ML-Agents/Examples/Soccer/Scripts/SoccerEnvController.cs' script. Some are Mac OS X (UNIX) and some are Windows. This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands. UnityEditor.AssetDatabase:Refresh () Microsoft.Unity.VisualStudio.Editor.VisualStudioIntegration/<>c__DisplayClass8_0:<RunOnceOnUpdate>b__0 () (at Library/PackageCache/com.unity.ide.visualstudio@2.0.17/Editor/VisualStudioIntegration.cs:100) UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()

这个错误提示表明在脚本文件"Assets/ML-Agents/Examples/Soccer/Scripts/SoccerEnvController.cs"中存在不一致的行尾符问题,一些行尾符为Mac OS X(UNIX)格式,而另一些行尾符为Windows格式。这可能会导致堆栈跟踪中的行号不正确,并且可能引发编译器错误。

为了解决这个问题,你可以使用文本编辑器的"Convert Line Endings"菜单命令将所有行尾符转换为统一的格式。在Unity编辑器中,你可以尝试执行"AssetDatabase.Refresh()"方法来刷新资源数据库,然后重新打开脚本文件,这有助于解决该问题。

另外,根据错误信息中的堆栈跟踪,它似乎涉及到Visual Studio的集成插件。你可以尝试更新或重新安装Visual Studio插件以确保其正常运行。

是因为我在脚本添加了中文注释的原因吗?

通常情况下,中文注释不会导致行尾符不一致的问题。这个警告通常是由于不同操作系统(如Mac OS X和Windows)在处理行尾符时使用了不同的约定。

如果你的脚本文件在不同操作系统之间进行了复制、转移或共享,并且这些操作系统使用了不同的行尾符约定,那么就可能出现这个问题。

为了解决这个问题,你可以使用文本编辑器的相关功能将整个脚本文件中的行尾符转换为一致的格式(例如,统一使用UNIX风格的行尾符)。这样可以确保脚本在不同操作系统上都能正常工作。

请注意,中文注释本身并不是导致行尾符不一致的原因,但是在解决问题时,你可以尝试移除或暂时禁用中文注释,以确认它们是否与行尾符问题相关。文章来源地址https://www.toymoban.com/news/detail-708641.html

到了这里,关于Unity-ML-Agents注意事项及报错、警告等解决方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity之Addressable使用注意事项

    Profile文件中配置资源构建路径和资源首次加载路径,资源如何设置了缓存,在首次加载之后会将再用缓存在缓存目录,后面将直接从缓存目录中读取,方便项目发包时候进行使用 AddressableAssetSettings文件 DisableCatalogUpdateOnStartup 勾选改选项,禁止自动更新,项目资源下载一般需

    2024年02月08日
    浏览(31)
  • Unity初学注意事项,以及最新如何删除云端项目

    作为一个对好玩的事感兴趣的人 近段时间我开始学习Unity了 首先呢,我们得先了解Unity是用于开发游戏的一个开源软件(当然他的专业版还是要收费的,这里指的个人版,初学者都是够用的,个人版开发的游戏也可以发布,只要游戏所赚的金额不超过100000元都是可以不用换的

    2024年02月07日
    浏览(41)
  • Unity中使用AssetBundle打包与加载的注意事项

    一、使用AssetBundle进行打包与加载 个人觉得可以参考以下两篇博客,这个网上相关教程很多,还不明白的可以去百度,或者给我留言。 Unity 打包与加载AssetBundle(加载对应的依赖) Unity中的AssetBundle 二、使用AssetBundle进行加载的时候注意事项: 注意事项一:AssetBundle名字和设置

    2024年02月11日
    浏览(26)
  • Unity3D开发流程及注意事项

    使用Unity3D开发游戏需要遵循一定的流程和注意事项,以确保项目的顺利进行并获得良好的结果。以下是一般的游戏开发流程以及一些注意事项,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 游戏开发流程: 1.概念和计划阶段

    2024年02月09日
    浏览(38)
  • Unity发布抖音小游戏的一些注意事项

    使用 webgl模式 发布抖音小游戏的一些注意事项 1.打包 使用webgl模式打包抖音小游戏,会因为找不到aapt工具导致打包失败 提示: aapt检查失败: sdk/build-tools/版本号。 解决方法:再unity hub里添加Android Build Support  2.黑屏问题 相机的HDR设为off 3.Text字体不见的问题 不能用unity自带的

    2024年02月11日
    浏览(33)
  • Unity | 以附加模式加载场景,实现多场景叠加及注意事项

    Unity 允许多场景叠加,这种叠加包括编辑模式及运行模式 新建两个简单的场景,SampleScene 和 AdditiveScene,设置不同的天空盒及平行光源颜色 SampleScene AdditiveScene 2.1 添加场景 在编辑器中的场景资源右键选择 Open Scene Additive,或者直接拖拽场景资源到层级视图,都可以实现多场景

    2024年01月19日
    浏览(37)
  • Unity3D :运行时 UI 的性能注意事项

    推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 本页介绍如何提高运行时的性能 用户界面 . 您可以使用  usageHints  来设置元素在运行时的使用方式,以便相应地优化数据存储。例如: 下表通过示例描述了要用于哪些元素的属性: 具有以下元素 使用这

    2024年02月12日
    浏览(28)
  • HTC vive pro & unity开发者软件/SDK版本注意事项

    SteamVR插件是unity中VR开发的基础,必不可少。unity软件上实现对VR设备(头显、控制器、tracker)的渲染、实时追踪等功能。 推荐版本: SteamVR插件v1.2.3 link. VRTK是一套VR动作交互(移动、拾取等)的解决方案,提供了现成的交互代码。开发者也可以基于SteamVR开发自己的交互代码

    2024年02月06日
    浏览(44)
  • 制作unity大世界场景编辑的一点心得和注意事项(场景地编)

    制作unity大世界场景的一点心得和注意事项(地编注意事项) 这是一个项目的整个注意事项,所注意点都是根据制作的项目整理的。所以在做任何项目的时候要注意 举一反三 。 1,检查分组里的各种检查(这里的分组是每一个场景尤其是大世界地图制作人员比较多需要合理规

    2024年02月07日
    浏览(46)
  • Unity学习笔记--File.ReadAllLines和File.ReadAllText的使用以及注意事项(一定要看到最后!!!)

    最近在做文件存储以及读取的时候,需要用到C#给我们提供的类: File 具体使用方法可以看官方文档:C# File 类 这篇文章只会说 File.ReadAllLines 和 File.ReadAllText 的使用以及注意事项 Tips:(一定要看到最后!!!) 一、File.ReadAllLines 重载 操作 ReadAllLines(String) 打开一个文本文件

    2024年02月02日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包