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

怎么做app网站ui原型织梦网如何把做网站的删掉

怎么做app网站ui原型,织梦网如何把做网站的删掉,安徽两学一做网站,新建网站的缺点自动微分(Automatic Differentiation)是什么#xff1f;微分是函数在某一处的导数值#xff0c;自动微分就是使用计算机程序自动求解函数在某一处的导数值。自动微分可用于计算神经网络反向传播的梯度大小#xff0c;是机器学习训练中不可或缺的一步。 这些公式难免让人头大… 自动微分(Automatic Differentiation)是什么微分是函数在某一处的导数值自动微分就是使用计算机程序自动求解函数在某一处的导数值。自动微分可用于计算神经网络反向传播的梯度大小是机器学习训练中不可或缺的一步。 这些公式难免让人头大好在自动微分就是帮助我们“自动”解决微分问题的。机器学习平台如TensorFlow、PyTorch都实现了自动微分使用非常的方便不过有必要理解其原理。要理解“自动微分”需要先理解常见的求解微分的方式可分为以下四种 手动求解法(Manual Differentiation)数值微分法(Numerical Differentiation)符号微分法(Symbolic Differentiation)自动微分法(Automatic Differentiation) 所谓手动求解法就是手动算出求导公式然后将公式编写成计算机代码完成计算。比如对于函数求微分首先根据求导公式表找出其导数函数 然后将这个公式写成计算机程序对于任意的输入 都能用这段程序求出其导数也就是此时的微分。是不是很简单 这样做虽然直观但却有两个明显的缺点 每次都要根据手动算出求导公式然后编写代码导致程序很难复用。更让人难受的是复杂的函数普通人很难轻易写出求导公式 函数式自动微分 神经网络的训练主要使用反向传播算法模型预测值logits与正确标签label送入损失函数loss function获得loss然后进行反向传播计算求得梯度gradients最终更新至模型参数parameters。自动微分能够计算可导函数在某点处的导数值是反向传播算法的一般化。 自动微分主要解决的问题是将一个复杂的数学运算分解为一系列简单的基本运算该功能对用户屏蔽了大量的求导细节和过程大大降低了框架的使用门槛。 MindSpore使用函数式自动微分的设计理念提供更接近于数学语义的自动微分接口grad和value_and_grad。下面我们使用一个简单的单层线性变换模型进行介绍。 %%capture captured_output # 实验环境已经预装了mindspore2.2.14如需更换mindspore版本可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 import numpy as np import mindspore from mindspore import nn from mindspore import ops from mindspore import Tensor, Parameter函数与计算图 计算图是用图论语言表示数学函数的一种方式也是深度学习框架表达神经网络模型的统一方法。我们将根据下面的计算图构造计算函数和神经网络。 compute-graph在这个模型中 为输入 为正确值 和 是我们需要优化的参数。 x ops.ones(5, mindspore.float32) # input tensor y ops.zeros(3, mindspore.float32) # expected output w Parameter(Tensor(np.random.randn(5, 3), mindspore.float32), namew) # weight b Parameter(Tensor(np.random.randn(3,), mindspore.float32), nameb) # bias我们根据计算图描述的计算过程构造计算函数。 其中binary_cross_entropy_with_logits 是一个损失函数计算预测值和目标值之间的二值交叉熵损失。 def function(x, y, w, b):z ops.matmul(x, w) bloss ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))return loss执行计算函数可以获得计算的loss值。 loss function(x, y, w, b) print(loss) Tensor(shape[], dtypeFloat32, value 0.914285)微分函数与梯度计算 为了优化模型参数需要求参数对loss的导数 ∂loss∂和 ∂loss∂此时我们调用mindspore.grad函数来获得function的微分函数。 这里使用了grad函数的两个入参分别为 fn待求导的函数。grad_position指定求导输入位置的索引。 由于我们对 和 求导因此配置其在function入参对应的位置(2, 3)。使用grad获得微分函数是一种函数变换即输入为函数输出也为函数。 grad_fn mindspore.grad(function, (2, 3))执行微分函数即可获得 、 对应的梯度。 grads grad_fn(x, y, w, b) print(grads) (Tensor(shape[5, 3], dtypeFloat32, value[[ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01],[ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01],[ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01],[ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01],[ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01]]),Tensor(shape[3], dtypeFloat32, value [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01]))Stop Gradient 通常情况下求导时会求loss对参数的导数因此函数的输出只有loss一项。当我们希望函数输出多项时微分函数会求所有输出项对参数的导数。此时如果想实现对某个输出项的梯度截断或消除某个Tensor对梯度的影响需要用到Stop Gradient操作。 这里我们将function改为同时输出loss和z的function_with_logits获得微分函数并执行。 def function_with_logits(x, y, w, b):z ops.matmul(x, w) bloss ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))return loss, z grad_fn mindspore.grad(function_with_logits, (2, 3)) grads grad_fn(x, y, w, b) print(grads)(Tensor(shape[5, 3], dtypeFloat32, value [[ 1.06568694e00, 1.05373347e00, 1.30146706e00], [ 1.06568694e00, 1.05373347e00, 1.30146706e00], [ 1.06568694e00, 1.05373347e00, 1.30146706e00], [ 1.06568694e00, 1.05373347e00, 1.30146706e00], [ 1.06568694e00, 1.05373347e00, 1.30146706e00]]), Tensor(shape[3], dtypeFloat32, value [ 1.06568694e00, 1.05373347e00, 1.30146706e00])) 可以看到求得 、 对应的梯度值发生了变化。此时如果想要屏蔽掉z对梯度的影响即仍只求参数对loss的导数可以使用ops.stop_gradient接口将梯度在此处截断。我们将function实现加入stop_gradient并执行。 def function_stop_gradient(x, y, w, b):z ops.matmul(x, w) bloss ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))return loss, ops.stop_gradient(z) grad_fn mindspore.grad(function_stop_gradient, (2, 3)) grads grad_fn(x, y, w, b) print(grads)(Tensor(shape[5, 3], dtypeFloat32, value [[ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01]]), Tensor(shape[3], dtypeFloat32, value [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01])) 可以看到求得 、 对应的梯度值与初始function求得的梯度值一致。 Auxiliary data Auxiliary data意为辅助数据是函数除第一个输出项外的其他输出。通常我们会将函数的loss设置为函数的第一个输出其他的输出即为辅助数据。 grad和value_and_grad提供has_aux参数当其设置为True时可以自动实现前文手动添加stop_gradient的功能满足返回辅助数据的同时不影响梯度计算的效果。 下面仍使用function_with_logits配置has_auxTrue并执行。 grad_fn mindspore.grad(function_with_logits, (2, 3), has_auxTrue) grads, (z,) grad_fn(x, y, w, b) print(grads, z)((Tensor(shape[5, 3], dtypeFloat32, value [[ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01]]), Tensor(shape[3], dtypeFloat32, value [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01])), Tensor(shape[3], dtypeFloat32, value [-1.40476596e00, -1.64932394e00, 2.24711204e00])) 可以看到求得 、 对应的梯度值与初始function求得的梯度值一致同时z能够作为微分函数的输出返回。 神经网络梯度计算 根据计算图对应的函数介绍了MindSpore的函数式自动微分但我们的神经网络构造是继承自面向对象编程范式的nn.Cell。接下来我们通过Cell构造同样的神经网络利用函数式自动微分来实现反向传播。 首先我们继承nn.Cell构造单层线性变换神经网络。这里我们直接使用前文的 、 作为模型参数使用mindspore.Parameter进行包装后作为内部属性并在construct内实现相同的Tensor操作。 # Define model class Network(nn.Cell):def __init__(self):super().__init__()self.w wself.b b ​def construct(self, x):z ops.matmul(x, self.w) self.breturn z接下来我们实例化模型和损失函数。 # Instantiate model model Network() # Instantiate loss function loss_fn nn.BCEWithLogitsLoss()完成后由于需要使用函数式自动微分需要将神经网络和损失函数的调用封装为一个前向计算函数。 # Define forward function def forward_fn(x, y):z model(x)loss loss_fn(z, y)return loss完成后我们使用value_and_grad接口获得微分函数用于计算梯度。 由于使用Cell封装神经网络模型模型参数为Cell的内部属性此时我们不需要使用grad_position指定对函数输入求导因此将其配置为None。对模型参数求导时我们使用weights参数使用model.trainable_params()方法从Cell中取出可以求导的参数。 grad_fn mindspore.value_and_grad(forward_fn, None, weightsmodel.trainable_params()) loss, grads grad_fn(x, y) print(grads)(Tensor(shape[5, 3], dtypeFloat32, value [[ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01], [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01]]), Tensor(shape[3], dtypeFloat32, value [ 6.56869709e-02, 5.37334494e-02, 3.01467031e-01])) 执行微分函数可以看到梯度值和前文function求得的梯度值一致。
http://www.hkea.cn/news/14326815/

