昇思MindSpore学习笔记6--网络构建

摘要:

记录了昇思MindSpore神经网络模型的定义构建、模型分层,以及获取模型参数的步骤方法。

一、神经网络模型概念

神经网络模型是由神经网络层和Tensor操作构成

mindspore.nn实现了神经网络层

mindspore.nn.Cell是构建神经网络的基类

支持子Cell嵌套形成复杂的神经网络。

二、环境准备

安装minspore模块

!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.3.0rc1

导入minspore、nn、ops等相关模块

import mindspore
from mindspore import nn, ops

三、定义模型类

继承nn.Cell类

__init__ 初始化方法实现子Cell实例化和状态管理

construct 构建方法实现Tensor操作

示例:Mnist数据集分类神经网络模型。

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(model)

输出:

Network<
  (flatten): Flatten<>
  (dense_relu_sequential): SequentialCell<
    (0): Dense<input_channels=784, output_channels=512, has_bias=True>
    (1): ReLU<>
    (2): Dense<input_channels=512, output_channels=512, has_bias=True>
    (3): ReLU<>
    (4): Dense<input_channels=512, output_channels=10, has_bias=True>
    >
  >

构造输入数据,直接调用模型,获得一个十维的Tensor输出,包含每个类别的原始预测值。

【为什么?model.construct()方法不可直接调用。

X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
# print logits
logits

输出:

Tensor(shape=[1, 10], dtype=Float32, value=
[[-6.12840615e-03, -9.06550791e-03,  7.44015072e-03 ... -1.21108280e-03,  8.75189435e-05,  1.14824511e-02]])

nn.Softmax()获得预测概率

pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")

输出:

Predicted class: [9]

四、模型层

神经网络模型层分解

构造3个28x28的随机图像,shape为(3, 28, 28)

input_image = ops.ones((3, 28, 28), mindspore.float32)
print(input_image.shape)

输出:

(3, 28, 28)

1. nn.Flatten

实例化nn.Flatten层,将28x28的2D张量转换为784大小的连续数组。

类似理解为将2维矩阵转换为1维数组。

flatten = nn.Flatten()
flat_image = flatten(input_image)
print(flat_image.shape)

输出:

(3, 784)

2. nn.Dense

nn.Dense为全连接层,使用权重和偏差对输入进行线性变换。

【猜测理解】排除噪声数据

layer1 = nn.Dense(in_channels=28*28, out_channels=20)
hidden1 = layer1(flat_image)
print(hidden1.shape)

输出:

(3, 20)

3. nn.ReLU

nn.ReLU层给网络中加入非线性的激活函数,帮助神经网络学习各种复杂的特征。

【猜测理解】提取特征模型

print(f"Before ReLU: {hidden1}\n\n")
hidden1 = nn.ReLU()(hidden1)
print(f"After ReLU: {hidden1}")

输出:

Before ReLU: 
[[ 0.22167806 -0.6745967  -0.27886766  0.22455142 -0.23248096 -0.13336143
   0.10336601  0.55169076  1.5191591   0.73823357  0.14714427  0.70888543
  -0.38694382 -0.49788377  0.06992912  0.1532075  -0.5910665   0.69121903
  -0.3803944   1.0794045 ]
 [ 0.22167806 -0.6745967  -0.27886766  0.22455142 -0.23248096 -0.13336143
   0.10336601  0.55169076  1.5191591   0.73823357  0.14714427  0.70888543
  -0.38694382 -0.49788377  0.06992912  0.1532075  -0.5910665   0.69121903
  -0.3803944   1.0794045 ]
 [ 0.22167806 -0.6745967  -0.27886766  0.22455142 -0.23248096 -0.13336143
   0.10336601  0.55169076  1.5191591   0.73823357  0.14714427  0.70888543
  -0.38694382 -0.49788377  0.06992912  0.1532075  -0.5910665   0.69121903
  -0.3803944   1.0794045 ]]


After ReLU: 
[[0.22167806 0.         0.         0.22455142 0.         0.
  0.10336601 0.55169076 1.5191591  0.73823357 0.14714427 0.70888543
  0.         0.         0.06992912 0.1532075  0.         0.69121903
  0.         1.0794045 ]
 [0.22167806 0.         0.         0.22455142 0.         0.
  0.10336601 0.55169076 1.5191591  0.73823357 0.14714427 0.70888543
  0.         0.         0.06992912 0.1532075  0.         0.69121903
  0.         1.0794045 ]
 [0.22167806 0.         0.         0.22455142 0.         0.
  0.10336601 0.55169076 1.5191591  0.73823357 0.14714427 0.70888543
  0.         0.         0.06992912 0.1532075  0.         0.69121903
  0.         1.0794045 ]]

4. nn.SequentialCell

nn.SequentialCell 顺序Cell容器

输入张量Tensor按照定义的顺序通过所有Cell

seq_modules = nn.SequentialCell(
    flatten,
    layer1,
    nn.ReLU(),
    nn.Dense(20, 10)
)

logits = seq_modules(input_image)
print(logits.shape)

输出:

(3, 10)

