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

定制高端网站建设设计廊坊首页霸屏优化

定制高端网站建设设计,廊坊首页霸屏优化,做美容美容院网站的费用,房产网站的全景图怎么做上一篇文章介绍了反向传播的自动化,但也存在一些问题,本章用于说明这些问题,并修改原有框架,使其支持复杂计算图的运行: 问题一:重复使用一个变量,梯度不会累计 也就是说,反向传播时…

上一篇文章介绍了反向传播的自动化,但也存在一些问题,本章用于说明这些问题,并修改原有框架,使其支持复杂计算图的运行:

问题一:重复使用一个变量,梯度不会累计

也就是说,反向传播时gx=[1,1],f.inputs=[x,x],在循环中第二次赋值把第一次赋的值给覆盖了。

如何解决

问题二:重复计算导数,梯度不会自动清零

第一次计算,x的导数是2,第二次计算x的导数是3。但是两次的导数值累加了。

设置x.cleargrad() 手动清空梯度

问题三:不支持复杂计算图

循环funs中的函数
0(初始化)[D]
1[B,C]
2[B,A]
3[B]
4[A]
5[ ]

如何解决

代码验证

完整代码

import numpy as npclass Variable:def __init__(self, data):if data is not None:if not isinstance(data, np.ndarray):raise TypeError('{} is not supported'.format(type(data)))self.data = dataself.grad = Noneself.creator = Noneself.generation = 0def set_creator(self, func):self.creator = funcself.generation = func.generation + 1def cleargrad(self):self.grad = Nonedef backward(self):if self.grad is None:self.grad = np.ones_like(self.data)funcs = []seen_set = set()def addfunc(f):if f not in seen_set:funcs.append(f)seen_set.add(f)funcs.sort(key=lambda x: x.generation)#funcs按照从小到大的辈分排序addfunc(self.creator)while funcs:f = funcs.pop()gys = [output.grad for output in f.outputs]  # 获取所有输出的梯度gxs = f.backward(*gys)                       # 调用 backward 方法if not isinstance(gxs, tuple):               # 确保 gxs 是元组gxs = (gxs,)for x, gx in zip(f.inputs, gxs):            # 为每个输入分配梯度if x.grad is None:x.grad = gxelse:x.grad = x.grad + gxif x.creator is not None:addfunc(x.creator)class Function:def __call__(self, *inputs):xs = [x.data for x in inputs]               # 提取输入数据ys = self.forward(*xs)                      # 前向传播(解包)if not isinstance(ys, tuple):               # 确保 ys 是元组ys = (ys,)outputs = [Variable(as_array(y)) for y in ys]  # 创建输出变量self.generation = max([x.generation for x in inputs])for output in outputs:output.set_creator(self)self.inputs = inputs                        # 保存输入self.outputs = outputs                      # 保存输出return outputs if len(outputs) > 1 else outputs[0]  # 根据输出数量返回def forward(self, *xs):raise NotImplementedError()def backward(self, *gys):raise NotImplementedError()# 实现具体的函数类
class Square(Function):def forward(self, x):return x ** 2def backward(self, gy):x = self.inputs[0].data                     # 从 inputs 中获取数据gx = 2 * x * gyreturn gxclass Add(Function):def forward(self, x0, x1):y = x0 + x1return ydef backward(self, gy):return gy, gy                               # 对两个输入返回相同的梯度# 定义便捷函数
def square(x):return Square()(x)def add(x0, x1):return Add()(x0, x1)# 定义 as_array 函数
def as_array(x):if np.isscalar(x):return np.array(x)return xx = Variable(np.array(2.0))
a = square(x)
y = add(square(a) , square(a))
y.backward()
print(y.data)
print(x.grad)
'''
# 测试代码
x = Variable(np.array(2.0))
y = Variable(np.array(3.0))
z = add(square(x), square(y))
z.backward()
print(z.data)    # 输出结果: 13.0 (2^2 + 3^2 = 4 + 9 = 13)
print(x.grad)    # 输出梯度: 4.0 (dz/dx = 2 * 2 = 4)
print(y.grad)    # 输出梯度: 6.0 (dz/dy = 2 * 3 = 6)
'''

运行结果:

下一章将会深入实践深度学习中的内存管理部分,掌握代码技术

http://www.dtcms.com/wzjs/446037.html

相关文章:

  • wordpress修改url单页面seo搜索引擎优化
  • 手机怎么创网站免费下载seo优化服务
  • 上海公司企业网站怎么做b站入口2024已更新
  • 电商商城网站开发哪里可以代写软文
  • sql数据库环境网站搭建教程如何进行新产品的推广
  • 婺源网站建制作怎么做神马搜索排名seo
  • 乐趣做网站市场营销策划
  • 做装修公司的网站广州最新新闻
  • 好多网站权重都没了怎么在网上做广告
  • 局网站建设方案word网站排名查询
  • 基金会网站建设方案优化设计电子课本下载
  • 企业网站推广的实验内容上海谷歌优化
  • 网页美工设计教程排名优化哪家好
  • wordpress 个人简介 换行优化设计三年级上册语文答案
  • 搭建网站需要什么技能我国网络营销现状分析
  • 网络舆情的三种分类标准班级优化大师免费下载
  • 中企动力口碑怎么样新野seo公司
  • 网站设计规划信息技术教案下载安装
  • 网站空间到期提示湖南seo推广
  • 网站建设课程小结厦门seo起梦网络科技
  • 域名空间网站建设要多少钱b2b电商平台
  • 网站开发做网站万网域名注册教程
  • 怎么开始做网站免费发帖推广网站
  • 正规网站制作公司哪家好站长工具查询seo
  • 聊城网站建设哪家便宜如何在网上做销售推广
  • 网站的功能性站长统计官网
  • 如何在电脑上建设网站网络营销logo
  • 某公司网站策划建设手机优化软件
  • 沈阳专业网站制作设计成都网站优化平台
  • 中国广播电视总台官网陕西seo