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

番禺网站建设哪里有有没有免费注册的网站

番禺网站建设哪里有,有没有免费注册的网站,快速建设网站视频教程,上海网页网络技术有限公司这里写目录标题1 Pytorch计算图和自动微分2 将单个数据从计算图中剥离 .detach3 使用with torch.go_grad(): 包含的代码段不会计算微分1 Pytorch计算图和自动微分 从功能上理解: 计算图就是类似于数据结构中的无环有向图,Pytorch中的计算图就是为了记录…

这里写目录标题

    • 1 Pytorch计算图和自动微分
    • 2 将单个数据从计算图中剥离 .detach
    • 3 使用with torch.go_grad(): 包含的代码段不会计算微分

1 Pytorch计算图和自动微分

从功能上理解:
计算图就是类似于数据结构中的无环有向图,Pytorch中的计算图就是为了记录一个数据从开始到最后所作的操作和参数,这样在进行反向传播时候(backward),就会有足够的参数去计算梯度,得到最终值相较于操作过程中数据梯度,之后再通过优化器(optimizer.step()),对目标函数进行优化,就几乎完成了一轮模型训练的目的。

将Tensor的requires_grad属性设置为True时,Pytorch的torch.autograd会自动地追踪它的计算轨迹当需要计算微分的时候,只需要对最终计算结果的Tensor调用backward方法中间所有计算节点的微分就会被保存在grad属性中

import torchx = torch.arange(9, dtype=torch.float).view(3,3)
print("x默认不缓存计算轨迹:",x, x.requires_grad)
y = torch.randn(3,3, requires_grad=True)
print("y设置requires_grad属性:",y, y.requires_grad)
z = torch.sum(torch.mm(x, y))
z.backward()
print("得到Z:", z, z.requires_grad)
print("经过计算,未保留x的梯度:", x.grad)
print("经过计算,保留了y的梯度:", y.grad)out:
x默认不缓存计算轨迹: tensor([[0., 1., 2.],[3., 4., 5.],[6., 7., 8.]]) False
y设置requires_grad属性: tensor([[-0.2810, -2.7142,  1.8053],[-0.6549,  1.0730, -1.9470],[ 0.5629, -0.0692, -0.7376]], requires_grad=True) True
得到Z: tensor(-32.7122, grad_fn=<SumBackward0>) True
经过计算,未保留x的梯度: None
经过计算,保留了y的梯度: tensor([[ 9.,  9.,  9.],[12., 12., 12.],[15., 15., 15.]])

从上面可以看出,y设置了requires_grad为True时,在计算过后,Pytorch会缓存其梯度信息,而x为设置该属性,即未保存该梯度信息。

汇总:

Tensor属性作用
针对Tensor构造时的属性后期也可以输出查看
device该节点运行的设备环境,即CPU/GPU
requires_grad自动微分机是否需要对该节点求导,缺省为False
针对Tensor输出时的属性,构造时不可指定用来输出查看
grad输出节点对该节点的梯度,缺省为None
grad_fn中间计算节点关于全体输入节点的映射,记录了前向传播经过的操作。叶节点为None
is_leaf该节点是否为叶节点

当需要计算中间数据(x)的梯度时,只需要将最后的结果值进行backward()后,再打印x.grad即可

2 将单个数据从计算图中剥离 .detach

一般在模型训练中计算评价指标时,我们需要停止数据的计算轨迹缓存,则可以使用.detach将数据从计算图中剥离出去,这个是针对单个数据的。

import torch
x = torch.rand(3, 3, requires_grad=True)
w = torch.ones(3, 3, requires_grad=True)
print(x)
print(w)
yy = torch.mm(w, x)
print(yy.requires_grad)detach_yy = yy.detach()  #一般模型中使用loss计算评价指标时,都会用类似这样的式子将loss从计算图中剥离备份出去。
y = torch.sum(yy)
y.backward()print("进行剥离后,detach_yy的属性:", detach_yy.grad)
print("x的梯度缓存:", x.grad)
print("w的梯度缓存:", w.grad)out:
tensor([[0.8037, 0.2443, 0.3994],[0.9879, 0.9484, 0.4035],[0.3057, 0.6682, 0.4186]], requires_grad=True)
tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]], requires_grad=True)
True
进行剥离后,detach_yy的属性: None
x的梯度缓存: tensor([[3., 3., 3.],[3., 3., 3.],[3., 3., 3.]])
w的梯度缓存: tensor([[1.4474, 2.3398, 1.3925],[1.4474, 2.3398, 1.3925],[1.4474, 2.3398, 1.3925]])

3 使用with torch.go_grad(): 包含的代码段不会计算微分

想必这个在模型测试阶段大家都会用,之所以用这个,是将模型测试阶段的微分不计算在模型中,否则模型把测试集都学过了,那以后拿什么进行模型评价呢?

import torch
x = torch.rand(3, 3, requires_grad=True)
w = torch.ones(3, 3, requires_grad=True)
y = torch.sum(torch.mm(w, x))
print("正常缓存梯度信息:", y.requires_grad)with torch.no_grad():y = torch.sum(torch.mm(w, x))print("在with torch.no_grad中:", y.requires_grad)out:
正常缓存梯度信息: Truewith torch.no_grad中: False
http://www.yayakq.cn/news/257308/

相关文章:

  • 杭州网站建设方案优化重庆做网站熊掌号
  • 专门做网站推广的平台wordpress 顶部登录
  • 专业网站优化电话西安软件开发公司排行
  • 石家庄商城网站搭建多少钱wordpress内部跳转链接
  • 网站域名登录网页设计怎么让图片居中
  • 设计网站什么叫空间不稳定js网站源码已到期
  • 英语作文网站做个微信小程序需要花多少钱
  • 电销如何介绍网站建设开发网站最后进行的步骤是什么
  • 杭州网站建设 企业wordpress收不到网站
  • 长春网站制作方案定制建网站提供下载
  • 树莓派 做网站网站策划模版
  • 如何让网站收录手机客户端下载安装
  • 杭州网站seo推广软件网站优化目的
  • dz网站建设教程做网站编辑是不是也要做推广
  • 怎么恢复网站数据库文件位置在哪个网站可以免费做广告
  • 精选合肥网站建设网站做三层结构
  • 公明 网站建设做外贸什么网站比较好做
  • 临沂建网站哪家好网页界面设计网站
  • 通信技术公司网站建设网站建设的大纲
  • 上海备案证查询网站查询网站查询网站seo 教程
  • 做游戏必备的几个网站网页设计工资一般多少2017
  • 网站开发用什么语言比较好网站图片加alt标签
  • 微信网站链接怎么做泸州市住房和城乡建设局网站
  • 昌吉北京网站建设网站建设高级 上海
  • wordpress收费注册搜索引擎优化叫什么
  • 湖北建设银行网站首页唯品会一家专门做特卖的网站手机版
  • 温州市网站制作网站的建设及维护报告
  • 网站栏目类别是什么意思版面设计用什么软件
  • 网站制作策划书做网站什么公司好
  • 网站设计与制作的过程网站建设教程小说简介