51.Isaac教程--使用强化学习的DollyDocking

news2024/11/18 4:25:56

使用强化学习的DollyDocking

在这里插入图片描述
ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html

文章目录

  • 使用强化学习的DollyDocking
    • 快速开始
      • 推理
      • 未来场景工厂
      • 多代理场景
      • 训练
      • 利用训练的模型运行推理
    • Codelets
    • 模拟
    • Isaac SDK 中的健身房状态机流程
    • 强化学习政策
    • JSON 管道参数

注意

此应用程序是实验性的,并且可能会在不同版本之间发生重大变化。

Dolly Docking 应用程序的目标是使用深度神经网络 (DNN) 教会机器人在放置在机器人视线范围内的手推车下方导航。 DNN 的输入是机器人前方环境的占用网格的历史记录,以及目标姿态、速度和加速度向量。 神经网络的输出是接下来三个时间步长的速度曲线。

此应用程序为 Isaac SDK 中的模块化强化学习工作流程提供了参考。 它展示了如何使用多代理场景训练策略 (DNN),然后使用冻结模型部署它们。 本文档首先描述了如何快速开始推理和训练,然后介绍了有关神经网络策略、训练工作流、小码和健身房状态机的详细信息。

深度学习策略允许用户将基于学习的规划方法与经典控制方法相结合,有效地利用两全其美。 通过模拟和从模拟中的这些错误中学习,可以使 DNN 策略对来自计算机视觉模型以及测距和状态估计的不一致和错误具有鲁棒性。 强化学习算法通常用于学习最佳策略的探索和开发策略可以在环境地图不可用或环境代价地图的生成或计算并非微不足道的情况下提供帮助。

快速开始

推理

Dolly Docking 应用程序包括两个示例场景,用于在 Isaac Sim Unity3D 中执行推理:未来工厂场景和多代理场景。

未来场景工厂

导航到 isaac_sim_unity3d/builds 文件夹并运行以下命令:

bob@desktop:~/isaac_sim_unity3d/builds$ ./factory_of_the_future.x86_64 --scene Factory01 --scenario 6

要为场景运行推理,请打开另一个终端窗口,导航到 Isaac SDK 根文件夹,然后运行以下命令:

bob@desktop:~/isaac/sdk$ bazel run packages/rl/apps/dolly_navigation/py_components:dolly_navigation -- --config='packages/rl/apps/dolly_navigation/py_components/fof_pb_inference.json'

在模拟器中,机器人和手推车在工厂车间生成,机器人反复导航到手推车的中心,然后在中心停了一段时间,然后再次重生并重复动作。 模拟中至少需要约 10 FPS 才能获得最佳推理性能。 如果机器人撞到小车的轮子,它会在其起始位置重生,小车的方向略有不同。

多代理场景

导航到 Isaac Sim Unity3D 根文件夹并从构建文件夹运行以下命令:

bob@desktop:~/isaac_sim_unity3d/builds$ ./sample.x86_64 --scene dolly_docking_training

要为场景运行推理,请打开另一个终端窗口,导航到 Isaac SDK 根文件夹,然后运行以下命令:

bob@desktop:~/isaac/sdk$ bazel run packages/rl/apps/dolly_navigation/py_components:dolly_navigation -- --config='packages/rl/apps/dolly_navigation/py_components/multi_agent_pb_inference.json'

在模拟器中,场景中生成了九个机器人和手推车,以及随机放置在手推车边缘的墙壁。 场景中的大多数机器人反复导航到手推车的中心,然后在中心停留一段时间,然后重生并重复动作。 如果机器人撞到小车的轮子或墙壁,它会在新的起始位置重生,小车的方向也会不同。

训练

要执行训练,导航到 Isaac Sim Unity3D 根文件夹并从构建文件夹运行以下命令

bob@desktop:~/isaac_sim_unity3d/builds$ ./sample.x86_64 --scene dolly_docking_training

要开始训练,请打开另一个终端窗口,导航到 Isaac SDK 根文件夹,然后输入以下命令:

bob@desktop:~/isaac/sdk$ bazel run packages/rl/apps/dolly_navigation/py_components:dolly_navigation

这将启动一个 TensorFlow 实例并使用通过 TCP 接收的数据对其进行训练。 可以通过位于 /packages/rl/apps/dolly_navigation/py_components/trainer.config.json 的配置文件更改训练配置。