5. nn.Softmax

最后使用nn.Softmax将神经网络最后一个全连接层返回的logits的值缩放为[0, 1],表示每个类别的预测概率。axis指定的维度数值和为1。

【猜测理解】nn.Softmax根据神经网络返回的特征解推出预测概率

softmax = nn.Softmax(axis=1)
pred_probab = softmax(logits)

五、模型参数

包括网络内部神经网络层具有权重参数和偏置参数nn.Dense等。

model.parameters_and_names() 获取参数名及对应的参数

print(f"Model structure: {model}\n\n")
​
for name, param in model.parameters_and_names():
    print(f"Layer: {name}\nSize: {param.shape}\nValues : {param[:2]} \n")

输出:

Model structure: Network<
  (flatten): Flatten<>
  (dense_relu_sequential): SequentialCell<
    (0): Dense<input_channels=784, output_channels=512, has_bias=True>
    (1): ReLU<>
    (2): Dense<input_channels=512, output_channels=512, has_bias=True>
    (3): ReLU<>
    (4): Dense<input_channels=512, output_channels=10, has_bias=True>
    >
  >


Layer: dense_relu_sequential.0.weight
Size: (512, 784)
Values : 
[[-0.00240309  0.01673641  0.01800174 ... -0.00494339  0.00156037
  -0.01077523]
 [ 0.01024065  0.00036838  0.01390939 ... -0.03533866  0.01564405
   0.00675983]] 

Layer: dense_relu_sequential.0.bias
Size: (512,)
Values : [0. 0.] 

Layer: dense_relu_sequential.2.weight
Size: (512, 512)
Values : 
[[ 0.01293653 -0.00968055  0.00156187 ... -0.00389436  0.00231833
  -0.00164853]
 [ 0.01165598  0.00445346 -0.00812163 ...  0.00903445 -0.00193659
   0.00366774]] 

Layer: dense_relu_sequential.2.bias
Size: (512,)
Values : [0. 0.] 

Layer: dense_relu_sequential.4.weight
Size: (10, 512)
Values : 
[[ 5.1974057e-05 -1.5710767e-02 -1.3622168e-02 ...  8.3433613e-03
  -2.0038823e-02  2.4895865e-02]
 [-1.8089322e-02 -1.6186651e-02  1.5664777e-02 ... -8.6768856e-03
   4.5306431e-03  8.7257465e-03]] 

Layer: dense_relu_sequential.4.bias
Size: (10,)
Values : [0. 0.] 

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

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

相关文章

C语言单链表的算法之插入节点

一&#xff1a;访问各个节点中的数据 &#xff08;1&#xff09;访问链表中的各个节点的有效数据&#xff0c;这个访问必须注意不能使用p、p1、p2&#xff0c;而只能使用phead &#xff08;2&#xff09;只能用头指针不能用各个节点自己的指针。因为在实际当中我们保存链表的时…

后端之路第三站(Mybatis)——XML文件操作sql

一、XML映射文件是啥 前面我们学过了在Mapper接口用注解的方式来操作sql语句 那么XML映射文件就另一种操作sql语句的方法 为什么还要有这么个玩意&#xff1f; 我简单说就是&#xff1a;如果有的sql特别复杂的话&#xff0c;比如需要【动态sql】的话&#xff0c;就得用到XM…

数据可视化期末总结

期末考试重点&#xff08;世界上最没意义的事情&#xff09; 选择 p8 数据可视化的标准&#xff1a; 实用、完整、真实、艺术、交互&#xff08;性&#xff09; p21 色彩三属性 色相、饱和度、亮度 p23 视觉通道的类型&#xff1a; 记得色调是定性 p39 散点图&#xff08;二维…

GIT-LFS使用

0.前言 目前git仓库有很多很大的文件需要管理&#xff0c;但是直接上传&#xff0c;每次clone的文件太大&#xff0c;所有准备使用git-lfs解决。 1、下载和安装 Git LFS 1.1、直接下载二进制包&#xff1a; Releases git-lfs/git-lfs GitHub 安装 Git LFS sudo rpm -ivh…

Leica Cyclone 3DR2024 一款功能强大的点云建模软件下载License获取

Leica Cyclone 3DR 2024 是一款功能强大的点云建模软件&#xff0c;使用旨在为用户提供全面的点云管理、自动化的点云分析&#xff0c;结合强大的建模&#xff0c;在一个直观友好的环境中&#xff0c;专注的完成挑战&#xff0c;提高生产力&#xff0c;轻松创建并交付专业的成果…

杨幂跨界学术圈:内容营销专家刘鑫炜带你了解核心期刊的学术奥秘

近日&#xff0c;知名艺人杨幂在权威期刊《中国广播电视学刊》上发表了一篇名为《浅谈影视剧中演员创作习惯——以电视剧<哈尔滨一九四四>为例》的学术论文&#xff0c;此举在学术界和娱乐圈均引起了广泛关注。该期刊不仅享有极高的声誉&#xff0c;还同时被北大中文核心…

Data-Driven Reinforcement Learning for Robotic Manipulation

