《昇思25天学习打卡营第07天|函数式自动微分》

函数式自动微分

环境配置

# 实验环境已经预装了mindspore==2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号
!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.2.14
import numpy as np
import mindspore
from mindspore import nn
from mindspore import ops
from mindspore import Tensor, Parameter

函数与计算图

  • w x + b = z wx + b = z wx+b=z
    -> A c t i v a t i o n − F u n c t i o n ( z ) Activation - Function(z) ActivationFunction(z)
    -> y p r e d y_{pred} ypred
    -> C r o s s − E n t r o p y ( y , y p r e d ) Cross - Entropy(y , y_{pred}) CrossEntropy(y,ypred)

  • w , b 为需要优化的参数 w,b为需要优化的参数 w,b为需要优化的参数

    x = ops.ones(5, mindspore.float32) # input tensor
    y = ops.zones(3, mindspore.float32) # expected output
    w = Parameter(Tensor(np.random.randn(5, 3), mindspore.float32), name = 'w')
    b = Parameter(Tensor(np.random.randn(3,), mindspore.float32), name='b') # bias
    
    def function(x, y, w, b):
        z = ops.matmul(x, w) + b
        loss = ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))
        return loss
        
    loss = function(x, y, w, b)
    print(loss)
    #output Tensor(shape=[], dtype=Float32, value= 0.914285)
    

微分函数与梯度计算

  • 为优化模型需要求参数对loss的导数 ∂ l o s s ∂ w \frac{\partial loss}{\partial w} wloss, ∂ l o s s ∂ b \frac{\partial loss}{\partial b} bloss
  • 调用mindspore.grad函数获取function的微分函数
  • fn: 待求导函数
  • grad_position: 指定求导输入位置索引
  • 使用grad获得微分函数是一种函数变换,即输入为函数,输出也为函数
grad_fn = mindspore.grad(function, (2, 3))
grads = grad_fn(x, y, w, b)
print(grads)
#Output (Tensor(shape=[5, 3], dtype=Float32, 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], dtype=Float32, value= [ 6.56869709e-02,  5.37334494e-02,  3.01467031e-01]))

Stop Gradient

  • 实现对某个输出项的梯度截断,或消除某个Tensor对梯度的影响
def function_with_logits(x, y, w, b):
    z = ops.matmul(x, w) + b
    loss = 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)
# 若想屏蔽掉z对梯度的影响,使用ops.stop_gradient接口, 将梯度在此截断

def function_stop_gradient(x, y, w, b):
    z = ops.matmul(x, w) + b
    loss = 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)

Auxiliary data

  • Auxiliary data为辅助数据,是函数除第一个输出项外的其他输出。
  • gradvalue_and_grad提供has_aux参数,当其设置为True时,可以自动实现前文手动添加stop_gradient的功能。
grad_fn = mindspore.grad(function_with_logits, (2, 3), has_aux=True)
grads, (z,) = grad_fn(x, y, w, b)

神经网络梯度计算

#定义模型
class Network(nn.Cell):
    def __init__(self):
        super().__init__()
        self.w = w
        self.b = b

    def construct(self, x):
        z = ops.matmul(x, self.w) + self.b
        return z
# 实例化模型
model = Network()
# 实例化损失函数
loss_fn = nn.BCEWithLogitsLoss()
# 定义正向传播
def forward_fn(x, y):
    z = model(x)
    loss = loss_fn(z, y)
    return loss
grad_fn = mindspore.value_and_grad(forward_fn, None, weights=model.trainable_params())
loss, grads = grad_fn(x, y)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/764766.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习原理与Pytorch实战

深度学习原理与Pytorch实战 第2版 强化学习人工智能神经网络书籍 python动手学深度学习框架书 TransformerBERT图神经网络: 技术讲解 编辑推荐 1.基于PyTorch新版本,涵盖深度学习基础知识和前沿技术,由浅入深,通俗易懂&#xf…

13 Redis-- 数据一致性模型、MySQL 和 Redis 的数据一致性

数据一致性模型 根据一致性的强弱分类,可以将一致性模型按以下顺序排列: 强一致性 > 最终一致性 > 弱一致性 数据一致性模型一般用于分布式系统中,目的是定义多个节点间的同步规范。 在这里,我们将其引入数据库和缓存组…

试用笔记之-免费的汇通总账财务软件

首先下载免费汇通总账财务软件 http://www.htsoft.com.cn/download/htcaiwu.rar

【Python】已解决:NameError: name ‘unichr’ is not defined

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:NameError: name ‘unichr’ is not defined 一、分析问题背景 在使用Python进行编程时,有时会遇到“NameError: name ‘unichr’ is not defined”…

