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

做律师网站福建省建设注册中心网站

做律师网站,福建省建设注册中心网站,织梦 响应式网站,网站建设2017排名自动微分 (Autograd) 模块对张量做了进一步的封装,具有自动求导功能。自动微分模块是构成神经网络训练的必要模块,在神经网络的反向传播过程中,Autograd 模块基于正向计算的结果对当前的参数进行微分计算,从而实现网络权重参数的更…

自动微分 (Autograd) 模块对张量做了进一步的封装,具有自动求导功能。自动微分模块是构成神经网络训练的必要模块,在神经网络的反向传播过程中,Autograd 模块基于正向计算的结果对当前的参数进行微分计算,从而实现网络权重参数的更新。


梯度基本计算

使用 backward 方法,grad 属性来实现梯度的计算和访问。

import torch 
import numpy as np # 标量的梯度计算
def test01():# 对于需要求导的张量,需设置 requires_grad = Truex = torch.tensor(10, requires_grad=True, dtype=torch.float64)# 对 x 的中间计算f = x ** 2 + 20  # 求导获得 2x# 自动微分f.backward()# 访问梯度print(x.grad)# 向量的梯度计算
def test02():x = torch.tensor([10, 20, 30, 40], requires_grad=True, dtype=torch.float64)# 定义变量的计算过程y1 = x ** 2 + 20 # 注意:自动微分的时候,必须是一个标量y2 = y1.mean()  # 对 y1 / 4 的操作# 自动微分,求导y2.backward()print(x.grad)# 多标量梯度计算
def test03():x1 = torch.tensor(10, requires_grad=True, dtype=torch.float64)x2 = torch.tensor(20, requires_grad=True, dtype=torch.float64)# 中间计算过程y = x1 ** 2 + x2 ** 2 + x1 * x2 # 自动微分y.backward()# 打印梯度值print(x1.grad)print(x2.grad)# 多向量的梯度计算
def test04():x1 = torch.tensor([10, 20], requires_grad=True, dtype=torch.float64)x2 = torch.tensor([30, 40], requires_grad=True, dtype=torch.float64)# 定义中间件计算过程y = x1 ** 2 + x2 **2 + x1 * x2 # 将输出结果变为标量y = y.sum()# 自动微分y.backward()# 打印张量的梯度值print(x1.grad)print(x2.grad)if __name__ == "__main__":test04() 

控制梯度计算

当 requires_grad = True 时,张量在某些时候计算不进行梯度计算。

import torch 
import numpy as np # 控制梯度计算
# 训练时才用到梯度计算
def test01():x = torch.tensor(10, requires_grad=True, dtype=torch.float64)print(x.requires_grad)# 1. 第一钟方法with torch.no_grad():y = x**2print(y.requires_grad)#2. 针对函数# 第二种方式@torch.no_grad()def my_func(x):return x ** 2 y = my_func(x)print(y.requires_grad)#3. 第三种方式: 全局的方式torch.set_grad_enabled(False)y = x ** 2 print(y.requires_grad)# 梯度累加和梯度清零
def test02():x = torch.tensor([10, 20, 30, 40], requires_grad=True, dtype=torch.float64)# 当我们重复对x进行梯度计算的时候,是会将历史的梯度值累加到 x.grad 属性中# 不要取累加历史梯度for _ in range(3):# 对输入x的计算过程f1 = x ** 2 + 20# 将向量转换为标量f2 = f1.mean()# 梯度清零if x.grad is not None:x.grad.data.zero_()# 自动微分f2.backward()print(x.grad)# 梯度下降优化函数
def test03():x = torch.tensor(10, requires_grad=True, dtype=torch.float64)for _ in range(100):# 正向计算y = x ** 2# 梯度清零if x.grad is not None:x.grad.data.zero_()# 自动微分y.backward()# 更新参数x.data = x.data - 0.001 * x.grad # 打印 x 的值print('%.10f' % x.data)if __name__ == "__main__":test03() 

梯度计算注意点

当对设置 requires_grad = True 的张量使用 numpy 函数进行转换时,会出现如下错误:

Can't call numpy()  on Tensor that requires grad. Use tensor.detach().numpy() instead.

此时,需要先使用 detach 函数将张量进行分离,再使用 numpy 函数。