意思是 不同的任务以及机器人都有单独的数据和模型 未来需要整合 一个大的数据集包含所有的 然后训练一个大模型 以后具体的任务只需要针对这个模型进行微调 challenge bootstrapping with large data 2 3 4 高清图补充

【C++】using namespace std 到底什么意思

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文作为 JohnKi 的学习笔记&#xff0c;引用了部分大佬的案例 &#x1f4e2;未来很长&a…

【SGX系列教程】(二)第一个 SGX 程序: HelloWorld,linux下运行

文章目录 0. SGX基础原理分析一.准备工作1.1 前提条件1.2 SGX IDE1.3 基本原理 二.程序设计2.1 目录结构2.2 源码设计2.2.1 Encalve/Enclave.edl:Enclave Description Language2.2.2 Enclave/Enclave.lds: Enclave linker script2.2.3 Enclave/Enclave.config.xml: Enclave 配置…

ctfshow-web入门-命令执行(web59-web65)

目录 1、web59 2、web60 3、web61 4、web62 5、web63 6、web64 7、web65 都是使用 highlight_file 或者 show_source 1、web59 直接用上一题的 payload&#xff1a; cshow_source(flag.php); 拿到 flag&#xff1a;ctfshow{9e058a62-f37d-425e-9696-43387b0b3629} 2、w…

MathType7.6专业数学公式编辑器!与Word、PPT等常用软件无缝对接。

MathType&#xff0c;一款专业的数学公式编辑器&#xff0c;以其强大的功能和友好的用户界面&#xff0c;在科研、教学等领域广受欢迎。它支持丰富的数学符号和公式模板&#xff0c;满足不同用户的需求。同时&#xff0c;MathType还提供了多种输出格式&#xff0c;方便与其他文…

3ds Max导出fbx贴图问题简单记录

1.前言 工作中发现3ds Max导出的fbx在其它软件&#xff08;Autodesk viewer&#xff0c;blender&#xff0c;navisworks&#xff0c;FBXReview等&#xff09;中丢失了部分贴图&#xff0c;但导出的fbx用3ds Max打开却正常显示。 fbx格式使用范围较广&#xff0c;很多常见的三…

如何用Go语言,实现基于宏系统的解释器?

目录 一、Go语言介绍二、什么是宏系统三、什么是解释器四、如何用Go语言实现一个基于宏系统的解释器&#xff1f; 一、Go语言介绍 Go语言&#xff0c;又称为Golang&#xff0c;是一种由谷歌公司开发并开源的编程语言。Go语言的设计目标是提高程序员的生产力&#xff0c;同时具…

树莓派开发之文件传输

文章目录 一、简介使用U盘传输文件使用SD卡传输文件使用Xftp 7传输文件 二、 总结 一、简介 在树莓派开发中经常会用到文件传输&#xff0c;下面介绍几种树莓派文件传输的几种方法。 使用U盘传输文件 &#xff08;1&#xff09;复制所需传输文件到U盘 &#xff08;2&#…

详细介绍MySQL的索引(上)

索引 索引概述 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用(指向数据&#xff0c;这样就可以在这些数据结构上实现高级查找算法&#xff0c;这种数据结…

【计算机图形学】期末考试知识点汇总(上)

文章目录 视频教程第一章 计算机图形学概述计算机图形学的定义计算机图形学的应用计算机图形学 vs 图像处理 vs模式识别图形显示器的发展及工作原理理解三维渲染管线 第二章 基本图元的扫描转换扫描转换直线的扫描转换DDA算法Bresenham算法中点画线算法圆的扫描转换中点画圆算法…

json文件 增删查改

默认收藏夹 qt操作json格式文件... 这个人的 写的很好 我的demo全是抄他的 抄了就能用 —————————— 下次有空把我的demo 传上来 在E盘的demo文件夹 json什么名字

小迪安全v2023笔记 1-18

小迪安全v2023笔记 1-18 棱角社区 文章目录 1. 基础入门1. 正向shell与反向shell2. web应用3. 抓包&#xff0c;封包&#xff0c;协议&#xff0c;app&#xff0c;小程序&#xff0c;pc应用&#xff0c;web应用 2. 信息打点1. 常见信息获取2. 文件泄露3. 常见阻碍4. CDN绕过&a…

二叉树第二期:堆的实现与应用

若对树与二叉树的相关概念&#xff0c;不太熟悉的同学&#xff0c;可移置上一期博客 链接&#xff1a;二叉树第一期&#xff1a;树与二叉树的概念-CSDN博客 本博客目标&#xff1a;对二叉树的顺序结构&#xff0c;进行深入且具体的讲解&#xff0c;同时学习二叉树顺序结构的应用…

电子电路学习笔记(3)三极管

部分内容参考链接&#xff1a; 电子电路学习笔记&#xff08;5&#xff09;——三极管_三极管 箭头-CSDN博客 模拟电子技术基础笔记&#xff08;4&#xff09;——晶体三极管_集电结的单向导电性-CSDN博客 硬件基本功-36-三极管Ib电流如何控制Ic电流_哔哩哔哩_bilibili 部分…