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

网站上线之前怎么做推广中央电视台新闻联播

网站上线之前怎么做推广,中央电视台新闻联播,语言网站开发企业,网站建站历史函数式自动微分 相关前置知识复习 深度学习的重点之一是神经网络。而神经网络很重要的一环是反向传播算法,这个算法用于调整神经网络的权重。 反向传播算法 这里举例说明反向传播在做什么。 假设你是一个学生,一次考试过后,你收到了一份老…

函数式自动微分

相关前置知识复习

深度学习的重点之一是神经网络。而神经网络很重要的一环是反向传播算法,这个算法用于调整神经网络的权重。

反向传播算法

这里举例说明反向传播在做什么。
假设你是一个学生,一次考试过后,你收到了一份老师打分后的试卷。
前向传播就是考试的过程,你通过自己学习的知识来解答试卷上的每个问题。这就是用神经网络的权重(已有的知识)推理(解答)输入数据(问题),得到预测结果(最终的答卷)。
计算误差是你评估自己答案和标准答案的差距。这里在神经网络中是使用损失函数来衡量预测结果和实际结果之间的差距。
反向传播是分析错误的问题,分析具体是哪个知识点没掌握清楚,再去针对性的学习对应的知识,加强弱项。这里在申请网络中就是使用误差来反向调整神经网络中的权重。

反向传播的步骤是:

  1. 前向传播:输入数据通过神经网络计算出预测结果
  2. 计算误差:通过神经网络的预测结果和实际结果,计算损失函数
  3. 反向传播:将误差从输出层向输入层反向传播,计算每一层的误差。
  4. 调整权重:根据计算出的误差,使用优化算法(如梯度下降)调整每一层的权重,以减少误差。

链式法则

链式法则(Chain Rule)是微积分的重要概念,用于计算复合函数的导数。这是计算梯度的基础。简单来说链式法则的基本思想是将复杂的过程分解成多个简单的部分,再将各部分的结果组合起来得到总结果。

假设我们有两个函数
f f f g g g,并且它们是复合的,即 y = f ( g ( x ) ) y=f(g(x)) y=f(g(x))。根据链式法则,复合函数
y y y x x x 的导数可以表示为: d y d x = d y d g ⋅ d g d x \frac{d_y}{d_x}= \frac{d_y}{d_g} \cdot \frac{d_g}{d_x} dxdy=dgdydxdg

为什么要在神经网络这里强调链式法则呢?
举个小例子。想象神经网络的结构,第一层传给第二层,第二层传给第三层,每一层的输出都是后一层的输入,整个就是一条链。通过最后一层的输出,计算损失函数对最终输出的导数,再根据链式法则,可以逐层往前推导梯度,将误差从输出层传递回输入层,计算出每个参数的梯度,再进行参数更新,完成反向传递。

自动微分

上面阐述了,神经网络的误差需要通过链式法则传递,从而计算出每个参数的梯度。自动微分利用链式法则自动计算反向传播的梯度,也就是将梯度计算过程变得自动化了。

构建模型

以下我们构建一个简单的线性模型来介绍如何进行函数式自动微分。

普通的线性模型: y = w × b + b y = w \times b+ b y=w×b+b
输入x,输出y,通过调整w和b参数来优化预测。

# 环境配置
import numpy as np
import mindspore
from mindspore import nn
from mindspore import ops
from mindspore import Tensor, Parameter
x = ops.ones(5, mindspore.float32)  # 形状为5的全1输入
y = ops.zeros(3, mindspore.float32)  # 形状为3的全0输出
w = Parameter(Tensor(np.random.randn(5, 3), mindspore.float32), name='w') # 线性函数的权重
b = Parameter(Tensor(np.random.randn(3,), mindspore.float32), name='b') # 线性函数的偏差 
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

解读一下这段代码:
z是线性函数的组合,ops.matmul(x, w) 是输入x和权重w的矩阵乘法,然后再将偏置向量b加入到结果中。
这里使用binary_cross_entropy_with_logits作为损失函数。这个函数计算了预测值和目标值之间的二值交叉熵损失。

通过 f u n c t i o n ( x , y , w , b ) function(x,y,w,b) function(x,y,w,b)可以计算到loss值。

模型参数优化

为了优化模型参数,需要计算对两个参数的导数。

  • ∂ loss ⁡ ∂ w \frac{\partial \operatorname{loss}}{\partial w} wloss
  • ∂ loss ⁡ ∂ b \frac{\partial \operatorname{loss}}{\partial b} bloss

