昇思25天学习打卡营第5天|MindSpore网络模型构建

news2024/11/14 15:34:01

打卡

目录

打卡

模型类

模型网络:定义与使用

模型层级分解

nn.Flatten 张量转换-演示查看

nn.Dense 全连接层-演示查看

nn.ReLU 非线性激活层-演示查看

nn.SequentialCell 有序网络容器

nn.Softmax 多分类概率预测

模型参数


前置感受:总的来说,使用Mindspore创建一个基本的网络结构是简单容易的,在动态图测试本节内容的情况下,同pytorch的区别不是很大。静态图下的情况没有测试。

模型类

mindspore.nn — MindSpore master 文档

  • mindspore.nn.Cell :构建所有网络的基类
  • AI编译框架分为两种运行模式,分别是动态图模式(又被称为PyNative模式)以及 静态图模式 (又被称为Graph模式)。MindSpore默认以动态图模式运行,但也支持手工切换为静态图模式。
    • 动态图的特点 是计算图的构建和计算同时发生(Define by run)。在调试模型时较为方便,能够实时得到中间结果的值,但由于所有节点都需要被保存,导致难以对整个计算图进行优化。
    • 静态图的特点 是将计算图的构建和实际计算分开(Define and run)。在Graph模式下,编译器可以针对图进行全局的优化,获得较好的性能,比较适合网络固定且需要高性能的场景。静态图模式先编译后执行的模式导致其存在编译耗时
      • 使用MindSpore API以及基于Tensor对象的操作更适合使用静态图编译优化。
      • Graph模式下,Python代码并不是由Python解释器去执行,而是将代码编译成静态计算图,然后执行静态计算图。因此,编译器无法支持全量的Python语法。MindSpore的静态图编译器维护了Python常用语法子集,以支持神经网络的构建及训练
    • context模式是一种全局的设置模式。代码示例如下。
import mindspore as ms 

## 选动态图的配置
ms.set_context(mode=ms.PYNATIVE_MODE)  # 使用set_context进行动态图模式的配置

## 选静态图的配置
ms.set_context(mode=ms.GRAPH_MODE)  # 使用set_context进行运行静态图模式的配置

模型网络:定义与使用

MindSpore中,Cell 类是构建所有网络的基类。如下代码,__init__方法中进行子Cell的实例化和状态管理,在construct方法中实现Tensor操作。model.construct()方法不可直接调用。

如下网络结构:先将Tensor数据展平到28*28维,再构建 [512,28*28] 的全连接层权重矩阵,经过激活函数后,再构建 [512,512] 的全连接层权重矩阵,再次经过激活函数后,再构建 [512,10] 的全连接层权重矩阵后,输出,

import mindspore
from mindspore import nn, ops

class Network(nn.Cell):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.dense_relu_sequential = nn.SequentialCell(
            nn.Dense(28*28, 512, weight_init="normal", bias_init="zeros"),
            nn.ReLU(),
            nn.Dense(512, 512, weight_init="normal", bias_init="zeros"),
            nn.ReLU(),
            nn.Dense(512, 10, weight_init="normal", bias_init="zeros")
        )

    def construct(self, x):
        x = self.flatten(x)
        logits = self.dense_relu_sequential(x)
        return logits

model = Network()
print("查看模型网络结构:\n", model)

X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
print("查看输入经过模型的输出值:\n", logits) 
print(type(logits))  # <class 'mindspore.common._stub_tensor.StubTensor'>
print(logits.shape)  # (1, 10)

## 获得预测概率
pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")

模型层级分解

nn.Flatten 张量转换-演示查看

mindspore.nn.Flatten : 沿着从 start_dim 到 end_dim 的维度,对输入Tensor进行展平。

mindspore.nn.Flatten( start_dim=1,  ## 要展平的第一个维度。默认 1 。
                      end_dim=-1  ## 要展平的最后一个维度。默认 -1 。
                    )

nn.Dense 全连接层-演示查看

mindspore.nn.Dense :适用于输入的密集连接层,用权重和偏差对输入进行线性变换。

计算方式:y = activation(X * kernel + bias ) = 激活函数(输入数据 * 权重矩阵 + 偏置向量)

mindspore.nn.Dense(in_channels,  ## int,输入Tensor的空间维度
                   out_channels, ## int,输出Tensor的空间维度
                   weight_init=None, ## 默认 None,权重使用HeUniform初始化。
                   bias_init=None, ## 默认 None,偏差使用Uniform初始化。
                   has_bias=True, ## 默认 True, 使用偏置向量 
                   activation=None, ## 可指定激活函数名,如’relu’,或具体激活函数,如 mindspore.nn.ReLU 。默认 None
                   dtype=mstype.float32)

