昇思25天学习打卡营第5天|网络与模型相关要素探讨

目录

从 MindSpore 模块中导入nn和ops

定义模型类

模型层

nn.Flatten

nn.Dense

nn.ReLU

nn.SequentialCell

nn.Softmax

模型参数


从 MindSpore 模块中导入nn和ops


        将 MindSpore 整个模块引入到当前的 Python 脚本里,方便后续运用 MindSpore 所提供的各类功能与类。从 MindSpore 模块中单独导入“nn”(一般代表神经网络相关的类和函数)以及“ops”(通常指操作符相关的功能),如此一来,在后续的代码中就能够直接使用“nn”和“ops”,而无需添加“mindspore.”这个前缀,让代码变得更加简洁、更易于阅读。

        代码如下:

import mindspore  
from mindspore import nn, ops  

定义模型类


        当我们定义神经网络时,可以继承nn.Cell类,在__init__方法中进行子Cell的实例化和状态管理,在construct方法中实现Tensor操作。

        代码如下:

#用 MindSpore 框架定义了一个名为 Network 的类,它继承自 nn.Cell  
class Network(nn.Cell):  #在 __init__ 方法(构造函数)中进行了一些初始化操作  def __init__(self):  #用于调用父类(即 nn.Cell )的构造函数。  super().__init__()  #定义了 flatten 为 nn.Flatten 对象。  self.flatten = nn.Flatten()  #定义了 dense_relu_sequential 为一个包含多层全连接层(nn.Dense )和激活函数(nn.ReLU )的序列。  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")  )  #construct 方法用于定义前向传播的计算过程。  def construct(self, x):  x = self.flatten(x)  logits = self.dense_relu_sequential(x)  return logits  
#然后创建了 Network 类的实例 model ,并打印出 model 的相关信息。  
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输出,其包含每个类别的原始预测值。

        代码如下:

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

        分析:在这段代码里,“X = ops.ones((1, 28, 28), mindspore.float32)”创建了一个 3 维的张量 X,其中所有元素都是 1,形状为(1, 28, 28),数据类型是 mindspore.float32。

        “logits = model(X)” 表示将这个 X 作为输入传递给之前定义的名为 model 的模型进行计算,计算得到的结果被存储在 logits 变量中。

        所以,这里的“logits”指的是模型对特定输入 X 进行处理和计算后所产生的输出值。

        运行结果:

        Tensor(shape=[1, 10], dtype=Float32, value=

        [[ 4.24947031e-03, -3.66483117e-03, -2.42522405e-03 ... -5.67489350e-03, -8.09418689e-03,  3.98061844e-03]])

        在此基础上,我们通过一个nn.Softmax层实例来获得预测概率。

        代码如下:

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

        分析:pred_probab = nn.Softmax(axis=1)(logits) 对 logits 进行 Softmax 运算,沿着第 1 个维度(通常是类别维度)计算概率分布,结果存储在 pred_probab 中。

        y_pred = pred_probab.argmax(1) 从计算得到的概率分布 pred_probab 中,沿着第 1 个维度找出最大值的索引,将结果存储在 y_pred 中。

        print(f"Predicted class: {y_pred}") 打印出预测的类别,即 y_pred 的值。

        总的来说,这段代码是对模型的输出 logits 进行处理,得到预测的类别并打印输出。

        运行结果:

        Predicted class: [5]

模型层


        首先我们构造一个shape为(3, 28, 28)的随机数据(3个28x28的图像),依次通过每一个神经网络层来观察其效果。

        代码如下:

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

        分析:首先使用 ops 中的 ones 函数创建一个元素全为 1 的张量 input_image ,这个张量的形状是 (3, 28, 28) ,数据类型是 mindspore.float32 。然后使用 print 函数输出这个张量的形状。

        ops.ones((3, 28, 28), mindspore.float32) 表示创建一个 3 维的张量,第一个维度大小为 3,第二个维度大小为 28,第三个维度大小为 28,并且元素值都为 1,数据类型为单精度浮点数。

        print(input_image.shape) 用于打印出 input_image 张量的形状信息。

        运行结果:

        (3, 28, 28)

nn.Flatten

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

        代码如下:

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

        分析:首先,创建了一个名为 flatten 的对象,它是由 nn 模块中的 Flatten 类实例化得到的。Flatten 通常用于将多维的输入张量展平为一维。

        然后,使用这个 flatten 对象对 input_image 进行处理,得到展平后的张量 flat_image 。

        最后,打印出 flat_image 的形状。

        总的来说,这段代码的目的是将一个多维的张量 input_image 展平,并查看展平后的形状。

        运行结果:

        (3, 784)