相关文章:

  • 做网站的公司都很小吗厦门建网站
  • 专做网页的网站专做视频和ppt的网站
  • 网站建设及管理制度文章小程序 wordpress 王皓
  • 网站代更新wordpress 免费主题
  • 哪个网站做兼职有保障济南行业网站建设
  • 国际贸易英文网站提供网站建设工具的公司
  • 企业网站开发目的和意义游戏ui设计
  • 网站首页titlewordpress 404 not found
  • 在西宁做网站可以吗陕西省煤炭建设第一中学官方网站
  • 石家庄智能网站建设wordpress插件的页面文件
  • 免费的网站服务器网站管理设置
  • 广告公司寮步网站建设wordpress相册标签
  • 洛阳市政建设网站天河低价网站建设
  • 西安网站制作培训微网站建设服务
  • 免费高清素材网站建设工程教育网网址
  • windows网站模板八度 网站建设
  • 基于php房产网站开发德州宁津网站建设
  • 淘宝刷单网站建设广州网站建设技术
  • 微生成网站wordpress通过广告挣钱
  • 北京免费网站建设模板内蒙古城乡建设厅网站资质公告
  • 网站开发公司 深圳做网站的中标公司
  • 公司网站找哪家常州网络推广营销公司
  • 网站建设与管理的策划书wordpress 获取指定分类
  • 建站 小语种 连接WordPress推荐主机配置
  • 网站改版设计要多久网站域名过期
  • 汕头高端模板建站必要 网站
  • 寻找郑州网站优化公司光电网站建设
  • 图片上传 网站建设教学视频教程互联网创业项目方案
  • 避免网站 404网站手机版怎么制作
  • 国内做家具外贸的网站有哪些知名品牌vi设计案例