当前位置: 首页 > news >正文

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

 一、简介:

神经网络模型是由神经网络层和Tensor操作构成的,mindspore.nn提供了常见神经网络层的实现,在MindSpore中,Cell类是构建所有网络的基类(这个类和pytorch中的modul类是一样的作用),也是网络的基本单元。一个神经网络模型表示为一个Cell,它由不同的子Cell构成。使用这样的嵌套结构,可以简单地使用面向对象编程的思维,对神经网络结构进行构建和管理。

二、环境准备:

import mindspore
import time
from mindspore import nn, ops

没有下载mindspore的宝子,还是回看我的昇思25天学习打卡营第1天|快速入门-CSDN博客,先下载好再进行下面的操作。

三、神经网络搭建:

1、定义模型类:

我们首先要继承nn.Cell类,并再__init__方法中进行子Cell的实例化和管理,并再construct方法(和pytorch中的forward方法一致)中实现前向计算:

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)
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), "VertexGeek")

 ①self.flatten = nn.Flatten():创建一个Flatten层,并将其作为类的属性。Flatten层的作用是将输入的数据“压平”,即不管输入数据的原始形状如何,输出都将是沿着特定维度的连续数组。

② self.dense_relu_sequential = nn.SequentialCell(...):创建一个SequentialCell,它是一种特殊的Cell,可以顺序地执行其中包含的多个层。这个SequentialCell包含了三个全连接层(Dense),每个全连接层后面跟着一个ReLU激活函数层,除了最后一个全连接层:

  • 第一个nn.Dense(28*28, 512, weight_init="normal", bias_init="zeros"):这是一个全连接层,它接受28*28=784个输入,并产生512个输出。权重(weight_init)和偏置(bias_init)分别使用正态分布和零值进行初始化。

  • nn.ReLU():ReLU激活函数,其数学表达式为f(x) = max(0, x),即负值输出为零,正值保持不变。

  • 接下来的两个nn.Dense与对应的nn.ReLU层与第一个类似,它们分别接收512个输入并再次输出512个值,以及最终输出10个值,这可能对应于10个类别。

我们构造一个数据,并使用softmax预测其概率:

X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
# print logits
print(logits)pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), "VertexGeek")

2、模型层详解:

(1)nn.Flatten:

 nn.Flantten方法用于将输入数据“压平”,以便后续处理:

input_image = ops.ones((3, 28, 28), mindspore.float32)
print(input_image.shape)flatten = nn.Flatten()
flat_image = flatten(input_image)
print(flat_image.shape)print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), "VertexGeek")

(2)nn.Dense:

 nn.Dense层作为全连接层,用于对输入的数据进行线性变换和处理:

layer1 = nn.Dense(in_channels=28*28, out_channels=20)
hidden1 = layer1(flat_image)
print(hidden1.shape)print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), "VertexGeek")

(3)nn.Relu:

nn.Relu是本次实验中使用的激活函数,用于对神经网络的权重进行处理,以缓解欠拟合和过拟合的发生,常见的激活函数处了Relu,还有:Sigmoid, Tanh等:

print(f"Before ReLU: {hidden1}\n\n")
hidden1 = nn.ReLU()(hidden1)
print(f"After ReLU: {hidden1}")print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), "VertexGeek")

 (4)nn.SequentialCell:

nn.SequentialCell和pytorch中的nn.Sequential的作用一样,用于存放dense全连接层和激活函数层的组合,以方便在前向计算中使用:

seq_modules = nn.SequentialCell(flatten,layer1,nn.ReLU(),nn.Dense(20, 10)
)logits = seq_modules(input_image)
print(logits.shape)print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), "VertexGeek")

(5)nn.Softmax:

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

softmax = nn.Softmax(axis=1)
pred_probab = softmax(logits)
print(pred_probab)
# argmax函数返回指定维度上最大值的索引
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), "VertexGeek")

3、模型参数:

网络内部神经网络层具有权重参数和偏置参数(如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")print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), "VertexGeek")

 

相关文章:

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

一、简介: 神经网络模型是由神经网络层和Tensor操作构成的,mindspore.nn提供了常见神经网络层的实现,在MindSpore中,Cell类是构建所有网络的基类(这个类和pytorch中的modul类是一样的作用),也是…...

Python开发日记--手撸加解密小工具(2)

目录 1. UI设计和代码生成 2.运行代码查看效果 3.小结 1. UI设计和代码生成 昨天讨论到每一类算法设计为一个Tab,利用的是TabWidget,那么接下来就要在每个Tab里设计算法必要的参数了,这里我们会用到组件有Label、PushButton、TextEdit、Ra…...

一文看懂TON链

一、背景与起源 The Open Network (TON) 的故事起始于2018年,当时全球知名的即时通讯软件Telegram计划推出自己的区块链平台及加密货币Gram,旨在构建一个既安全又高速的分布式网络,用以支持下一代去中心化应用程序(DApps)和数字资产。然而&a…...

(南京观海微电子)——TFT LCD压合技术

TFT-LCD TFT-LCD open cell后段制程主要指的是将驱动IC和PCB压合至液晶板上,这个制程主要由三个步骤组成: 1.ACF (Anisotropic Conductive Film)的涂布。 在液晶板需要压合驱动IC的地方涂布ACF,ACF又称异方性导电胶膜,特点是上下…...

神经网络实战1-Sequential

链接:https://pytorch.org/docs/1.8.1/generated/torch.nn.Sequential.html#torch.nn.Sequential 完成这样一个网络模型 第一步新建一个卷积层 self.conv1Conv2d(3,32,5)#第一步将33232输出为32通道,卷积核5*5 注意一下:输出通道数等于卷积…...

Java中如何优化数据库查询性能?

Java中如何优化数据库查询性能? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Java中如何优化数据库查询性能,这是…...

从0开发一个Chrome插件:用户反馈与更新 Chrome 插件

前言 这是《从0开发一个Chrome插件》系列的第二十二篇文章,也是最终篇,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发…...

Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接

在进行参数化读取时发现一个问题&#xff1a; 发现问题&#xff1a; requests.exceptions.ConnectionError: HTTPConnectionPool(hostlocalhost, port8081): Max retries exceeded with url: /jwshoplogin/user/update_information.do (Caused by NewConnectionError(<url…...

基于Java作业管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…...

使用Kafka框架发送和接收消息(Java示例)

Kafka是一个开源的分布式流处理平台&#xff0c;以其在大数据和实时处理领域的广泛应用而闻名。以下是Kafka的关键特性以及它在消息传输方面的优势&#xff1a; 高吞吐量与低延迟&#xff1a;Kafka能够每秒处理数百万条消息&#xff0c;具有极低的延迟&#xff0c;这使得它非常…...

高可用电商支付架构设计方案

高可用电商支付架构设计 在现代电商业务中&#xff0c;支付过程是其中至关重要的一环&#xff0c;一个高可用、安全稳定的支付架构不仅可以提高整个系统的可靠性和扩展性&#xff0c;降低维护成本&#xff0c;还可以优化用户体验&#xff0c;增加用户黏性。 本文将提出一种高…...

PriorityQueue详解(含动画演示)

目录 PriorityQueue详解1、PriorityQueue简介2、PriorityQueue继承体系3、PriorityQueue数据结构PriorityQueue类属性注释完全二叉树、大顶堆、小顶堆的概念☆PriorityQueue是如何利用数组存储小顶堆的&#xff1f;☆利用数组存储完全二叉树的好处&#xff1f; 4、PriorityQueu…...

python 字符串驻留机制

偶然发现一个python字符串的现象&#xff1a; >>> a 123_abc >>> b 123_abc >>> a is b True >>> c abc#123 >>> d abc#123 >>> c is d False 这是为什么呢&#xff0c;原来它们的id不一样。 >>> id(a)…...

express+vue 在线五子棋(一)

示例 在线体验地址五子棋&#xff0c;记得一定要再拉个人才能对战 本期难点 1、完成了五子棋的布局&#xff0c;判断游戏结束 2、基本的在线对战 3、游戏配套im(这个im的实现&#xff0c;请移步在线im) 下期安排 1、每步的倒计时设置 2、黑白棋分配由玩家自定义 3、新增旁观…...

AI 大模型企业应用实战(06)-初识LangChain

LLM大模型与AI应用的粘合剂。 1 langchain是什么以及发展过程 LangChain是一个开源框架&#xff0c;旨在简化使用大型语言模型构建端到端应用程序的过程&#xff0c;也是ReAct(reasonact)论文的落地实现。 2022年10月25日开源 54K star 种子轮一周1000万美金&#xff0c;A轮2…...

JavaScript的学习之旅之初始JS

目录 一、认识三个常见的js代码 二、js写入的第二种方式 三、js里内外部文件 一、认识三个常见的js代码 <script>//写入js位置的第一个地方// 控制浏览器弹出一个警告框alert("这是一个警告");// 在计算机页面输入一个内容&#xff08;写入body中&#xff…...

DataStructure.时间和空间复杂度

时间和空间复杂度 【本节目标】1. 如何衡量一个算法的好坏2. 算法效率3. 时间复杂度3.1 时间复杂度的概念3.2 大O的渐进表示法3.3 推导大O阶方法3.4 常见时间复杂度计算举例3.4.1 示例13.4.2 示例23.4.3 示例33.4.4 示例43.4.5 示例53.4.6 示例63.4.7 示例7 4.空间复杂度4.1 示…...

[Spring Boot]Netty-UDP客户端

文章目录 简述Netty-UDP集成pom引入ClientHandler调用 消息发送与接收在线UDP服务系统调用 简述 最近在一些场景中需要使用UDP客户端进行&#xff0c;所以开始集成新的东西。本文集成了一个基于netty的SpringBoot的简单的应用场景。 Netty-UDP集成 pom引入 <!-- netty --…...

基础C语言知识串串香11☞宏定义与预处理、函数和函数库

​ 六、C语言宏定义与预处理、函数和函数库 6.1 编译工具链 源码.c ——> (预处理)——>预处理过的.i文件——>(编译)——>汇编文件.S——>(汇编)——>目标文件.o->(链接)——>elf可执行程序 预处理用预处理器&#xff0c;编译用编译器&#xff0c;…...

Python 3 函数

Python 3 函数 引言 Python 是一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。在 Python 中,函数是一等公民,扮演着至关重要的角色。它们是组织代码、提高代码复用性和模块化编程的关键。本文将深入探讨 Python 3 中的函数,包括其定义、特性、类型以及最佳实践…...

Vibe coding对程序员的影响

一、深化核心能力数学与算法基础掌握离散数学、概率论等基础理论熟练应用动态规划、图论等算法范式示例&#xff1a;优化算法时间复杂度 O(n\log n)--O(n)系统设计能力理解计算机组成原理与操作系统机制构建高可用分布式系统&#xff08;如CAP定理&#xff09;二、适应技术演进…...

告别Cline!用Roo Code在VSCode里打造你的专属AI编程搭档(附扫雷游戏实战)

从Cline到Roo Code&#xff1a;VSCode智能编程助手的进化实战 如果你曾经使用过Cline这类AI编程助手&#xff0c;可能会对它们提供的代码补全和简单问答功能感到满意。但当项目复杂度上升时&#xff0c;这些基础功能往往显得力不从心。这就是为什么越来越多的开发者开始转向Roo…...

基于深度学习的FasterRCNN水下图像复原

项目概述&#xff1a;Waternet_FasterRCNN 本项目旨在结合深度学习技术进行水下图像的还原与分析&#xff0c;综合应用 WaterNet 和 Faster R-CNN 来完成以下功能&#xff1a; 水下图像还原&#xff1a;利用 WaterNet 修复和增强水下图像质量。色板检测与提取&#xff1a;通过 …...

STM32C8T6+AS608指纹模块实战:从接线到代码调试的全流程避坑指南

STM32C8T6AS608指纹模块实战&#xff1a;从接线到代码调试的全流程避坑指南 指纹识别技术正逐渐渗透到日常生活的各个角落&#xff0c;从手机解锁到门禁系统&#xff0c;这项技术为我们提供了便捷与安全的双重保障。对于嵌入式开发者而言&#xff0c;将指纹识别功能整合到自己的…...

【微知】Mellanox网卡配置异常?mlxconfig reset全解与实战场景指南

1. Mellanox网卡配置异常&#xff1f;先别慌 遇到Mellanox网卡配置异常时&#xff0c;很多工程师第一反应是重装驱动或者更换硬件。其实在大多数情况下&#xff0c;用对mlxconfig reset这个神器就能快速解决问题。我处理过上百台配备Mellanox网卡的服务器&#xff0c;发现80%的…...

源码级解耦:企业级 AI 视频平台的微服务架构设计与二次开发实战

引言&#xff1a;定制化需求的“最后一公里”难题 在安防 AI 项目的交付链条中&#xff0c;集成商和技术团队往往处于一个尴尬的境地&#xff1a;市面上的成熟 SaaS 平台虽然开箱即用&#xff0c;但缺乏核心的源码级定制能力&#xff0c;一旦遇到客户特殊的业务逻辑&#xff08…...

从采购到回款:拆解华为IFS如何用PTP/OTC流程优化缩短30天账期

华为IFS流程再造实战&#xff1a;如何通过PTP/OTC优化实现账期缩短30天 在供应链金融和财务运营领域&#xff0c;账期管理一直是企业现金流健康的关键指标。全球领先企业华为通过其集成财务服务&#xff08;IFS&#xff09;变革&#xff0c;特别是在采购到付款&#xff08;PTP&…...

森利威尔SL3041B替换LM5018 100V降压3.3V5V12V恒压芯片

在工业、汽车及电池供电的电子系统中&#xff0c;高压降压转换器的选择往往需要在性能、可靠性与成本之间取得平衡。传统上&#xff0c;LM5018等进口芯片凭借其高输入电压范围和稳定的性能占据一定市场&#xff0c;但随着国内半导体技术的成熟&#xff0c;国产替代方案已具备与…...

C语言:构造类型

内容提要构造类型结构体共用体/联合体构造类型数据类型基本类型/基础类型/简单类型整型短整型&#xff1a;short -- 2字节基本整型&#xff1a;int -- 4字节长整型&#xff1a;long -- 32位系统4字节/ 64位系统8字节长长整型&#xff1a;long long 8字节&#xff08;大多数现代…...

智能客服VS语音转写:不同场景下语音识别评估指标的选择指南

智能客服与语音转写&#xff1a;业务场景驱动的语音识别评估指标决策框架 当企业考虑部署语音识别系统时&#xff0c;技术团队常会抛出一堆专业术语&#xff1a;WER 15%、CER 8%、SER 22%...但对产品经理和解决方案架构师而言&#xff0c;这些数字背后意味着什么&#xff1f;选…...