nn.Dense

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

        代码如下:

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

        分析:首先,创建了一个名为 layer1 的全连接层(Dense 层)对象。该层的输入通道数(in_channels)为 28*28 ,输出通道数(out_channels)为 20。

        然后,将展平后的张量 flat_image 作为输入传递给这个全连接层 layer1 ,得到输出张量 hidden1 。

        最后,打印出 hidden1 的形状。

        这段代码主要是构建了一个全连接层,并对输入数据进行处理,以观察输出的形状特征。

        运行结果:

        (3, 20)

nn.ReLU

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

        代码如下:

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

        分析:首先,使用格式化字符串 f-string 打印出一条信息 Before ReLU: {hidden1}\n\n ,其中 {hidden1} 会被 hidden1 的值替换。\n\n 表示两个换行符,用于在输出中增加一些空白行。

        接下来,将 hidden1 作为输入传递给 nn.ReLU() 激活函数进行处理,并将处理后的结果再次赋值给 hidden1 。

        最后,再次使用 f-string 打印出信息 After ReLU: {hidden1} ,展示经过 ReLU 激活函数处理后的 hidden1 的值。

        总的来说,这段代码的目的是先打印出激活前的 hidden1 的值,然后对其应用 ReLU 激活函数,再打印出激活后的结果。

        运行结果:

#先打印  
Before ReLU: [[ 0.3087794   0.9850689  -0.4070658  -0.701891    0.18653367  0.33947796  0.16613327 -0.09155615 -0.24978569 -0.4789814  -0.15506613  0.15600255  -0.25922856  0.89553624  0.4162153  -0.1209818  -1.3496804  -1.0204036  0.36344895  0.10704644]  [ 0.3087794   0.9850689  -0.4070658  -0.701891    0.18653367  0.33947796  0.16613327 -0.09155615 -0.24978569 -0.4789814  -0.15506613  0.15600255  -0.25922856  0.89553624  0.4162153  -0.1209818  -1.3496804  -1.0204036  0.36344895  0.10704644]  [ 0.3087794   0.9850689  -0.4070658  -0.701891    0.18653367  0.33947796  0.16613327 -0.09155615 -0.24978569 -0.4789814  -0.15506613  0.15600255  -0.25922856  0.89553624  0.4162153  -0.1209818  -1.3496804  -1.0204036  0.36344895  0.10704644]]  
#后打印  
After ReLU: [[0.3087794  0.9850689  0.         0.         0.18653367 0.33947796  0.16613327 0.         0.         0.         0.         0.15600255  0.         0.89553624 0.4162153  0.         0.         0.  0.36344895 0.10704644]  [0.3087794  0.9850689  0.         0.         0.18653367 0.33947796  0.16613327 0.         0.         0.         0.         0.15600255  0.         0.89553624 0.4162153  0.         0.         0.  0.36344895 0.10704644]  [0.3087794  0.9850689  0.         0.         0.18653367 0.33947796  0.16613327 0.         0.         0.         0.         0.15600255  0.         0.89553624 0.4162153  0.         0.         0.  0.36344895 0.10704644]] 

nn.SequentialCell

        nn.SequentialCell是一个有序的Cell容器。输入Tensor将按照定义的顺序通过所有Cell。我们可以使用nn.SequentialCell来快速组合构造一个神经网络模型。

        代码如下:

seq_modules = nn.SequentialCell(  flatten,  layer1,  nn.ReLU(),  nn.Dense(20, 10)  
)  
logits = seq_modules(input_image)  
print(logits.shape)  

        分析:创建了一个名为 seq_modules 的顺序模块(SequentialCell)对象,该模块依次包含了之前定义的 flatten(展平操作)、layer1(全连接层)、ReLU 激活函数和另一个全连接层 nn.Dense(20, 10)(输入大小为 20,输出大小为 10)。

        然后,将 input_image 作为输入传递给这个顺序模块 seq_modules ,得到输出 logits 。

        最后,打印出 logits 的形状。

        总的来说,这段代码构建了一个包含多个层的神经网络模块,并对输入图像进行处理,查看最终输出的形状。

        运行结果:

        (3, 10)