nn.ReLU 非线性激活层-演示查看

mindspore.nn.ReLU : 逐元素计算ReLU(Rectified Linear Unit activation function)修正线性单元激活函数。

计算方式:ReLU(x)=max(0, x)

nn.SequentialCell 有序网络容器

mindspore.nn.SequentialCell : 按照传入顺序依次添加神经网络 Cell, 可以通过初始化方式构建如下,也可像list一样通过 append(cell) 方式添加。

 

nn.Softmax 多分类概率预测

mindspore.nn.Softmax : 将多分类的结果以概率的形式展现出来,输出的数据类型和shape与输入的相同。

计算方式:

  1.  Softmax 函数对输入Tensor 在轴 axis 上的元素计算其指数函数值,然后归一化到 [0, 1] 范围,总和为1。
  2.  .argmax(dims=?) 表示沿着指定的轴找到最大值的索引,参数 1 表示沿着第二个轴。

模型参数查看

网络内部神经网络层具有权重参数和偏置参数,如 nn.Dense,这些参数会在训练过程中不断进行优化,通过 model.parameters_and_names() 可获取参数名及对应的参数详情。

mindspore.nn.Cell :parameters_and_names(name_prefix=''expand=True) 返回Cell中parameter的迭代器。包含参数名称和参数本身。expand 为True 则递归地获取当前Cell和所有子Cell的参数及名称;如果为 False ,只生成当前Cell的子Cell的参数及名称。

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

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

相关文章

跟《经济学人》学英文:2024年07月06日这期:How Starbucks caffeinates local economies

How Starbucks caffeinates local economies Call it the frappuccino effect frappuccino&#xff1a;星冰乐 星巴克如何刺激当地经济&#xff1a;称之为星冰乐效应 原文&#xff1a; Starbucks offers endless opportunities for innovation. Parts of social media del…

Scrapy框架的基本使用教程

1、创建scrapy项目 首先在自己的跟目录文件下执行命令&#xff1a; PS D:\BCprogram\python_pro\bigdata> scrapy startproject theridion_grallatorscrapy startproject 项目名 具体执行操作如下&#xff1a;1、创建项目目录&#xff1a;Scrapy会在当前工作目录下创建一…

OceanBase 配置项系统变量实现及应用详解(1):配置项的定义及使用方法

《OceanBase 配置项&系统变量实现及应用详解》专题导读 在使用OceanBase的过程中&#xff0c;看到大家经常会遇到“参数”、“配置项”、“系统变量”等概念&#xff0c;却不太清楚它们是不是同一个东西&#xff0c;以及应该如何使用。一些对数据库开发感兴趣的朋友&#…

JavaScript总结2

概述 JavaScript是世界上最流行的脚本语言。JavaScript是一种轻量级的编程语言&#xff0c;可以插入HTML页面的编程代码。 JavaScript插入HTML页面后&#xff0c;可由浏览器执行。 特点 语法简单&#xff0c;易学易用&#xff1b; 解释性语言&#xff1b; 跨平台&#xff…

中国各省金融监管水平-测算数据(2006-2022年)

金融监管水平是指政府及其指定机构通过法律法规对金融机构及其市场行为进行监督、管理与规范的能力和效率&#xff0c;以维护金融体系稳定、保护投资者和消费者权益、促进公平竞争及支持经济增长。衡量金融监管水平的指标多样&#xff0c;常见的一种计算方式是金融监管支出与金…

K8s驱逐场景以及规避方案参考 —— 筑梦之路

Pod 驱逐分为两种情况&#xff1a; 较安全驱逐 & 提高稳定性的良性驱逐 API 发起驱逐&#xff0c;典型案例&#xff1a;kubectl drain Node Not Ready 时&#xff0c;Controller Manager 发起的驱逐 有风险的驱逐 节点压力驱逐 节点磁盘空间不足、内存不足 或 Pid 不足&…

jmeter-beanshell学习6-beanshell生成测试报告

前面写了各种准备工作&#xff0c;内容组合用起来&#xff0c;应该能做自动化了&#xff0c;最后一步&#xff0c;生成一个报告&#xff0c;报告格式还是csv 报告生成的路径和文件&#xff0c;在用户参数写好&#xff0c;防止以后改路径或者名字&#xff0c;要去代码里面改。以…

提高Python爬虫的匿名性:代理ip的配置策略

在当今&#xff0c;网络数据采集作为获取行业信息的重要手段&#xff0c;尤其在竞争激烈的商业环境中&#xff0c;Python作为一种强大的编程语言&#xff0c;广泛应用于开发各种数据爬虫来自动化地抓取网络信息。然而&#xff0c;网站普遍采用防护措施&#xff0c;即使我们合规…

