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

安阳网站建设方案win7如何做网站服务器

安阳网站建设方案,win7如何做网站服务器,wordpress开启xml-rpc,网站推广链接PyTorch框架学习四——计算图与动态图机制一、计算图二、动态图与静态图三、torch.autograd1.torch.autograd.backward()2.torch.autograd.grad()3.autograd小贴士4.代码演示理解#xff08;1#xff09;构建计算图并反向求导#xff1a;#xff08;2#xff09;grad_tens… PyTorch框架学习四——计算图与动态图机制一、计算图二、动态图与静态图三、torch.autograd1.torch.autograd.backward()2.torch.autograd.grad()3.autograd小贴士4.代码演示理解1构建计算图并反向求导2grad_tensors的理解:3autograd.gard与create_graph的结合4小贴士15小贴士26小贴士3一、计算图 计算图是用来描述运算的有向无环图它包含了两个主要元素结点Node与边Edge。其中结点表示数据如向量、矩阵、张量等而边表示运算如加减乘除卷积等。 下面用计算图来表示y(xw)×(w1)这样的一个运算。 令 a x wb w 1则y a×b。 计算图如下图所示 构建这样的计算图是很方便求解梯度的以对w求偏导为例假设x和w的初始值为2和1 强调两个概念 叶子结点用户创建的结点如x与wtensor中的is_leaf属性就是指示张量是否为叶子结点。非叶子结点运算后会被释放叶子结点的梯度会被保留若想保留非叶子结点的梯度可以用retain_grad()。grad_fn记录创建张量时所用的方法函数在梯度的反向传播时会用到以上述的计算为例y.grad_fn MulBackward 0a.grad_fn AddBackward 0。 二、动态图与静态图 动态图静态图实现方式运算与搭建同时进行先搭建计算图后计算特点灵活易调节高效但不灵活框架PyTorchTensorFlow 三、torch.autograd 这是一个自动求导系统提供了类和函数用来对任意标量函数进行求导。 下面介绍autograd中两个自动求导的函数 1.torch.autograd.backward() 没有返回值但是已经对数据进行了自动求导。 torch.autograd.backward(tensors: Union[torch.Tensor, Sequence[torch.Tensor]], grad_tensors: Union[torch.Tensor, Sequence[torch.Tensor], None] None, retain_graph: Optional[bool] None, create_graph: bool False, grad_variables: Union[torch.Tensor, Sequence[torch.Tensor], None] None)tensors用于求导的张量们。grad_tensors多梯度权重下面用例子理解。retain_graph布尔可选若为False计算图计算完之后就会被释放若为True则会保留。create_graph布尔可选若为True会创建导数的计算图用于更高阶的求导默认为False。 2.torch.autograd.grad() torch.autograd.grad(outputs: Union[torch.Tensor, Sequence[torch.Tensor]], inputs: Union[torch.Tensor, Sequence[torch.Tensor]], grad_outputs: Union[torch.Tensor, Sequence[torch.Tensor], None] None, retain_graph: Optional[bool] None, create_graph: bool False, only_inputs: bool True, allow_unused: bool False)3.autograd小贴士 梯度不会自动清零若不清零则会叠加上原来的数据需要手动清零grad.zero_()。依赖于叶子结点的结点requires_grad默认为True。叶子结点不可执行in-place操作in-place操作为在原始内存中改变数据的操作如a torch.ones((1, )) 加等操作a的内存地址不变所以对张量不能做这项操作。这是因为在前向传播时会记录叶子结点的地址反向求导时是会依据记录的地址去取值进行运算的若在中途用in-place操作改变了值则梯度求解会出错。 4.代码演示理解 1构建计算图并反向求导 # 设置 x 和 w 的初始值 w torch.tensor([1.], requires_gradTrue) x torch.tensor([2.], requires_gradTrue) # 构建计算图 a torch.add(w, x) b torch.add(w, 1) y torch.mul(a, b) # 反向求导 y.backward() print(w.grad, x.grad)结果如下与手动计算结果一致 tensor([5.]) tensor([2.])2grad_tensors的理解: w torch.tensor([1.], requires_gradTrue) x torch.tensor([2.], requires_gradTrue)a torch.add(w, x) # retain_grad() b torch.add(w, 1)y0 torch.mul(a, b) # y0 (xw) * (w1) y1 torch.add(a, b) # y1 (xw) (w1) dy1/dw 2loss torch.cat([y0, y1], dim0) # [y0, y1] grad_tensors torch.tensor([1., 2.])loss.backward(gradientgrad_tensors) # gradient 传入 torch.autograd.backward()中的grad_tensorsprint(w.grad)grad_tensors的作用就类似于一个权重当要求导的对象有多个梯度时它就是各个梯度加和的权重比如这里 dy0 / dw 5dy1/dw 2那么w的总梯度值为 5×1 2×2 9。 结果如下 tensor([9.])3autograd.gard与create_graph的结合 x torch.tensor([3.], requires_gradTrue) y torch.pow(x, 2) # y x**2grad_1 torch.autograd.grad(y, x, create_graphTrue) # grad_1 dy/dx 2x 2 * 3 6 print(grad_1)grad_2 torch.autograd.grad(grad_1[0], x) # grad_2 d(dy/dx)/dx d(2x)/dx 2 print(grad_2)其中y就是用于求导的张量x就是需要梯度的张量grad_1就是第一次求导后x的梯度因为create_graph为True所以已经构建了导数的计算图可以对grad_1再次求导得到第二次求导后x的梯度grad_2 (tensor([6.], grad_fnMulBackward0),) (tensor([2.]),)4小贴士1 这里我们构建了四次计算图四次一模一样的计算 w torch.tensor([1.], requires_gradTrue) x torch.tensor([2.], requires_gradTrue)for i in range(4):a torch.add(w, x)b torch.add(w, 1)y torch.mul(a, b)y.backward()print(w.grad)若我们不对梯度手动清零结果就如下所示 tensor([5.]) tensor([10.]) tensor([15.]) tensor([20.])因为每次的梯度都一样都为5所以若不手动清零则梯度会叠加起来。 我们在原来的基础上添加上手动清零 w torch.tensor([1.], requires_gradTrue) x torch.tensor([2.], requires_gradTrue)for i in range(4):a torch.add(w, x)b torch.add(w, 1)y torch.mul(a, b)y.backward()print(w.grad)w.grad.zero_()结果为 tensor([5.]) tensor([5.]) tensor([5.]) tensor([5.])这样才是正确的。 5小贴士2 w torch.tensor([1.], requires_gradTrue) x torch.tensor([2.], requires_gradTrue)a torch.add(w, x) b torch.add(w, 1) y torch.mul(a, b)print(a.requires_grad, b.requires_grad, y.requires_grad)结果为 True True True6小贴士3 a torch.ones((1, )) print(id(a), a)a torch.ones((1, )) print(id(a), a)结果为 2379593847576 tensor([1.]) 2379593847576 tensor([2.])可见加等操作是in-place操作是在原始内存中改变数据的操作。 而加法操作就不是如下所示 a torch.ones((1, )) print(id(a), a)a a torch.ones((1, )) print(id(a), a)内存不一样 3019154559688 tensor([1.]) 3019156480632 tensor([2.])如果我们对叶子结点进行in-place操作 w torch.tensor([1.], requires_gradTrue) x torch.tensor([2.], requires_gradTrue)a torch.add(w, x) b torch.add(w, 1) y torch.mul(a, b)w torch.ones((1,)) # w.add_(1)y.backward()print(w.grad)会报如下错误提示
http://www.pierceye.com/news/801317/