nn.Softmax

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

        代码如下:

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

        分析:首先,创建了一个 Softmax 激活函数对象 softmax ,并指定了在维度 1 上进行 Softmax 运算。

        然后,将之前得到的 logits 作为输入传递给这个 Softmax 激活函数,得到的结果赋值给 pred_probab 。

        Softmax 函数通常用于将输入值转换为概率分布,使得所有值都在 0 到 1 之间,并且总和为 1。在这种情况下,它将 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")  

        分析:首先,使用 f-string 打印出模型的结构信息,{model} 会被模型对象的相关描述替换。

        然后,通过遍历模型 model 的参数及其名称。对于每个参数,打印出参数所在的层的名称 name ,参数的形状 param.shape ,以及参数的前两个值 param[:2] 。

        总的来说,这段代码用于展示模型的结构以及每个层参数的一些基本信息,例如名称、形状和部分值。

        运行结果:

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.0009794   0.01165624  0.00053267 ... -0.00562098 -0.01562027  -0.00652531]  [ 0.02572156  0.00160113  0.00114276 ...  0.00846921  0.00206852  -0.00754631]]   Layer: dense_relu_sequential.0.bias  
Size: (512,)  
Values : [0. 0.]   Layer: dense_relu_sequential.2.weight  
Size: (512, 512)  
Values : [[ 0.00148492  0.00554596 -0.00087604 ... -0.00471109  0.02263027  -0.00198138]  [-0.01316851 -0.0110001  -0.03218061 ...  0.01434446  0.00147917  -0.0073973 ]]   Layer: dense_relu_sequential.2.bias  
Size: (512,)  
Values : [0. 0.]   Layer: dense_relu_sequential.4.weight  
Size: (10, 512)  
Values : [[ 0.00122466  0.01266199 -0.0085449  ...  0.00097986  0.00859538  0.00752004]  [-0.01058272  0.00683428  0.01345662 ...  0.00476388 -0.00335832  -0.01059606]]   Layer: dense_relu_sequential.4.bias  
Size: (10,)  
Values : [0. 0.]  

        打印时间:

import time
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()),"qianduanjidi")

        运行截图:

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

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

相关文章

基于python的房价多元线性回归分析

1.导入必要的库 import pandas as pd import numpy as np import statsmodels.api as sm from sklearn.model_selection import train_test_split from sklearn.metrics import r2_score import matplotlib.pyplot as plt # 忽略Matplotlib的警告&#xff08;可选&…

GP37-S-N、GP37-S-E、GP37-S-R比例电磁铁驱动放大器

比例阀用电磁铁EP45-C、EP37-E、EP45-G、EP45-N、GP37-3-A、GP37-S-N、GP37-S-E、GP37-S-R在直流12V/24V的电液比例控制系统中与BEUEC比例控制放大器配套使用&#xff0c;共同作用于比例阀的控制。电磁铁输出力通过负载弹簧转换成位移&#xff0c;实现电流-力-位移线性转换&…

.NET 矩阵6月红队工具和资源集合

01外网入口打点 1.1 Sharp4WbemScripting 1.2 ASP4Eval 1.3 Sharp4Web.config 1.4 Sharp4AddScript 02安全防御绕过 2.1 Sharp4DefenderStop 03搭建代理隧道 3.1 Sharp4suo5 04混淆加密防护 4.1 Obfuscar混淆器 4.2 Sharp4BatchGuard 05安全技术文档 5.1 .NET 通过Junction Fol…

基于flask的闪现、g对象、蓝图

【 一 】闪现&#xff08;flash&#xff09; # 1 flask中得闪现存放数据的地方&#xff0c;一旦取了&#xff0c;数据就没了-实现跨请求间传递数据 # 2 django中有没有类似的东西&#xff1f;message 消息框架# 3 基本使用1 设置&#xff1a;flash(欢迎你、欢迎来到澳门赌场&a…

AI绘画Stable Diffusion 高清放大,多种方法详解,建议收藏!

&#x1f463; 本章概述 在Stable Diffusion我们想要得到一张高分辨率且具有细节特征的图片时&#xff0c;我们就需要使用一些图片放大算法来帮助我们实现。 本文主要概述在sd中常常使用的高清修复方法以及不同方法的区别和应用场景。同时也给出一些推荐的工作流&#xff0c;你…

理解MySQL核心技术:外键的概念作用和应用实例

引言 在数据库管理系统&#xff08;DBMS&#xff09;中&#xff0c;外键&#xff08;Foreign Key&#xff09;是维持数据一致性和实现数据完整性的重要工具。本文将详细介绍MySQL外键的基本概念、作用&#xff0c;以及相关的操作指南和应用实例&#xff0c;帮助读者掌握并灵活…

YOLOv8的5种不同部署方式推理速度对比:Pytorch、ONNX、OpenVINO-FP32、OpenVINO-int8、TensorRT

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

FatFs(文件系统)

1官网 FatFs - 通用 FAT 文件系统模块 (elm-chan.org) FatFs 是用于小型嵌入式系统的通用 FAT/exFAT 文件系统模块。FatFs 模块是按照 ANSI C &#xff08;C89&#xff09; 编写的&#xff0c;并且与磁盘 I/O 层完全分离。因此&#xff0c;它独立于平台。它可以集成到资源有限…

华为智能驾驶方案剖析

华为ADS智驾方案始终坚持激光雷达毫米波雷达摄像头的多传感器融合路线&#xff0c;行业降本压力下硬件配置从超配逐步转向贴合实际需求&#xff0c;带动整体硬件成本下降。 1)单车传感器数量呈现下降趋势&#xff0c;包括激光雷达从3个减配至1个、毫米波雷达从6R减配至3R、摄像…