这里使用mindspore.grad函数,来获得function的微分函数用以计算梯度。
grad函数包括两个参数:

  • fn:待求导的函数。
  • grad_position:需要求导的参数的索引。

function的入参是x,y,w,b, 我们需要对w,b求导。w,b在入参中的索引是2,3。因此grad_postion为(2,3),可得function的微分函数

grad_fn = mindspore.grad(function, (2, 3))

停止梯度

一般来讲,只会求loss对参数的导数,因此只需要输出loss就可以。但如果要求的话,也可以输出多个loss以外的参数。在我们的例子里,也就是在function的函数中增加除了loss之外的输出值。

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, zgrad_fn = mindspore.grad(function_with_logits, (2, 3))
grads = grad_fn(x, y, w, b)

这里增加了对z的输出。在后续grad_fn调用时,z也会参与到梯度计算,对w和b的梯度结果造成影响。

stop gradient用以阻止某些张量的梯度计算。通俗的说,当对张量 z 应用 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)

这样的函数定义下,函数依然输出z,但是对z进行了阻断,不会影响到后续梯度计算是对其他参数(w,b)更新。

Auxiliary data

Auxiliary data意思是辅助数据,是函数第一个输出以外的其他输出。一般loss是第一个输出,其他都是Auxiliary data。

has_aux指具有辅助数据,可以在grad函数中设置,就能自动将辅助数据添加stop gradient操作。

grad_fn = mindspore.grad(function_with_logits, (2, 3), has_aux=True)

神经网络实现自动微分

上面的操作是自己手动搭建了一个模型。在之前的章节中我们使用nn.Cell构建了神经网络,现在来看看如何在Cell模型中如何实现函数式自动微分。

初始化模型

# 模型初始化,定义参数w和b,并构建模型
class Network(nn.Cell):def __init__(self):super().__init__()self.w = wself.b = bdef construct(self, x):z = ops.matmul(x, self.w) + self.breturn z
# 实例化模型
model = Network()
# 定义损失函数
loss_fn = nn.BCEWithLogitsLoss()
# 定义前向计算函数
def forward_fn(x, y):z = model(x)loss = loss_fn(z, y)return loss
# 上面的步骤之前的文章已经介绍过了。

这里我们使用value_and_grad接口获得微分函数。w、b两个参数已经是网络属性的一部分了,因此不需要再次进行指定了,而是使用model.trainable_params()获取可求导的参数。

grad_fn = mindspore.value_and_grad(forward_fn, None, weights=model.trainable_params())

总结

本章使用了两种方式实现了自动微分,也就是梯度计算。一种是手动构建模型,一种使用nn.Cell搭建的神经网络。此外,本节也复习了一些深度学习的基础知识

打卡凭证

在这里插入图片描述

http://www.shuangfujiaoyu.com/news/56167.html

相关文章:

  • 湛江网站设计服务深圳百度竞价推广
  • 太原网站制作价格最新战争新闻事件今天
  • 十个有趣又好玩的网页泉州百度关键词优化
  • 个人网站模板 html5百度网盘电脑版下载
  • 百度自然排名网站的logo怎么做成都网站seo
  • 济南网站建设询问企优互联价低合肥网站排名
  • 怎样进行公司网站建设浏览器下载
  • 久久建筑资料网网站搜索优化技巧
  • 定制产品网站东莞seo建站哪家好
  • 做网站公司 备案天津搜索引擎优化
  • 网站的目的南宁网站优化
  • 博客网站模板有哪些网盘资源
  • 阿里云网站核验单软文推广去哪个平台好
  • 软件开发 网站开发 不同宁波seo软件免费课程
  • 贵阳营销型网站建设百度广告搜索引擎
  • 网站建设站长今日热榜官网
  • 网络推广费用预算表北京seo学校
  • 2015做导航网站天津百度seo排名优化软件
  • 网站建设梦幻创意交换免费连接
  • 网站做百度竞价利于百度优化百度一下首页问问
  • 微信公众号个人可以做网站么网络营销方式包括哪些
  • 重庆品牌网站建设怎么样谷歌seo网站推广怎么做
  • 南昌网站建设索q.479185700上海企业seo
  • 旅游网站内容规划特点新闻源软文推广平台
  • 直销网站建设公司百度惠生活推广怎么收费
  • dede装修网站模板有哪些搜索引擎网站
  • 创建公司网站内容总结市场营销策划方案书
  • 公司网站后台是什么太原模板建站定制网站
  • 网站建设培训速成谁有恶意点击软件
  • 医药类网站怎么做seo百度怎样发布信息