相关文章:

  • 大连网站制作优选ls15227微信公众号小程序搭建
  • 个人空间网站建设报告网站建设培训哪个好
  • wap微信网站模板在线网络培训平台
  • asp网站怎么做三语网络推广计划书格式
  • 徽州网站建设企业网站备案域名信息
  • 广州建设信息网官方网站火车头采集wordpress发布
  • 易记域名网站大全火车票网站建设多少
  • 怎么将网站权重提上去怎样在网站图片做超级链接
  • 网站建设需求分析报告功能百度官方电话24小时
  • 扬州市城市建设监察支队网站做空比特币网站
  • 石家庄做网站 vtkj网站空间怎样设置用户名和密码
  • 自考网页制作与网站建设网站虚拟主机建设
  • 手机网站建站视频教程阿里云虚拟主机与网站吗
  • 孝感做招聘信息的网站鹏翔科技 网站建设
  • 阿里云 建设网站怎么样长春网站建设翻译
  • 网站空间位置是什么枝江企业网站
  • 网站到期查询固定ip做网站和域名区别
  • 北京专业网站制作大概费用红色网站建设的比较好的高校
  • 廊坊网站的优化html5网站地址
  • 少儿图书销售网站开发背景网络个性化定制
  • 网站制作价格情况微信输入法使用方法
  • 首饰网站建设策划案我的主页制作代码
  • 网站专题页面模板科技有限公司可以做网站建设吗
  • 物流企业网站建设特色吉林智能网站建设价格
  • 安徽省教育基本建设学会网站光明新区建设网站
  • 图片无法显示wordpress我是seo关键词
  • 设计商标的网站最新的电商资讯有哪些
  • 烟台开发区网站建设做家教中介网站赚钱吗
  • 商洛市建设工程造价管理站网站网站无障碍建设报告
  • 网站如何做原创广州网站优化关键词公司