训练开始后,Tensorflow 默认会定期输出日志到/tmp/rl_logs 文件夹,检查点输出到/tmp/rl_checkpoints 文件夹。 我们建议将这些更改为 trainer.config.json 文件中的持久存储路径。

每个检查点实例由三个文件组成:

  • .meta 文件:表示模型的图结构。

  • .data 文件:存储所有已保存变量的值。

  • .index 文件:存储变量名称和形状的列表。

要查看 Tensorboard 上的训练进度,请运行以下命令并在浏览器中打开 http://localhost:6006。

tensorboard --logdir=/tmp/rl_logs

rl_logs 目录还将每个时期的奖励存储在一个 .txt 文件中。 在开始增加之前,前几次迭代的奖励往往会减少。

要停止训练,请使用 Ctrl+C 终止应用程序。

注意

模型训练需要大量资源。 我们建议在 NVIDIA DGX 或至少具有 100 GB RAM 的多 GPU 虚拟机实例上训练神经网络。 即使使用功能强大的机器,处理数据和训练模型也需要大量时间。 如果不定期删除,保存的检查点会占用大量磁盘空间。

利用训练的模型运行推理

训练结束后,生成的检查点文件(*.meta、*.index、*.data)可用于推理。

要在多代理场景中使用生成的检查点运行推理,请编辑位于 packages/rl/apps/dolly_navigation/py_components/multi_agent_py_inference.json 的 JSON 文件。 在模拟运行时,修改 JSON 变量 restore_path 以包含存储的检查点的路径。

提示

如果checkpoint在/tmp/rl_checkpoints文件夹中存储为agent42.ckpt.meta、agent42.ckpt.index和agent42.ckpt.data,则restore_path参数需要设置为/tmp/rl_checkpoints/agent42.ckpt

然后运行以下命令来运行推理:

bob@desktop:~/isaac/sdk$ bazel run packages/rl/apps/dolly_navigation/py_components:dolly_navigation -- --config='packages/rl/apps/dolly_navigation/py_components/multi_agent_py_inference.json'

要在未来工厂模拟中运行推理,您需要编辑位于 packages/rl/apps/dolly_navigation/py_components/fof_py_inference.json 的 JSON 文件。 修改 JSON 变量 restore_path 以包含存储的检查点的路径。 然后,在如上所述启动工厂模拟后,使用以下命令运行 Isaac SDK 应用程序进行推理:

bob@desktop:~/isaac/sdk$ bazel run packages/rl/apps/dolly_navigation/py_components:dolly_navigation -- --config='packages/rl/apps/dolly_navigation/py_components/fof_py_inference.json'

Codelets

Isaac SDK 中的强化学习工作流程的灵感来自 OpenAI Gym 界面。

以下小代码从模拟中收集信息以运行强化学习循环:

  • 差分基础里程计

  • RangeScanFlattening

  • RangeScanToObservationMap

  • DollyDockingState解码器

  • DollyDockingAux解码器

一旦累积了状态信息,它就会通过相当于 OpenAI Gym 的小码传递,然后发送到样本累加器进行存储或发送到 Python 代码进行推理:

  • TensorAggregator

  • TensorDeaggregator

  • StateMachineGymFlow

  • DollyDockingBirth

  • DollyDockingDeath

  • DollyDockingReward

  • DollyDockingStateNoiser

  • TemporalBatching

一旦 Gym 发布预测,它就会通过以下小码流:

  • TensorToCompositeVelocityProfile

  • DifferentialBaseVelocityIntegrator

  • CompositeToDifferentialTrajectoryConverter

  • DifferentialBaseControl

小码连接如下所示:

注意

辅助张量允许用户存储来自模拟或其他 SDK 组件的信息和标志,并将其传递给管道中的所有后续小码。 isaac::rl::DollyDockingAuxDecoder 在对接管道中用于此目的。

强化学习应用程序使用以下消息:

  • CollisionProto

  • CompositeProto

  • DifferentialTrajectoryPlanProto

  • FlatscanProto

  • Odometry2Proto

  • ImageProto

  • RangeScanProto

  • RigidBody3GroupProto

  • StateProto

  • TensorProto

模拟

