PyTorch怎么展示调用顺序
发表于:2025-02-11 作者:千家信息网编辑
千家信息网最后更新 2025年02月11日,这篇文章主要介绍"PyTorch怎么展示调用顺序",在日常操作中,相信很多人在PyTorch怎么展示调用顺序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"PyTorch
千家信息网最后更新 2025年02月11日PyTorch怎么展示调用顺序
这篇文章主要介绍"PyTorch怎么展示调用顺序",在日常操作中,相信很多人在PyTorch怎么展示调用顺序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"PyTorch怎么展示调用顺序"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
总结说明:代码实验表面,反向传播计算梯度时的执行顺序是和前向计算相反的.这一点由钩子函数的执行顺序可以观察到,并且由保存梯度的列表中的内容顺序可以推断出来.
代码实验展示:
import torchprint(torch.__version__) # 1.2.0+cu92torch.manual_seed(seed=20200910)gradients = list()# ------------------------------------------ #def grad_hook_x0(grad):print("\n为x0执行自定义的钩子函数...")print("保存x0的梯度...")gradients.append(grad)print("x0的钩子函数执行结束...\n")# return gradx0 = torch.randn(2,3,4,5,6,7,requires_grad=True)print('x0.shape:', x0.shape) # x0.shape: torch.Size([2, 3, 4, 5, 6, 7])# print('x0:\n',x0)x0.register_hook(grad_hook_x0)# ------------------------------------------ #def grad_hook_x1(grad):print("\n为x1执行自定义的钩子函数...")print("保存x1的梯度...")gradients.append(grad)print("x1的钩子函数执行结束...\n")# return gradx1 = torch.sum((4 * x0 + 18.0), dim=(0,1)) x1.retain_grad()print('x1.shape:', x1.shape) # x1.shape: torch.Size([4, 5, 6, 7])# print('x1:\n',x1)x1.register_hook(grad_hook_x1)# ------------------------------------------ #def grad_hook_x2(grad):print("\n为x2执行自定义的钩子函数...")print("保存x2的梯度...")gradients.append(grad)print("x2的钩子函数执行结束...\n")# return gradx2 = torch.sum(x1, dim=(1,2)) * 10.0x2.retain_grad()print('x2.shape:', x2.shape) # x2.shape: torch.Size([4, 7])# print('x2:\n',x2)x2.register_hook(grad_hook_x2)# ------------------------------------------ #def grad_hook_loss(grad):print("\n为loss执行自定义的钩子函数...")print("保存loss的梯度...")gradients.append(grad)print("loss的钩子函数执行结束...\n")# return gradloss = torch.mean(x2)loss.retain_grad()print('loss.shape:', loss.shape) # loss.shape: torch.Size([])print('loss:',loss) # loss: tensor(32403.7344, grad_fn=)loss.register_hook(grad_hook_loss)# ------------------------------------------ #loss.backward() # 这行代码将会执行已注册登记的钩子函数tensors_list = [loss, x2, x1, x0]print('打印相关信息,gradients列表的长度为:', len(gradients))print('打印相关信息,tensors_list列表的长度为:', len(tensors_list))for g, t in zip(gradients, tensors_list):print( torch.equal(g, t.grad), g.shape==t.grad.shape==t.shape, g.shape, t.grad.shape, t.shape)
控制台输出结果:
尝试新的跨平台 PowerShell 加载个人及系统配置文件用了 869 毫秒。(base) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq> conda activate ssd4pytorch2_2_0(ssd4pytorch2_2_0) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq> & 'D:\Anaconda3\envs\ssd4pytorch2_2_0\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2021.1.502429796\pythonFiles\lib\python\debugpy\launcher' '58682' '--' 'c:\Users\chenxuqi\Desktop\News4cxq\test4cxq\testHook.py'1.2.0+cu92x0.shape: torch.Size([2, 3, 4, 5, 6, 7])x1.shape: torch.Size([4, 5, 6, 7])x2.shape: torch.Size([4, 7])loss.shape: torch.Size([])loss: tensor(32403.7344, grad_fn=)为loss执行自定义的钩子函数...保存loss的梯度...loss的钩子函数执行结束...为x2执行自定义的钩子函数...保存x2的梯度...x2的钩子函数执行结束...为x1执行自定义的钩子函数...保存x1的梯度...x1的钩子函数执行结束...为x0执行自定义的钩子函数...保存x0的梯度...x0的钩子函数执行结束...打印相关信息,gradients列表的长度为: 4打印相关信息,tensors_list列表的长度为: 4True True torch.Size([]) torch.Size([]) torch.Size([])True True torch.Size([4, 7]) torch.Size([4, 7]) torch.Size([4, 7])True True torch.Size([4, 5, 6, 7]) torch.Size([4, 5, 6, 7]) torch.Size([4, 5, 6, 7])True True torch.Size([2, 3, 4, 5, 6, 7]) torch.Size([2, 3, 4, 5, 6, 7]) torch.Size([2, 3, 4, 5, 6, 7])(ssd4pytorch2_2_0) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq>
到此,关于"PyTorch怎么展示调用顺序"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
函数
钩子
梯度
顺序
信息
长度
学习
代码
更多
实验
帮助
实用
接下来
个人
内容
控制台
文件
文章
方法
注册登记
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库科学计数法转换
湖北c语言软件开发定做
创建数据库四大工具
一对一网络技术开发常见问题
软件开发瀑布
党支部网络安全宣传周活动
福建省温室气体排放清单数据库
深圳市盛世爱彩网络技术
大华怎么登录服务器管理界面
网络安全核查
网络安全决定性因素主动防御
医院服务器存储网络系统中标
数据库恢复的主要依据
数据库pdm模型图
爱比较网络技术有限公司
数据库的内容怎么找
上海晨奚互联网科技有限公司
疫情期间网络安全的观后感
枣庄网络安全宣传
数据库与dmp关系
广州网络安全建设怎么收费
博兴工具软件开发公司
网络安全主要责任
收费站网络安全防控措施
安卓手机数据库展示
数据库触发器怎么一下删除两个
决战平安京服务器全球互通吗
数据库的启动方式
网络工程师 网络安全工程师
手机里的服务器我的世界