【昇思初学入门】第六天打卡

函数式自动微分

学习心得

  1. 反向传播:神经网络在训练时,会使用一个叫做“反向传播”的方法。这个方法的基本思路是这样的:首先,神经网络会做出一个预测(我们称之为“logits”),然后我们将这个预测与真实的答案(我们称之为“label”)进行比较,通过一个叫做“损失函数”的工具来得到一个“loss”(损失值)。这个损失值可以告诉我们神经网络的预测有多不准确。接下来,我们利用反向传播算法来计算如何调整神经网络的参数,以使得损失值降低。这个计算过程会生成一个“梯度”(gradients),梯度可以告诉我们应该如何调整神经网络的参数。最后,我们会根据这个梯度来更新神经网络的参数。
  2. 自动微分:自动微分是一个强大的工具,它可以自动地计算一个函数在任意点上的导数值。在神经网络训练中,自动微分可以帮助我们更轻松地计算梯度。它通过将复杂的数学运算分解为一系列简单的基本运算,从而自动地计算出梯度,而不需要我们手动进行复杂的求导计算。这大大简化了神经网络的训练过程,降低了使用深度学习框架的门槛。
  3. MindSpore使用函数式自动微分的设计理念,提供更接近于数学语义的自动微分接口grad和value_and_grad

笔记

import numpy as np
import mindspore
from mindspore import nn
from mindspore import ops
from mindspore import Tensor, Parameter

计算图
在这个模型中, x x x为输入, y y y为正确值, w w w b b b是我们需要优化的参数。

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), name='w') # weight
b = Parameter(Tensor(np.random.randn(3,), mindspore.float32), name='b') # bias
# 计算损失(loss)的函数
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 # ,zgrad_fn = mindspore.grad(function, (2, 3))
grads = grad_fn(x, y, w, b)
print(grads)
(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]))

神经网络梯度计算

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# 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 lossgrad_fn = mindspore.value_and_grad(forward_fn, None, weights=model.trainable_params())
loss, grads = grad_fn(x, y)
print(grads)
(Tensor(shape=[5, 3], dtype=Float32, value=
[[ 2.38697276e-01,  2.73945987e-01,  1.91579953e-01],[ 2.38697276e-01,  2.73945987e-01,  1.91579953e-01],[ 2.38697276e-01,  2.73945987e-01,  1.91579953e-01],[ 2.38697276e-01,  2.73945987e-01,  1.91579953e-01],[ 2.38697276e-01,  2.73945987e-01,  1.91579953e-01]]), Tensor(shape=[3], dtype=Float32, value= [ 2.38697276e-01,  2.73945987e-01,  1.91579953e-01]))

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】已解决ModuleNotFoundError: No module named ‘requests’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决ModuleNotFoundError: No module named ‘requests’ 一、分析问题背景 在使用Python进行网络编程或数据抓取时,requests库因其简洁易用的特性而受到广泛欢迎。然…

简说caffe

Caffe(Convolutional Architecture for Fast Feature Embedding)是一个开源的深度学习框架,由加州大学伯克利分校的Berkeley Vision and Learning Center(BVLC)开发。它主要用于图像分类、分割和图像生成等任务。以下是…

PrestaShop的一些使用介绍

目录 PrestaShop 是一个功能丰富的开源电子商务解决方案。 1. 以下是其基本概念和架构的一些要点: 2. PrestaShop 的模块开发是扩展其功能的重要方式。以下是对 PrestaShop 模块开发的详细介绍: 开发环境准备: 3. PrestaShop 的模块开发允…

Vue项目环境搭建及git仓库新建

不会安装的 可以找下博客,我会在另外一个博客 单独讲解git的安装 接下后启动对应的git bash文件,可以发送快捷方式到桌面 启动git命令的窗口 之后就可以在对应的文件下,启动git命令窗口了 3.码云-项目代码管理仓库 链接:https:…

年化16.6%,全球大类资产使用lightGBM预测轮动——数据缓存提升效率

原创文章第568篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 Dataloader缓存 加载160个因子,10几支大类资产,这个计算还是需要一点时间,尤其在我们频繁运行的时候,需要等待,这里我们…

软件著作权申请(未完待续)

申请网站:中国版权保护中心 注册登录 选择注册身份,个人还是单位

Java基础:IO流

