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

怎么在自己电脑上建网站嵌入式开发难学吗

怎么在自己电脑上建网站,嵌入式开发难学吗,怎么做网站的超级链接,网站空间上传软件通过反向传播进行自动求梯度1-requires_grad问题2-梯度3- detach() 和 with torch.no_grad()4- Tensor.data.requires_gradPyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图,并执行反向传播. 1-requires_grad问题 requires_gradTrue …

通过反向传播进行自动求梯度

        • 1-requires_grad问题
        • 2-梯度
        • 3- detach() 和 with torch.no_grad()
        • 4- Tensor.data.requires_grad

PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图,并执行反向传播.

1-requires_grad问题

requires_grad=True
开始追踪(track)在其上的所有操作(这样就可以利用链式法则进行梯度传播了),完成计算后,可以调用.backward()来完成所有梯度计算。默认 requires_grad = False
完成计算后,可以调用**.backward()来完成所有梯度计算。此Tensor的梯度将累积到.grad**属性中。

#x是直接创建的,所以它没有grad_fn, 而
x = torch.ones(2, 2, requires_grad=True)
print(x)#tensor([[1., 1.],[1., 1.]], requires_grad=True)
print(x.grad_fn)#None#y是通过一个加法操作创建的,所以它有一个为的grad_fn。
y = x + 2
print(y)#tensor([[3., 3.],[3., 3.]], grad_fn=<AddBackward>)
print(y.grad_fn)#<AddBackward object at 0x1100477b8>#打印是否有叶子节点
print(x.is_leaf, y.is_leaf) # True False

若开始没有设置requires_grad 属性可通过 .requires_grad_()来用in-place的方式改requires_grad属性

a = torch.randn(2, 2) # 缺失情况下默认 requires_grad = False
a = ((a * 3) / (a - 1))
print(a.requires_grad) # False
a.requires_grad_(True)
print(a.requires_grad) # True
b = (a * a).sum()
print(b.grad_fn)#<SumBackward0 object at 0x118f50cc0>

2-梯度

标量:标量就是一个数字。标量也称为0维数组
向量:向量是一组标量组成的列表。向量也称为1维数组。
矩阵:矩阵是由一组向量组成的集合。矩阵也称为2维数组。
张量:张量是矩阵的推广,可以用来描述N维数据

注意在y.backward()时,如果y是标量,则不需要为backward()传入任何参数;否则,需要传入一个与y同形的Tensor

out.backward() # 等价于 out.backward(torch.tensor(1.)) 反向转播#求导
x = torch.tensor([1.0, 2.0, 3.0, 4.0], requires_grad=True)
y = 2 * x
z = y.view(2, 2)
print(z)#tensor([[2., 4.],[6., 8.]], grad_fn=<ViewBackward>)

现在 z 不是一个标量,所以在调用backward时需要传入一个和z同形的权重向量进行加权求和得到一个标量。

v = torch.tensor([[1.0, 0.1], [0.01, 0.001]], dtype=torch.float)
z.backward(v)
print(x.grad)#tensor([2.0000, 0.2000, 0.0200, 0.0020]) x.grad是和x同形的张量

3- detach() 和 with torch.no_grad()

两种方式中断梯度追踪,无法进行梯度链式法则梯度传播
1-detach()
将其从追踪记录中分离出来,这样就可以防止将来的计算被追踪,这样梯度就传不过去了

2-with torch.no_grad()
将不想被追踪的操作代码块包裹起来,这种方法在评估模型的时候很常用,因为在评估模型时我们并不需要计算可训练参数(requires_grad=True)的梯度。

x = torch.tensor(1.0, requires_grad=True)
y1 = x ** 2 
with torch.no_grad():y2 = x ** 3
y3 = y1 + y2print(x.requires_grad)#true
print(y1, y1.requires_grad) #tensor(1., grad_fn=<PowBackward0>) True
print(y2, y2.requires_grad) # False
print(y3, y3.requires_grad) # tensor(2., grad_fn=<ThAddBackward>)Truey3.backward()#y2被包裹 所以y2有关的梯度是不会回传的 结果只是y1 对x的梯度
print(x.grad)#tensor(2.)#使用y2的传播会报错
#RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn

4- Tensor.data.requires_grad

当你想要修改tensor的数值,但是又不希望被autograd记录(即不会影响反向传播),那么我么可以对tensor.data进行操作。

x = torch.ones(1,requires_grad=True)print(x.data) # tensor([1.]) #还是一个tensor
print(x.data.requires_grad) #False #但是已经是独立于计算图之外y = 2 * x
x.data *= 100 # 只改变了值,不会记录在计算图,所以不会影响梯度传播y.backward()#tensor([100.], requires_grad=True)
print(x) # 更改data的值也会影响tensor的值
print(x.grad)#tensor([2.])
http://www.yayakq.cn/news/414960/

相关文章:

  • 做网站需要多少台服务器制作网站一般多少钱
  • 网站建设需要哪些知识山东建大建设集团有限公司
  • 网站上的导航栏怎么做施工企业主要负责人包括
  • 网站建设与管理考试题无锡网站制作优化
  • 最新网站发布ppt模板哪里找
  • 医院网站asp做个网站app吗
  • 做自己的网站挣钱长春市做网站的公司
  • 软件开发包含网站开发大连企业推广公司
  • 做a视频 免费网站阿里巴巴网站运营怎么做
  • 价格划算的做pc端网站东莞常平有多少个村
  • 哪里有免费建站平台免费网上咨询医生是哪个网
  • 商务网站的主要内容wordpress房产企业模板免费下载
  • 辽宁金帝建设集团网站django做的购物网站
  • 海宁高端网站设计北京婚恋网站哪家最好
  • jsp asp php哪个做网站上海网页公司
  • 网站优化简历模板郑州seo管理系统运营
  • 国外建筑公司网站怎么做电脑端网站设计稿
  • 苏州公司网站建设报价橙色企业网站
  • 营销网站建设专家中国建筑怎么样
  • 晨光科技+网站建设系统软件开发流程
  • 把公司网站 公开下载 做教程 侵权吗湖南关键词优化首选
  • 杭州手机网站制作flash网站制作下载
  • 海南做网站的公司头像制作网站
  • 合肥做网站费用设计类哪个专业好
  • 定州网站设计南通网站建设开发
  • 四川住房城乡和城乡建设厅网站首页wordpress all import
  • 广东网站建设包括什么软件上海十大互联网公司排名
  • 全网营销式网站网站建设文化市场
  • wordpress用户发表文章特定目录seo站长工具平台
  • 自助建站一般适用于大型电子商务网站建设wordpress首行空两格