Isaac SDK 和模拟器使用发布/订阅架构进行通信:通过在创建数据的一侧设置 TCP 发布者并在数据摄取的一侧设置 TCP 订阅者,数据在两个进程之间来回传递。

对于Unity 3D模拟,发布ground truth数据的应用是packages/navsim/apps/navsim.app.json。 这是由 NavSim 中的 dolly_docking_training 场景直接加载的。

应用程序使用 TcpPublisher 将传感器和环境数据发布到用户定义的端口。 此数据由训练应用程序使用,后者又将传送和控制命令发送到 NavSim 应用程序,这些命令通过 TcpSubscriber 节点接收。

在训练场景中,每个机器人发布其状态和环境消息,并在通道名称末尾附加索引号,从索引 1 开始。例如,第一个机器人的传送消息在名为 teleport1 的 TCP 通道上接收 等等。 SDK 和仿真之间的所有通道名称和连接都可以在用于小车对接的 Python 应用程序中获得。

能够通过模拟生成无限的数据点是一项强大的资产,弥合了将模拟机器人技术与真实实验分开的“现实差距”。 域随机化试图通过提高各种数据的可用性来弥合现实差距。 在训练场景中,域随机化可以通过以下几种方式实现:

  • 占用网格随机化:在小车和机器人周围生成方块以获得不同的激光雷达地图。

  • 推车随机化:旋转推车并在每次运行前将其从中心姿势平移。

  • Target pose noise randomization:在dolly的目标pose上添加noise来模拟pose detection的错误。

  • 里程计噪声随机化:为了模拟硬件中常见的里程计噪声,将随机噪声添加到从模拟计算的里程计信息中

Isaac SDK 中的健身房状态机流程

Isaac SDK 强化学习工作流程的核心是一个名为 Gym 的状态机,它控制多智能体场景中所有机器人的整个生命周期,并为策略提供训练数据。 状态机执行六个不同的步骤,如下图所示,并提供三个组件——出生、死亡和奖励——其子组件可在运行时动态插入状态机。 这些组件的基类位于 packages/rl/base_components 中。 Gym 期望每个代理都有一份这些组件的副本,并在适当的阶段调用它们的功能。

状态机的步骤如下:

  1. 当状态机开始时,它需要在模拟中以初始姿势生成代理及其环境(推车、墙壁和障碍物)。 为此,它为模拟中的每个代理调用一次 Birth::spawn 函数。 DollyDockingBirth 组件(isaac::rl::Birth 的子组件)负责向模拟传送消息发送消息,这些消息将代理及其环境置于所需的姿势。 它还通过在发布传送消息之前将噪声附加到对象姿势来负责场景中的域随机化。

  2. 接下来,状态机等待从 TensorAggregator codelet 接收聚合状态张量。 该张量包含模拟中所有代理的最新状态,以及可能需要的任何辅助信息。

  3. 一旦接收到最新的代理状态,状态机就会评估是否应该杀死和重生任何代理。 它为模拟中的每个代理调用一次 Death::is_dead 函数。 DollyDockingDeath 组件(isaac::rl::Death 的子组件)包含决定什么构成无效代理状态的逻辑:例如,如果代理从模拟中的碰撞中注册 CollisionProto,或者代理已经存活太久 . 函数返回 true 的代理在下一步之前重置为新姿势。

  4. 在决定一个代理人是死是活之后,状态机收集每个代理人的奖励。 它为模拟中的每个代理调用一次 Reward::evaluate 函数。 DollyDockingReward 组件(isaac::rl::Reward 的子组件)包含根据最近结束的转换向代理分配奖励(浮动)的逻辑。

  5. 一旦收集到与上次转换相关的所有数据,就会以聚合形式发布当前状态、奖励和死亡标志以及辅助张量。

  6. 神经网络接收代理的当前状态并执行前向传递以输出动作张量,其中包含代理应在不久的将来达到的目标速度。 这个动作张量通过 Gym 传递给 TensorDeaggregator。

循环再次从步骤 1 继续,仅重置在最后一步中刚刚死亡的那些代理。

强化学习政策

OpenAI Spinning Up 很好地介绍了强化学习。 Spinning Up 提供了流行的强化学习算法的清晰简洁的实现。 由于其样本效率和对各种环境和 sim2real 应用程序的鲁棒性,Soft Actor Critic 算法用于训练对接策略。