注意:detach 之后会产生一个新的张量,新的张量做为叶子节点并且该张量和原来的张量共享数据,但是分离后的张量不需要计算梯度。

import torch 
import numpy as np # 错误方式
def test01():x = torch.tensor([10, 20], requires_grad=True, dtype=torch.float64)# RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.# print(x.numpy())# 正确的做法print(x.detach().numpy())# 共享数据
def test02():# x 是叶子节点x1 = torch.tensor([10, 20], requires_grad=True, dtype=torch.float64)# 使用 detach 函数来分离出一个新的张量x2 = x1.detach()print(id(x1.data), id(x2.data))# 修改分离后产生的新的张量x2[0] = 100 print(x1)print(x2)# 通过结果我么发现,x2 张量不存在 requires_grad = True # 表示:对 x1 的任何计算都会影响到对 x1 的梯度计算# 但是,对 x2 的任何计算不会影响到 x1 的梯度计算print(x1.requires_grad)print(x2.requires_grad)if __name__ == "__main__":test02() 

文章转载自:

http://4nU5NNY4.xjmpg.cn
http://ufON2Xy3.xjmpg.cn
http://mw2E2NMS.xjmpg.cn
http://qqXNZtjh.xjmpg.cn
http://xFot6kcg.xjmpg.cn
http://ZzPjOfD2.xjmpg.cn
http://tNeHewwF.xjmpg.cn
http://t42xMFmS.xjmpg.cn
http://REuECjcn.xjmpg.cn
http://F8scB0Io.xjmpg.cn
http://rfMOVKPJ.xjmpg.cn
http://NYgWRqXa.xjmpg.cn
http://YGqFXUw5.xjmpg.cn
http://fmf2pZ7A.xjmpg.cn
http://23onhkF2.xjmpg.cn
http://LGV2OeM9.xjmpg.cn
http://4S3McQy4.xjmpg.cn
http://bdDjDwdX.xjmpg.cn
http://WSxXrHX5.xjmpg.cn
http://UaJicoRI.xjmpg.cn
http://vKreb7zU.xjmpg.cn
http://cjhMVSnr.xjmpg.cn
http://IU1DbscX.xjmpg.cn
http://V8UNZFqc.xjmpg.cn
http://95dF9GGu.xjmpg.cn
http://6jzmQ56D.xjmpg.cn
http://F8UbKm8O.xjmpg.cn
http://oG0yyGOE.xjmpg.cn
http://Kpa183MT.xjmpg.cn
http://vQxJyJI8.xjmpg.cn
http://www.dtcms.com/wzjs/698242.html

相关文章:

  • seo网站推广佛山网站兼容代码
  • 百度站长平台注册万能进销存软件免费版
  • 建站素材图片湖州网站建设推广
  • 网站建设带后台广告设计公司哪家好
  • 个人网站页面模板html上海做网站的小公司
  • 怎么看网站用的什么程序做的国际网站建设
  • 网站 签约外贸网站建设设计方案
  • 织梦大气绿色大气农业能源化工机械产品企业网站源码模版网站数据库连接出错
  • 哪些公司做外贸网站好营销
  • 站群推广有哪些方式域名网站这么做
  • 天津自动网站建设调试网站开发建设需要什么
  • 网站建设收费标准报价网站使用引导
  • 建设网站情况说明范文收录优美图片崩了
  • 高端网站设计公司上海公司电子版简介模板
  • 电子商务网站建设 市场分析做的好的商城网站
  • 网站建设最新开发语言国外做兼职的网站
  • 网站规划与栏目结构诊断idc网站备案
  • 怎么在公众号做影视网站自己电脑做网站必须装jdk
  • 做网站公司的未来企业网站建设需求调查
  • 网站排名掉了简单网页设计成品
  • 网站建设与网页设计试卷手机网站模板更换方法
  • 免费开发个人小程序的平台小红书seo排名优化
  • 博山做网站公司html5企业网站开发
  • 做海购的网站广告设计专业学校有哪些
  • 中车网站建设的优缺点上海网站建设网站开发
  • 网站制作的书籍徐州金网网站建设
  • 手机版网站建设报价wordpress飘窗
  • 专门找事做的网站明会红网站
  • 基础网站怎么做网络营销都有哪些内容
  • 网站图片下载 代码网站建设+临沂