基于Java技术的B/S模式书籍学习平台

你好&#xff0c;我是专注于计算机科学领域的学姐码农小野。如果你对书籍学习平台开发感兴趣或有相关需求&#xff0c;欢迎私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; B/S模式、Java技术 工具&#xff1a; Eclipse、Navicat、Mave…

手写简单模拟mvc

目录结构&#xff1a; 两个注解类&#xff1a; Controller&#xff1a; package com.heaboy.annotation;import java.lang.annotation.*;/*** 注解没有功能只是简单标记* .RUNTIME 运行时还能看到* .CLASS 类里面还有&#xff0c;构建对象久没来了&#xff0c;这个说明…

高效前端开发:解密pnpm的存储与链接

什么是pnpm PNPM&#xff08;Performant NPM&#xff09;是一种快速且节省磁盘空间的包管理工具。相较于其他包管理器如NPM和Yarn&#xff0c;PNPM通过独特的存储机制和链接技术解决了许多常见的问题。以下是PNPM如何避免这些问题以及其关键技术的详细介绍。 特性 PNPM Store…

初始redis:在Ubuntu上安装redis

1.先切换到root用户 使用su命令切换到root 2.使用apt命令来搜索redis相关的软件包 命令&#xff1a;apt search redis 3.下载redis 命令&#xff1a; apt install redis 在Ubuntu 20.04中 &#xff0c;下载的redis版本是redis5 4.查看redis状态 命令&#xff1a; netst…

jmeter-beanshell学习5-beanshell加减乘除运算

我用到的场景是计算金额&#xff0c;所以主要以金额为主&#xff0c;感觉这部分有点麻烦&#xff0c;直接写遇到的几个坑&#xff0c;就不演示解决的过程了。 1.最早写了个两数相减&#xff0c;但是小数精度容易出现问题。比如1-0.010.989999997这种情况&#xff0c;随便写的几…

【Java]认识泛型

包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都对应了一个包装类型。 除了 Integer 和 Character&#xff0c; 其余基本类型的包装类都是首字母大写。 泛型 泛型是在JDK1.5引入的…

第一百四十九节 Java数据类型教程 - Java子字符串、字符串转换

Java数据类型教程 - Java子字符串 获取子字符串 我们可以使用substring()方法来获取字符串的子部分。 我们可以将开始索引作为参数&#xff0c;并返回一个从开始索引开始到字符串结尾的子串。 我们还可以将开始索引和结束索引作为参数。 它返回从开始索引开始的子字符串和小…

项目记录:一个用python编写的简易版点餐系统

最近无聊做了一个简易版本的点餐系统&#xff0c;简单记录一下。吐槽一下最近的心情&#xff0c;最近心情较差&#xff0c;应该近期会去南昌玩吧&#xff0c;懂南昌的朋友可以评论区推荐下游玩攻略&#xff0c;非常感谢&#xff01; &#xff08;1&#xff09;相关配置信息&…

基于复旦微V7 690T FPGA +ARM/海光X86+AI的全国产化数据采集人工智能平台

国产化FPGA&#xff1a;JFM7VX690T80主机接口&#xff1a;PCIe Gen3 x88Gbps/lane光纤通道&#xff1a;前面板4路SFP光纤&#xff0c;后面板1路QSFP光纤2组独立的DDR3 SDRAM 缓存&#xff0c;工作时钟频率800MHz2个FMC接口扩展&#xff1a;每个支持16路GTH&#xff0c;线速率10…

Nuxt框架中内置组件详解及使用指南(三)

title: Nuxt框架中内置组件详解及使用指南&#xff08;三&#xff09; date: 2024/7/8 updated: 2024/7/8 author: cmdragon excerpt: 摘要&#xff1a;“Nuxt 3框架中与组件的深度使用教程&#xff0c;包括如何使用这两个组件进行页面导航和加载指示的自定义配置与实战示例…

平安银行秋招攻略,考试内容详解

平安银行秋招简介 在众多的银行招聘中&#xff0c;平安银行的招聘难度相对较低&#xff0c;根据考生的反馈情况来看&#xff0c;仔细的进行准备&#xff0c;平安银行上岸并不是难题&#xff0c;那么平安银行的秋招何时开始&#xff1f; 平安银行的秋招开始时间相对较晚&#…

dependencyManagement的作用、nacos的学习

使用SpringCloudAlibaba注意各组件的版本适配 SpringCloudAlibaba已经包含了适配的各组件&#xff08;nacos、MQ等&#xff09;的版本号&#xff0c;也是一个版本仲裁者&#xff0c;但是可能已经有了父项目Spring-Boot-Starter-Parent这个版本仲裁者&#xff0c;又不能加多个父…