深度神经网络策略设计如下:

该网络接收过去三个时间步长的环境占用图,并将它们传递给卷积骨干网络。 主干的扁平化输出附加到小车的目标姿势(在机器人框架中),以及最后三个时间步长的速度和加速度矢量。 这个组合的线性张量然后通过两个完全连接的层,每个层的大小为 256。然后它输出一个大小为 6 的一维张量,它被认为是接下来三个时间步长的目标速度。

JSON 管道参数

下表描述了 /packages/rl/apps/dolly_navigation/py_components 中的 JSON 文件参数:

  • action_dimension:神经网络输出张量的大小(在这种情况下,是 3 个未来时间步长的线速度和角速度)

  • action_scale:神经网络的输出范围(在本例中为+0.5 到-0.5)。 此输出由 TensorToCompositeVelocityProfile 小代码缩放为真实机器人输出,并具有以下可配置参数。

  • agent_spawn_randomization:机器人姿态从其中心在 x、y 和角度坐标中的随机化。 该参数列出了每个坐标中允许的最大位移

  • agents_per_row:场景中每一行的agent数量

  • angle_allowance:agent在被杀死前可以在轴的任一方向上旋转的最大允许弧度

  • aux_dimension:辅助张量的大小

  • aux_end_of_episode_flag:辅助标志的位置,表示情节或试验是否因为代理已达到其最大年龄而结束

  • batch_size:神经网络的训练批量大小

  • bias:奖励方程中x坐标、y坐标和角度(弧度)的系数:ax+b|y|−(|y|/|c.tan(|angle|)|)

  • buffer_threshold:训练开始前样本累加器收集的最小样本数

  • cell_size: 动态观测图中cell的大小,单位为米

  • checkpoint_directory:存放tensorflow checkpoints的目录

  • collision_penalty:与场景物体碰撞的惩罚

  • delay_sending:Gym 状态机启动前等待的时间。 这确保所有节点都有足够的时间启动。

  • dividing_space:模拟中两个机器人小车设置之间沿 x 和 y 坐标的距离

  • experience_buffer_size:经验缓冲区/样本累加器的大小

  • gamma:强化学习的奖励折扣因子,通常固定为0.99

  • ideal_docking_pose:机器人相对于 (x,y) 中小车中心的完美对接坐标

  • learning_rate:强化学习策略的目标学习率

  • look_back:存储在状态张量中作为神经网络输入的过去步数

  • max_episode_length:构成单次试验的最大步数

  • max_steps_per_epoch:每个epoch的训练迭代次数

  • mode:以多种形式之一运行 Isaac 应用程序。 将其值设置为“train”用于训练新策略,“inference_pb”用于冻结模型推理,“inference_py”用于 python 检查点推理

  • num_agents_per_sim:单个模拟器实例中存在的代理数。 请注意,特定场景中的代理数量是固定的,因此更改此配置不会增加或减少场景中的代理数量。

  • observation_map_dimension:由 flatscan 生成并馈送到神经网络的正方形占用图的一侧

  • obstacle_scale_randomization:块从其原始大小的随机化比例。 此参数列出了比例矢量元素中允许的最大位移

  • obstacle_separation:在应用随机化之前,障碍物(墙壁、方块等)从小车中心沿 x 和 y 坐标的生成位置

  • obstacle_spawn_randomization:墙壁和方块在 x、y 和角度坐标中从其中心的姿势随机化。 此参数列出了每个坐标中允许的最大位移

  • output_angular_velocity_range:重新调整接收到的角速度指数的范围

  • output_linear_velocity_range:重新调整接收到的线速度指数的范围

  • polyak:平均系数(通常在 0.98 - 0.99 之间)。 此参数确定有多少重复网络权重被复制到原始网络。

  • reaction_time:Gym 应记录状态的操作消息发布后的延迟秒数

  • restore_path:恢复 tensorflow 检查点或冻结模型的路径

  • reward_clip_range:如果超出,奖励值将被修剪的范围。 这些值在数字刻度的两侧被修剪。

  • sim_instances:并行运行的Unity实例数

  • start_coordinate:在模拟中生成代理的坐标

  • success_reward:在实现目标的每个时间步收到的奖励

  • target_pose_noise:添加到 dolly 的地面真值姿势以模拟姿势检测错误的噪声

  • target_separation:target(dolly) 和机器人之间沿 x 和 y 坐标的距离

  • target_spawn_randomization:目标推车从其中心在 x、y 和角度坐标中的姿态随机化。 此参数列出了每个坐标中允许的最大位移

  • tensorboard_log_directory:存放所有日志的目录

  • tick_period:流水线中小码的滴答周期

  • timestamp_profile:附加到神经网络的每个预测输出的目标时间步长

  • tolerance:从推车中心沿 x 和 y 方向的增量被认为是成功对接结束姿势

  • use_pretrained_model:一个标志,如果为真,则表示需要恢复检查点模型

  • wall_thickness:集成平面扫描时命中标记为实体的区域的厚度

  • x_allowance:代理在被杀死之前可以沿着各自的负x方向和正x方向移动的最大允许距离

  • y_allowance:agent在被杀死之前可以沿着各自的正负y方向移动的最大允许距离

