当前位置: 首页 > news >正文

城市模拟建设游戏网站上海做网站建设

城市模拟建设游戏网站,上海做网站建设,wordpress改为直接填写密码,重庆市建设工程信息网行业协会在调试过程中, 有时候我们需要对中间变量梯度进行监控, 以确保网络的有效性, 这个时候我们需要打印出非叶节点的梯度, 为了实现这个目的, 我们可以通过两种手段进行, 分别是: retain_grad()hook 不过我感觉“hook”比“retain_grad()”要麻烦.....,所以我感觉还是…

在调试过程中, 有时候我们需要对中间变量梯度进行监控, 以确保网络的有效性, 这个时候我们需要打印出非叶节点的梯度, 为了实现这个目的, 我们可以通过两种手段进行, 分别是:

  • retain_grad()
  • hook

不过我感觉“hook”比“retain_grad()”要麻烦.....,所以我感觉还是使用“retain_grad()”吧

1、retain_grad()

retain_grad()显式地保存非叶节点的梯度, 代价就是会增加显存的消耗(对比hook函数的方法则是在反向计算时直接打印, 因此不会增加显存消耗.)

使用方法:

直接在forward中对你想要输出gred的tensor“.retain_grad()”即可:tensor.retain_grad()

import torchdef forwrad(x, y, w1, w2):# 其中 x,y 为输入数据,w为该函数所需要的参数z_1 = torch.mm(w1, x)z_1.retain_grad()y_1 = torch.sigmoid(z_1)y_1.retain_grad()z_2 = torch.mm(w2, y_1)z_2.retain_grad()y_2 = torch.sigmoid(z_2)# y_2.retain_grad()loss = 1 / 2 * (((y_2 - y) ** 2).sum())return loss, z_1, y_1, z_2, y_2# 测试代码
x = torch.tensor([[1.0]])
y = torch.tensor([[1.0], [0.0]])
w1 = torch.tensor([[1.0], [2.0]], requires_grad=True)
w2 = torch.tensor([[3.0, 4.0], [5.0, 6.0]], requires_grad=True)
# 正向
loss, z_1, y_1, z_2, y_2 = forwrad(x, y, w1, w2)
# 反向
loss.backward()  # 反向传播,计算梯度print(loss.grad)print(y_2.grad)print(z_2.grad)# 输出结果是否是None,如果是None-->True
def is_none(obj):return obj is None
# 打印出非叶子结点的gred
print(is_none(z_1.grad))
print(is_none(y_2.grad))
print(z_2.grad)

注意:不要对保存梯度的变量做任何修改,例如:z_1, y_1, z_2, y_2,修改为gred_list = [z_1, y_1, z_2, y_2],然后输入梯度值,那是错误的,要直接一个一个输出,不要做任何操作

2、hook的使用

使用retain_grad会消耗额外的显存, 我们可以使用hook在反向计算的时候进行保存. 还是上面的例子, 我们使用hook来完成.

import torch# 我们可以定义一个hook来保存中间的变量
grads = {} # 存储节点名称与节点的grad
def save_grad(name):def hook(grad):grads[name] = gradreturn hookdef forwrad(x, y, w1, w2):# 其中 x,y 为输入数据,w为该函数所需要的参数z_1 = torch.mm(w1, x)y_1 = torch.sigmoid(z_1)z_2 = torch.mm(w2, y_1)y_2 = torch.sigmoid(z_2)loss = 1/2*(((y_2 - y)**2).sum())return loss, z_1, y_1, z_2, y_2# 测试代码
x = torch.tensor([[1.0]])
y = torch.tensor([[1.0], [0.0]])
w1 = torch.tensor([[1.0], [2.0]], requires_grad=True)
w2 = torch.tensor([[3.0, 4.0], [5.0, 6.0]], requires_grad=True)
# 正向传播
loss, z_1, y_1, z_2, y_2 = forwrad(x, y, w1, w2)# hook中间节点
z_1.register_hook(save_grad('z_1'))
y_1.register_hook(save_grad('y_1'))
z_2.register_hook(save_grad('z_2'))
y_2.register_hook(save_grad('y_2'))# 反向传播
loss.backward()
print(grads['z_1'])
print(grads['y_1'])
print(grads['z_2'])
print(grads['y_2'])

https://www.cnblogs.com/dxscode/p/16146470.html

pytorch | loss不收敛或者训练中梯度grad为None的问题_pytorch梯度为none_Rilkean heart的博客-CSDN博客

http://www.yayakq.cn/news/710997/

相关文章:

  • 做网站咨询网站建设与维护制作网页
  • 山东新昌隆建设咨询有限公司网站买了空间和域名 怎么做网站
  • 华创网站建设丰台区网站建设
  • 网站开发技术发展wordpress 加载完毕
  • 天津 网站建设手工制作花朵
  • 有没有专门做网站的西宁网站维护公司
  • 成都APP 微网站开发齐诺网站建设东莞网站建设做网站
  • asp.net 网站开发视频教程上海嘉定网页设计
  • 新手做网站应该注意什么河南教育平台网站建设
  • 响应式外贸建站网站开发人员 组织架构
  • 网站域名实名认证吗新闻10 30字
  • 福州做网站建设做网站后端的是什么部门
  • 苏州网站快速推广济南建设网站的公司吗
  • 成都建站网址云南网际科技有限公司
  • 智慧团建网站pc端网站作品怎么做链接
  • 中国铁路建设集团公司网站制作营业执照图片手机软件
  • 专业服务网站建设爬虫 网站开发实例
  • 计算机网站开发项目昭通市有做网站的吗
  • 网站集群建设和网站集约化如何开发游戏辅助软件
  • seo站内优化包括移动互联网开发技术题库
  • 网站默认首页wordpress 选择用户登录
  • 聊城网站备案河南工程建设信息网官网 可登录中项网
  • 网站策划软件我爱水煮鱼wordpress
  • 网站域名注册网站南宁网站建设公司电话
  • 自己怎样制作公司网站网络营销做得比较成功的企业
  • 网站建设人员配备深圳网站建设 龙华信科
  • 东莞 网站建设多少钱微山网站建设
  • 无锡电商网站wordpress 后台登陆
  • 做平面设计常用的网站me域名的网站
  • 机关门户网站app建设思考购买天猫店铺网站