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

在学习和实践MindSpore神经网络模型构建的过程中,我深刻理解了MindSpore中如何通过nn.Cell类来构建和管理复杂的神经网络模型。通过这次的实践,我对神经网络的基本构建和应用有了更加全面的认识,以下是我学习过程中所总结的几点心得:

一、神经网络模型的基本构建

在MindSpore中,神经网络模型由神经网络层和Tensor操作构成。nn.Cell类是构建所有网络的基类,也是网络的基本单元。通过继承nn.Cell类并实现其__init__和construct方法,我们可以构建出各种复杂的神经网络结构。__init__方法用于进行子Cell的实例化和状态管理,而construct方法用于实现具体的Tensor操作。

例如,在构建一个用于Mnist数据集分类的神经网络模型时,我们定义了一个Network类,继承了nn.Cell。在__init__方法中,我们实例化了Flatten和SequentialCell子类,并在SequentialCell中定义了多层全连接层和激活函数ReLU。最后在construct方法中,实现了数据从输入到输出的完整流动过程。

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
二、模型实例化与结构查看

在完成模型构建后,我们可以通过实例化Network对象来查看其结构。通过print(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>>>
三、模型推理与输出

在实例化模型后,我们可以通过构造输入数据并直接调用模型来进行推理。需要注意的是,construct方法不可直接调用,我们可以直接通过模型实例来传入输入数据进行推理。通过这种方式,我们可以获得模型的输出Tensor。

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

通过进一步使用nn.Softmax层,我们可以将输出的logits值转化为预测概率,并通过argmax方法获得预测的类别。

pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")
四、逐层解析与理解

为了更好地理解神经网络的工作原理,我们可以逐层解析模型中的每一层。例如,我们可以构造一个shape为(3, 28, 28)的随机数据,并依次通过每一个神经网络层来观察其效果。

通过对nn.Flatten、nn.Dense、nn.ReLU等层的逐层解析,我们可以清晰地看到数据在每一层的变化过程。这对于我们理解神经网络的内部工作原理非常有帮助。

input_image = ops.ones((3, 28, 28), mindspore.float32)
flatten = nn.Flatten()
flat_image = flatten(input_image)
print(flat_image.shape)layer1 = nn.Dense(in_channels=28*28, out_channels=20)
hidden1 = layer1(flat_image)
print(hidden1.shape)hidden1 = nn.ReLU()(hidden1)
print(hidden1)
五、模型参数管理

神经网络中的每一层(如nn.Dense)都具有权重参数和偏置参数。这些参数会在训练过程中不断进行优化。我们可以通过model.parameters_and_names()来获取模型中所有参数的名称及其详细信息。

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

通过这次学习和实践,我掌握了在MindSpore中构建神经网络模型的基本方法和技巧。通过对模型逐层解析和参数管理的深入理解,我不仅提高了对神经网络内部工作原理的认识,也增强了实际操作的能力。这为我今后在深度学习领域的研究和应用打下了坚实的基础。
在这里插入图片描述

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

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

相关文章

【MySQL】根据binlog日志获取回滚sql的一个开发思路

根据binlog日志获取回滚sql的一个开发思路 需要获取的信息 thread_id 打开 mysql 客户端 开始时间 关闭 mysql 客户端 结束时间 binlog 匹配流程 指定 mysql 客户端 开始时间和结束时间 先匹配 thread_id 相同的 然后匹配 ^BEGIN$行和 ^COMMIT/*!*/;$行之间的数据 当匹…

c++端的类,作为组件在qml端使用

qml使用c端的类&#xff0c;作为组件在qml端使用 这个类必须继承QObject 这个类必须继承QObject #ifndef COLLISIONALARM_H #define COLLISIONALARM_H#include <QObject>class CollisionAlarm : public QObject {Q_OBJECT//这个宏就叫做反射机制&#xff0c;让qml端直接…

科普文:云计算服务类型IaaS, PaaS, SaaS, BaaS, Faas说明

概叙 基本概念 IaaS, PaaS, SaaS, BaaS, 和 FaaS 是云计算服务的不同类型&#xff0c;‌它们各自提供了不同的服务层次和功能。‌ IaaS (Infrastructure as a Service基础设施即服务) 提供基础设施服务&#xff0c;‌包括服务器、‌存储、‌网络等硬件资源。‌用户可以在这些…

Linux嵌入式学习——数据结构——概念和Seqlist

数据结构 相互之间存在一种或多种特定关系的数据元素的集合。 逻辑结构 集合&#xff0c;所有数据在同一个集合中&#xff0c;关系平等。 线性&#xff0c;数据和数据之间是一对一的关系。数组就是线性表的一种。 树&#xff0c; 一对多 图&#xff0c;多对多 …

项目策划不再愁,可道云teamOS流程图助你轻松上阵

在当今这个快节奏、高协同的工作环境中&#xff0c;每一项任务的推进都离不开清晰、高效的沟通与规划。 在线流程图工具&#xff0c;作为数字时代团队协作的得力助手&#xff0c;以其直观易懂的呈现方式、灵活多变的编辑功能&#xff0c;极大地简化了复杂项目的策划与执行流程…

ip地址设置了重启又改变了怎么回事

在数字世界的浩瀚星海中&#xff0c;IP地址就如同每个设备的“身份证”&#xff0c;确保它们在网络中准确无误地定位与通信。然而&#xff0c;当我们精心为设备配置好IP地址后&#xff0c;却时常遭遇一个令人费解的现象&#xff1a;一旦设备重启&#xff0c;原本设定的IP地址竟…

线程池超载求生指南:四大拒绝策略应对并发挑战(Java线程池拒绝策略全解析)

文章目录 线程池拒绝策略&#xff1a;优雅处理过载请求什么是线程池拒绝策略&#xff1f;内置的拒绝策略代码示例创建一个简单的线程池使用 AbortPolicy使用 CallerRunsPolicy使用 DiscardPolicy使用 DiscardOldestPolicy 通俗易懂地理解这些拒绝策略自定义拒绝策略总结 线程池…

5.Fabric的共识机制

在Fabric中,有以下3中典型共识机制。 Solo共识 solo共识机制只能用于单节点模式,即只能有一个Orderer节点,因此,其共识过程很简单,每接收到一个交易信息,就在共识模块的控制下产生区块并广播给节点存储到账本中。 Solo 模式下的共识只适用于一个Orderer节点,所以可以在…

C/C++ 内存管理

C/C 内存管理 1. C/C内存分布2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free3. C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4. operator new与operator delete函数&#xff08;重要点进行讲解&#xff09;4.1 operator new与o…

【Java】:洗牌功能和杨辉三角的实现

洗牌 此操作包含的基本功能有&#xff1a; 组牌&#xff1a;组建 52 张扑克牌 四种花色&#xff1a;“♥️”&#xff0c;“♠️”&#xff0c;“⬛️”&#xff0c;“♣️”每种花色 13 张牌&#xff1a;1~13 洗牌&#xff1a;将 52 张扑克牌打乱顺序发牌&#xff1a;给三个人…

【深度学习入门篇 ⑪】自注意力机制

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

C#进阶:深入理解异步编程与并发

在现代软件开发中&#xff0c;异步编程和并发控制是不可或缺的技能。随着应用程序变得越来越复杂&#xff0c;对性能、响应性和可扩展性的要求也越来越高。C#提供了强大的工具来支持异步编程和并发处理&#xff0c;如async和await关键字、Task Parallel Library&#xff08;TPL…

Vue3 SvgIcon组件开发

在前面自定义tree组件继续功能迭代前&#xff0c;我们先开发一个通用的ScgIcon组件&#xff0c;用于后续组件模板中小图标的展示。 引入iconfont 官网&#xff1a;https://www.iconfont.cn/ 选取图标进行下载&#xff0c;只取iconfont.js文件 在prettier中忽略该文件&#x…

【YOLOv5/v7改进系列】引入CoordConv——坐标卷积

一、导言 与标准卷积层相比&#xff0c;CoordConv 的主要区别在于它显式地考虑了位置信息。在标准卷积中&#xff0c;卷积核在输入上滑动时&#xff0c;仅关注局部区域的像素强度&#xff0c;而忽略其绝对位置。CoordConv 通过在输入特征图中添加坐标信息&#xff0c;使得卷积…

【常用知识点-Linux】查询端口情况

Author&#xff1a;赵志乾 Date&#xff1a;2024-07-22 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 简介 ss命令为socket statistics的缩写&#xff0c;是Linux的一个网络管理命令&#xff0c;主要用于获取系统中socket的统计信息&am…

[C/C++入门][for]26、统计满足条件的4位数(循环经典练习)

给定若干个四位数&#xff0c;求出其中满足以下条件的数的个数&#xff1a;个位数上的数字减去千位数上的数字&#xff0c;再减去百位数上的数字&#xff0c;再减去十位数上的数字的结果大于零。 【输入】 输入为两行&#xff0c;第一行为四位数的个数n&#xff0c;第二行为n个…

【SpringBoot】第3章 系统配置之日志配置

SpringBoot自带spring-boot-starter-logging库来实现系统日志功能&#xff0c;spring-boot-starter-logging组件默认使用LogBack日志记录工具。系统运行日志默认输出到控制台&#xff0c;也能输出到文件中。下面通过示例来演示SpringBoot项目配置日志的功能。 修改pom.xml文件…

校园招聘 之 Java HashMap

校园招聘与社会招聘在多个方面存在显著的区别&#xff0c;这些区别主要体现在招聘对象、招聘目的、招聘方式、招聘周期、招聘成本以及入职后的发展等方面。校招也更注重理论知识&#xff0c;俗称八股文&#xff0c;其实有些东西为什么一直拿来问&#xff0c;其实这里面你仔细品…

速盾:cdn技术实现原理是什么?

CDN技术&#xff08;内容分发网络&#xff09;是一种通过将内容部署到离用户更近的服务器上&#xff0c;从而提高网站访问速度和用户体验的技术。它的实现原理主要包括以下几个步骤&#xff1a; 域名解析&#xff1a;用户输入网址&#xff0c;浏览器首先向DNS服务器发送域名解析…

STM32CubeIDE(CAN)

目录 一、概念 1、简述 2、CAN 的几种模式 二、实践 1、环回模式轮询通信 1.1 软件配置 1.2 代码编写 2、环回模式中断通信 2.1 软件配置 2.2 代码编写 一、概念 1、简述 STM32微控制器系列包含多个型号&#xff0c;其中一些型号集成了CAN&#xff08;Controller Are…