更多精彩内容:
https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561

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

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

相关文章

Jenkins+GitLab自动化部署到Docker容器

JenkinsGitLab自动化部署到Docker容器1、编写Dockerfile2、为测试服务器配置Docker镜像加速器3、Jenkins相关配置3.1 配置测试服务器3.2 Pre Steps配置3.3 Post Steps配置3.4 执行构建本文是对JenkinsGitMaven自动化部署配置这篇文章的补充,有关基本的环境搭建从这篇…

Python的 6 大类数据类型,先收藏再说......

计算机程序,就是对数据进行操作。 无论你学习那种语言开发,都需要学习具体的数据类型, 每种开发语言都有自己不同数据类型。 下面是针对python语言的全部数据类型详细汇总: Python中可以自定义数据类型,可以具有无限种数据类型…

爱普生Epson WF110彩色无线便携式打印机错误E-12维护箱已到使用寿命

基本参数: 产品定位 墨仓式打印机 最高分辨率(dpi) 5760X1440dpi 网络功能 支持无线网络打印

【MySQL】成为MySQL高手必须要知道的MySQL索引

MySQL基础mysql 的查询流程索引是什么呢?MySQL索引优缺点MySQL索引分类上一篇了解到了MySQL安装步骤,接下来就开始学习MySQL索引知识点 mysql 的查询流程 查询流程大致是: mysql 客户端通过协议与 mysql 服务器建连接,发送查询…

Lesson 4.6 逻辑回归的手动实现

文章目录一、逻辑回归损失函数的梯度计算表达式二、创建分类数据集生成器1. 手动创建分类数据2. 创建分类数据生成器三、逻辑回归的手动实现四、逻辑回归的分类性能瓶颈与算法评价讨论完梯度下降的相关内容之后,接下来我们尝试使用梯度下降算法求解逻辑回归损失函数…

Microsoft Office( Word、Excel、PowerPoint)的安装

1 下载Office Tool Plus 官网地址:点击下载 2 点击Office Tool Plus.exe 3 接受软件许可条款和Microsoft服务协议 4 点击安装Office 5 选择Office 专业增强版 2019 6 确认安装Office 专业增强版 2019 7 关闭安全中心警报 8 等待安装完成 9 点击关闭 10 点击返回…

VMware创建Ubuntu系统

Ubuntu镜像可以去各个镜像网站下载 官网:https://ubuntu.com/ 中文官网:https://cn.ubuntu.com/ 镜像下载 使用Ubuntu在开发的时候下载LTS版本,也可以下载其他版本以及历史版本 这里面使用的镜像是ubuntu-16.04.7-desktop-amd64.iso版本&a…

1月书单 2月新书预告 | 百万册畅销书全新续作来啦