每日一题——Python实现蓝桥杯 单词分析(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码分析 时间复杂度分析 空间复杂度分析 总结 我要更强 方法一&#x…

拥抱智能化,WMS系统让仓库管理精细化与人性化结合-亿发

在当今竞争激烈的市场环境中,仓库管理不再是简单的货物存储和流通,而是一个复杂而精细的管理系统。仓库管理系统(Warehouse Management System, WMS)作为现代仓库管理的核心技术,通过“有过程”的管理理念,…

【postgresql】数据库操作

创建数据库 使用 CREATE DATABASE SQL 语句来创建 语法: CREATE DATABASE dbname; 使用 createdb 命令来创建 语法: createdb [option...] [dbname [description]] 参数说明: dbname:要创建的数据库名。 description&…

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用 使用gitlab的CI/CD实现logseq笔记自动发布为单页应用如何实现将logseq的笔记发布成网站使用 logseq-publish-docker 实现手动发布使用gitlab的CI/CD实现自动发布过程中的问题及解决参考资料 使用gitlab的CI/CD实现logseq笔记…

中国社科院-英国斯特灵大学双证管理学博士之英方斯特灵大学介绍

中国社科院-英国斯特灵大学双证管理学博士之英方斯特灵大学介绍 斯特灵大学(University of Stirling)是位于英国苏格兰斯特灵市的一所公立大学,1967 年以埃斯利城堡为中心建成。 斯特灵大学坚信教育的历史使命,开设高质、灵活的…

独家专访|格行随身WiFi创始人——刘永先 格行随身wifi如何成为行业的领跑品牌?

随着移动互联网的普及和消费者对网络依赖性的增强,随身WiFi市场迎来了前所未有的发展机遇。然而,这一市场的迅速扩张也伴随着一系列问题,其中最为显著的就是市场乱象丛生。近日,有幸邀请到行业领跑品牌格行随身WiFi的刘总&#xf…

电驱失效类型和风险分析,如何用精益思维提升电驱可靠性?

在电动车日益普及的今天,电驱系统作为电动车的“心脏”,其可靠性直接关系到整车的性能与用户体验。然而,电驱失效问题却一直困扰着电动车行业,如何提升电驱可靠性成为了业内关注的焦点。今天,深圳天行健精益管理咨询公…

能自动铲屎的养猫救星?带你了解热门爆款智能猫砂盆的真实体验!

在谈论猫咪的日常生活时,我和朋友最经常聊的话题就是在各种各样的紧急情况下如何狼狈地赶回去给猫咪铲屎,毕竟猫砂盆里的屎但凡停留那么几小时,就要开始发臭了,一下班回去实在受不了那个味道,每次下班在家门口都想带个…

深入剖析高并发服务架构设计的探索与性能分析(1)

深入剖析多线程、协程与事件驱动IO模型的探索与性能分析 Web并发应用场景网站(Website)并发处理场景特点复杂业务逻辑功能点与页面处理高效应对IO并发需求缓存优化处理控制 大浏览量系统的静态改造静态系统通常有如下几方面的特征几种静态化方案的设计及…

构建RAG+nebula graph(知识图谱KG)

目标:通过利用 LlamaIndex 和 NebulaGraph 为费城费城人队(Philadelphia Phillies)构建一个RAG流程,深入探讨知识图谱。 NebulaGraph 是市场上最好的知识图谱数据库之一。它是开源的、分布式的,并且能够处理具有亿万边…

Latex 绘图:Tikz 包

参考文献: TiKZ入门教程 - LaTeX工作室 (latexstudio.net)Latex-TiKZ绘制数学平面几何图教程_latex绘制几何图形-CSDN博客【TikZ 简单学习(上):基础绘制】Latex下的绘图宏包-CSDN博客LaTeX—Tikz 宏包入门使用教程 - 知乎 (zhihu.com)Latex 实时编译 &a…

【鸿蒙学习笔记】基础组件Blank:空白填充组件

Blank:空白填充组件 Column({ space: 20 }) {Row() {Text(Bluetooth)Blank().color(Color.Yellow)Toggle({ type: ToggleType.Switch }).margin({ top: 14, bottom: 14, left: 6, right: 6 })}.backgroundColor(Color.Pink).borderRadius(15).padding({ left: 12 }…

矮油,希喂、喜崽、爱立方主食冻干是超贵的进口平替?最新测评

相信很多铲屎官一到选粮就苦恼,尤其是主食冻干,虽说主食冻干对猫咪的好处是普通猫粮无法比的,其价格也是远超普通猫粮的。所以很多铲屎官就很担心,花了高价买的主食冻干却营养不高。其实除了营养还有更多需要考虑的,比…

简述设计模式-代理模式

概述 代理模式:一个类代表另一个类的功能。代理模式通过引入一个代理对象来控制对员对象的访问。 举个例子,就像明星都有经纪公司,商业合作都是直接和经济公司沟通,不会直接和明星沟通。 律师和委托人就是代理关系,…

分布式技术专题 | TCP在分布式网络中的通信机制与底层实现

深入解析分布式网络中的TCP通信协议实现 跨地域通信与资源共享网络节点与主机的定义网络技术通信机制TCP/IP协议模型TCP/IP分层机制TCP的Socket链接处理控制TCP的优势和特性自动差错控制正确性和有序性 TCP的Socket使用端口在应用程序间通信TCP的Socket使用端口套接字操作 跨地…