目录 一、定义 1.引言 2.分类 (1)按照流的方向分 (2)按操作文件的类型分 3.体系结构 二、字节流(以操作本地文件为例) 1. FileOutputStream 类 (1)定义 (2&am…

持续总结中!2024年面试必问的操作系统面试题(一)

一、什么是操作系统?它有哪些基本功能? 操作系统(Operating System,简称OS)是计算机系统中的一个关键软件,它管理计算机硬件资源并提供各种服务以方便用户和应用程序的运行。操作系统充当了用户与计算机硬…

赶紧收藏!2024 年最常见的操作系统面试题(一)

一、进程与线程的区别是什么? 进程与线程是操作系统中两种不同的执行单元,它们在资源使用、调度方式、通信机制等方面存在显著的区别。以下是进程与线程之间的主要区别: 定义: 进程:进程是操作系统进行资源分配和调度…

【tcomat】聊聊tomcat是如何打破双亲委派模型进行类加载的

双亲委派模型 对于JVM类加载器来说,其实就是如下的code,JDK提供的三个类加载器,每个类加载器都加载自己范围内的类。Boot\EXT\APP 三个。双亲委派一句话就是,先让老爸处理,老爸处理不了,给爷爷。爷爷处理不…

x86 的 ebp 寄存器,可能比 cr3 更重要,好好掰扯一下 ebp

在 x86 架构的计算机中,ebp(Extended Base Pointer)寄存器通常用于指向当前函数的栈帧(stack frame)的基地址。栈帧是函数调用期间在栈上分配的一块内存区域,用于存储局部变量、函数参数、返回地址和其他临…

JUC线程池最佳实践

参考:Java 线程池最佳实践 | JavaGuide 使用构造函数创建线程池。【使用有界队列,控制线程创建数量】 SpringBoot 中的 Actuator 组件 / ThreadPoolExecutor 的相关 API监控线程池运行状态 是不同的业务使用不同的线程池【父子任务用同一个线程池容易死…

构建LangChain应用程序的示例代码:40、如何使用各种本地版本的 LLaMA2 进行文本到SQL的转换指南

概述 开源的本地大型语言模型(LLMs)非常适合那些需要数据隐私的应用场景。SQL是一个很好的例子。本指南展示了如何使用各种本地版本的 LLaMA2 进行文本到SQL的转换。 包安装 Python安装命令: ! pip install langchain replicate 大型语言…

Excel 宏录制与VBA编程 —— 12、工作簿相关操作

代码1 - 新建、保存工作簿 Sub WorkbooksTest() 创建工作簿Workbooks.Add 创建工作簿并保存至本地Workbooks.Add.SaveAs Filename:"C:\Users\jxd\Desktop\workbook.xlsx"End Sub代码2 - 打开、保存、关闭工作簿 Sub WorkbooksTest() 打开工作簿Workbooks.Open File…

Eureka 概述与 Eureka Server 配置

在微服务架构中,服务注册与发现是一个至关重要的部分。Spring Cloud Netflix 提供了 Eureka 组件来解决这一问题。Eureka 是一个服务注册和发现组件,它允许微服务在启动时向 Eureka 注册,并能从中获取其他微服务的位置,从而实现客…

视图(views)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 下面通过一个例子讲解在Django项目中定义视图,代码如下: from django.http import HttpResponse # 导入响应对象 impo…

MySQL库与表的操作

目录 一、库的操作 1、创建数据库语法 2、举例演示 3、退出 二、字符集和校对规则 1、字符集(Character Set) 2、校对集(Collation) 总结 3、操作命令 查看系统默认字符集以及校验规则 查看数据库支持的字符集 查看数…

Java根据年月创建文件夹

加油,新时代打工人! package com.fqpais.web.controller.business;import java.io.File; import java.time.YearMonth;/*** author wh* date 2024年06月24日9:23*/ public class CreateFolderByYearMonth {public static void main(String[] args) {// 获…

TOPGP-TIPTOP调用外部Webservice

功能要求:ERP作业调用外部系统的webserice更新数据。 演示环境:ERP作业cooi002(员工档案)录入后更新到外部系统员工档案表。 1、外部系统的WebSerice使用.net搭建 2、在Service.cs中写一个调用方法erp_other erp_other中两个参数…

python调用麦克风和扬声器,并调用阿里云实时语音转文字

import time import queue import sounddevice as sd import numpy as np import nls import sys# 阿里云配置信息 URL "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1" TOKEN "XXXX" # 参考https://help.aliyun.com/document_detail/450255.html获…