幸福而忙碌的 1 月一溜烟就跑走了,我们已经来到 2 月的第 1 天。最近,公司楼下售卖咖啡的地方,总是排着长长的队……想必不少小伙伴还在找状态。 图灵君先带大家回忆一下 1 月我们上新了哪些书。 01 《这才是服务设计》 作者:[德…

章节9 软件安装

9-Linux软件安装 01 软件为什么需要安装 Windows软件安装流程 安装检查释放文件复制可执行文件DLL动态链接库/安装服务注册表开始菜单和快捷方式 Windows安装文件 Windows可执行文件 Linux可执行程序 /bin /sbin /usr/bin /usr/sbin 02 脚本和程序的区别 脚本和程序的…

录屏可以录声音吗?录制带声音的视频,这个方法轻松解决

​很多小伙伴对电脑屏幕进行录制的时候,却发现自己辛苦录制的视频没有录到声音。录屏可以录声音吗?当然可以!只需要使用录屏软件进行录制就可以解决。还不知道录屏可以录声音的小伙伴快来看看吧。 一、录屏可以录声音吗? 很多小伙…

MySQL-如何分库分表?一看就懂

一、为什么要分库分表 如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而来,比如电商系统来说双十一大促对订单数据压力很大,Tps十几万并发量,如果传统的架构(一主多从)&…

环境监测看板系统能轻松掌握周边环境的数据

在工业、医疗、养殖和生活等许多地方,温湿度是一个重要的测量参数。季节的变化对环境温湿度影响很大,不同的产品和场地对温湿度都有要求,温湿度环境会影响到产品的性能及寿命,加速产品的老化。以前传统的温湿度检测模式是以人为基…

Pyside2项目实战,从0开始写一个GUI可视化项目:总览

前言 最近使用 Pyside2 编写了几个GUI工具,发现效果出奇的好。遂产生了分享它的念头。 接下来如果不出意外,大概没有意外,我会开始写这个专栏,介绍从零开始去编写一个实用的GUI工具。 这是Pyside2第一篇:《总览》 本文…

数学建模学习笔记(18):三维图形的绘制

三维图形的绘制生成绘图所需的横纵坐标三维网格图的绘制基本语法实战案例两种变形函数三维曲面图的绘制两种变形函数绘图效果的优化其他补充内容生成绘图所需的横纵坐标 [X,Y]meshgrid(xgv,ygv) % 函数解释:X和Y是用于接收返回值的变量,是两个大小相等的…

Python的基础语法

字面量 字面量是在代码中,被写下来的固定的值,称之为字面量 常见的字面量类型 字符串又称为文本是由任意数量的字符如中文、英文、各类符号、数字组成。所以叫做字符串常量。 注释 注释 在程序代码中对程序代码进行解释说明的文字 作用 注释不是程…

Java中XML如何转为BEAN

在网络通讯中&#xff0c;对方传的数据经常是XML格式包装的数据集合。在Java开发中&#xff0c;我们如何将XML转成Java实体类呢&#xff1f; 对方发送的报文 <ns2:response xmlns:ns2"http://service.zxl.cn/test/xml"><school><location>长江边…

Pointnet Tutorial

目录 .1 intro-点云特性 1.1 点云特性 1.2 motivation 1.3 pointnet的处理 .2 Pointnet 2.1 contribution 2.2 solution 2.3 backbone 2.4 代码部分 2.5 小结 .4 应用 References .1 intro-点云特性 Q1&#xff1a;什么是点云&#xff1f; 简单来说就是一堆三维点的集…

【异常】前端提示 Support for the experimental syntax ‘jsx‘ isn‘t currently enabled

一、报错内容 17:33:41 - Building for production... 17:34:13 ERROR Failed to compile with 5 errors5:34:09 PM 17:34:13 17:34:13 error in ./src/layout/components/Sidebar/Item.vue?vue&typescript&langjs& 17:34:13 17:34:13 Syntax Error…

万应低代码1月重点更新内容速递

速览版 详情版 一、低代码开发能力提升 01 工作流 &#xff08;1&#xff09; 优化流程推演 在流程发起时&#xff0c;对流程各节点审批人、抄送人进行实时推演。 【使用场景】 ● 以“请假”场景为例&#xff0c;A 角色的固定审批人为“甲、乙、丙” 3 人&#xff0c;在某…

windows10操作系统 显卡MX150 安装CUDA+cuDNN+pytorch

本人水平有限&#xff0c;如有问题请多指正笔记本系统&#xff1a;Windows 10 64位显卡&#xff1a;NVIDIA GeForce MX150显卡驱动程序版本&#xff1a;512.78显卡驱动程序支持CUDA版本&#xff1a;11.6.134及以下安装CUDA&#xff1a;11.6.0安装cuDNN&#xff1a;8.7.0一、安装…