【硬件开发】安规电容X电容和Y电容

为什么有安规电容 国家为了保护人民的安全要求&#xff0c;电容器失效后&#xff0c;不会导致电击&#xff0c;不危及人身安全的安全电容器 安规电容的作用 滤除雷电冲击波&#xff0c;以及插拔插座的高频噪声 X电容 聚酯电容 位置 X电容位于火线和零线之间 作用 滤除…

Swift 中更现代化的调试日志系统趣谈(二)

概述 在上篇 Swift 中更现代化的调试日志系统趣谈(一) 博文中,我们初步讨论了如何利用 Swift OSLog 框架中的 Logger 日志记录器替代“简陋”的 print 方法来记录我们的调试消息。 而接下来我们会再接再厉,继续调试日志系统的进一步介绍。 在本篇博文中,您将学到如下内容…

timm中模型更换huggingface模型链接

现在timm默认使用huggingface的链接了&#xff0c;错误链接如下&#xff1a; (MaxRetryError("HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /timm/swinv2_tiny_window8_256.ms_in1k/resolve/main/model.safetensors (Caused by C…

MySQL:表的内连接和外连接、索引

文章目录 1.内连接2.外连接2.1 左外连接2.2 右外连接 3.综合练习4.索引4.1见一见索引4.2 硬件理解4.3 MySQL 与磁盘交互基本单位(软件理解)4.4 (MySQL选择的数据结构)索引的理解4.5 聚簇索引 VS 非聚簇索引 5.索引操作5.1 创建索引5.2 查询索引5.3 删除索引 1.内连接 内连接实…

Keepalive技术

文章目录 一、Keepalive基础vrrp技术Keepalived介绍Keepalived架构 二、 Keepalived 相关文件配置文件组成全局配置虚拟路由器配置 三、配置lvs和keepalive联动服务器架构抢占模式配置配置单播、组播配置通知模块日志功能脑裂现象 四、keepalived和nginx联动keepalive和其他应用…

嵌入式Linux系统编程 — 5.5 sleep、usleep和nanosleep系统休眠函数

目录 1 为什么需要休眠 2 sleep、usleep和nanosleep函数 2.1 sleep函数 2.2 usleep函数 2.3 nanosleep函数 3 示例程序 1 为什么需要休眠 有时需要将进程暂停或休眠一段时间&#xff0c; 进入休眠状态之后&#xff0c;程序将暂停运行&#xff0c;直到休眠结束。 以下是一…

Is ChatGPT a Good Personality Recognizer? A Preliminary Study?

ChatGPT是一个很好的人格识别者吗&#xff1f;初步调研 摘要1 介绍2 背景和相关工作3 实验3.1 数据集3.2 提示策略3.3 基线3.4 评估指标3.5 实现细节3.6 Overall Performance (RQ1)3.7 ChatGPT在人格识别上的公平性 (RQ2)3.8 ChatGPT对下游任务的人格识别能力&#xff08;RQ3&a…

javaEE——Servlet

1.web开发概述 所谓web开发,指的是从网页中向后端程序发送请求,与后端程序进行交互 2.java后端开发环境搭建 web后端(javaEE)程序需要运行在服务器中的&#xff0c;这样前端才可以访问得到 3.服务器是什么&#xff1f; ①服务器就是一款软件&#xff0c;可以向其发送请求&#…

深入解析HDFS:定义、架构、原理、应用场景及常用命令

引言 Hadoop分布式文件系统&#xff08;HDFS&#xff0c;Hadoop Distributed File System&#xff09;是Hadoop框架的核心组件之一&#xff0c;它提供了高可靠性、高可用性和高吞吐量的大规模数据存储和管理能力。本文将从HDFS的定义、架构、工作原理、应用场景以及常用…

【UML用户指南】-24-对高级行为建模-进程和线程

目录 1、概念 2、主动类 3、通信 4、同步 5、常用建模技术 5.1、对多控制流建模 5.2、对进程间通信建模 在UML中&#xff0c;可以将每一个独立的控制流建模为一个主动对象&#xff0c;它代表一个能够启动控制活动的进程或线程。 进程是一个能与其他进程并发执行的重量级…

2024新版大屏互动微信上墙源码大屏互动神器年会婚庆微现场3D签到

2024年大屏幕互动源码动态背景图和配乐素材搭建教程 php宝塔搭建部署活动现场大屏幕互动系统php源码&#xff0c;可以用来构建具有互动功能的大屏幕系统&#xff0c;为活动现场提供各种互动体验。 修复版的系统源码在原有功能的基础上&#xff0c;增加了更加完善的用户体验和稳…