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

【笔记】打卡01 | 初学入门

初学入门:01-02

  • 01 基本介绍
  • 02 快速入门
    • 处理数据集
    • ==网络构建==
    • 模型训练
    • 保存模型
    • 加载模型
    • 打卡-时间

01 基本介绍

MindSpore Data(数据处理层)
ModelZoo(模型库)
MindSpore Science(科学计算),包含了业界领先的数据集、基础模型、预置高精度模型和前后处理工具
MindSpore Insight(可视化调试调优工具),能够可视化地查看训练过程、优化模型性能、调试精度问题、解释推理结果

02 快速入门

import mindspore
from mindspore import nn
from mindspore.dataset import vision, transforms
from mindspore.dataset import MnistDataset

处理数据集

下载Mnist数据集

# Download data from open datasets
from download import downloadurl = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/" \"notebook/datasets/MNIST_Data.zip"
path = download(url, "./", kind="zip", replace=True)

在这里插入图片描述

训练集、测试集

train_dataset = MnistDataset('MNIST_Data/train')
test_dataset = MnistDataset('MNIST_Data/test')

在这里插入图片描述
列名:图片 和 对应标签(分类)

数据处理流水线(Data Processing Pipeline)

参数:数据集、batch_size

def datapipe(dataset, batch_size):image_transforms = [                    vision.Rescale(1.0 / 255.0, 0),vision.Normalize(mean=(0.1307,), std=(0.3081,)),vision.HWC2CHW()]label_transform = transforms.TypeCast(mindspore.int32)dataset = dataset.map(image_transforms, 'image')dataset = dataset.map(label_transform, 'label')dataset = dataset.batch(batch_size)return dataset

首先,数据变换(Transforms):1、对输入数据(即图片)2、对输出(即标签);
然后,map对图像数据及标签进行变换处理;
最后,将处理好的数据集打包为大小为64的batch

train_dataset = datapipe(train_dataset, 64)
test_dataset = datapipe(test_dataset, 64)

对数据集进行迭代访问

for data in test_dataset.create_dict_iterator():print(f"Shape of image [N, C, H, W]: {data['image'].shape} {data['image'].dtype}")print(f"Shape of label: {data['label'].shape} {data['label'].dtype}")break

网络构建

class Network(nn.Cell):def __init__(self):super().__init__()self.flatten = nn.Flatten()self.dense_relu_sequential = nn.SequentialCell(nn.Dense(28*28, 512),nn.ReLU(),nn.Dense(512, 512),nn.ReLU(),nn.Dense(512, 10))def construct(self, x):x = self.flatten(x)logits = self.dense_relu_sequential(x)return logitsmodel = Network()
print(model)

mindspore.nn类是构建所有网络的基类,也是网络的基本单元。

  • 自定义网络时,可以继承nn.Cell
  • __init__包含所有网络层的定义
  • construct(类似前向传播??)包含数据(Tensor)的变换过程。

模型训练

定义损失函数、优化器

loss_fn = nn.CrossEntropyLoss()
optimizer = nn.SGD(model.trainable_params(), 1e-2)

一个完整的训练过程(step)需要实现以下三步:

1. 正向计算:模型预测结果(logits),并与正确标签(label)求预测损失(loss)。
2. 反向传播:利用自动微分机制,自动求模型参数(parameters)对于loss的梯度(gradients)。
3. 参数优化:将梯度更新到参数上。

定义正向计算函数。

def forward_fn(data, label):logits = model(data)loss = loss_fn(logits, label)return loss, logits

使用value_and_grad通过函数变换获得梯度计算函数。

grad_fn = mindspore.value_and_grad(forward_fn, None, optimizer.parameters, has_aux=True)

one-step training

def train_step(data, label):(loss, _), grads = grad_fn(data, label)optimizer(grads)return loss

定义训练函数,使用set_train设置为训练模式,执行正向计算、反向传播和参数优化。

def train(model, dataset):size = dataset.get_dataset_size()model.set_train()for batch, (data, label) in enumerate(dataset.create_tuple_iterator()):loss = train_step(data, label)if batch % 100 == 0:loss, current = loss.asnumpy(), batchprint(f"loss: {loss:>7f}  [{current:>3d}/{size:>3d}]")

定义测试函数:用来评估模型的性能。

def test(model, dataset, loss_fn):num_batches = dataset.get_dataset_size()model.set_train(False)total, test_loss, correct = 0, 0, 0for data, label in dataset.create_tuple_iterator():pred = model(data)total += len(data)test_loss += loss_fn(pred, label).asnumpy()correct += (pred.argmax(1) == label).asnumpy().sum()test_loss /= num_batchescorrect /= totalprint(f"Test: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \n")

训练过程需多轮(epoch)训练数据集

epochs = 3
for t in range(epochs):print(f"Epoch {t+1}\n-------------------------------")train(model, train_dataset)test(model, test_dataset, loss_fn)
print("Done!")

在这里插入图片描述

保存模型

模型训练完成后,需要保存其参数。

mindspore.save_checkpoint(model, "model.ckpt")
print("Saved Model to model.ckpt")

加载模型

加载保存的权重

# 1、重新实例化模型对象,构造模型
model = Network()
# 加载模型参数,并将其加载至模型上。
param_dict = mindspore.load_checkpoint("model.ckpt")
param_not_load, _ = mindspore.load_param_into_net(model, param_dict)
print(param_not_load)

param_not_load是未被加载的参数列表,为空时代表所有参数均加载成功。

打卡-时间

from datetime import datetime
import pytz
# 设置时区为北京时区
beijing_tz = pytz.timezone('Asia/shanghai')
# 获取当前时间,并转为北京时间
current_beijing_time = datetime.now(beijing_tz)
# 格式化时间输出
formatted_time = current_beijing_time.strftime('%Y-%m-%d %H:%M:%S')
print("当前北京时间:",formatted_time,'your name')

相关文章:

【笔记】打卡01 | 初学入门

初学入门:01-02 01 基本介绍02 快速入门库处理数据集网络构建模型训练保存模型加载模型打卡-时间 01 基本介绍 MindSpore Data(数据处理层) ModelZoo(模型库) MindSpore Science(科学计算),包含…...

Rocky9使用cockpitweb登陆时root用户无法登陆

Rocky9使用cockpitweb登陆时root用户无法登陆 [rootlvs ~]# vim /etc/cockpit/disallowed-users [rootlvs ~]# systemctl restart cockpit 取消disallowed-users中的root,即可访问 ip:9090 登陆。...

微信小程序修改标题

要修改微信小程序页面的标题和调整字体大小,你需要对 app.json 和页面对应的 json 文件进行配置。 修改页面标题 打开 app.json 文件,找到 pages 字段,确认需要修改的页面路径。打开对应页面的 .json 文件(例如,pages/…...

Linux MySQL服务设置开机自启动

文章目录 前言简介一、准备工作二、操作步骤2.1 启动MySQL服务2.2 拷贝配置2.3 赋值权限2.4 添加为系统服务2.5 验证 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 提示:以下是本篇文章正文内容,下面案例…...

MacOS设备远程登录配置结合内网穿透实现异地ssh远程连接

文章目录 前言1. MacOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接MacOS3.1 MacOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接MacOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …...

国有企业如何提高人效比?

随着市场竞争的日益激烈,国有企业面临着越来越大的经营压力。为了提高经济效益和核心竞争力,国有企业越来越重视提高人效比。人效比,即企业总收益与员工总人数的比值,反映了企业每名员工所创造的平均收益。提高人效比意味着在相同…...

Leetcode - 周赛401

目录 一,3178. 找出 K 秒后拿着球的孩子 二,3179. K 秒后第 N 个元素的值 三,3180. 执行操作可获得的最大总奖励 I 四,3181. 执行操作可获得的最大总奖励 II 一,3178. 找出 K 秒后拿着球的孩子 本题可以直接模拟&a…...

Java | Leetcode Java题解之第171题Excel表列序号

题目: 题解: class Solution {public int titleToNumber(String columnTitle) {int number 0;int multiple 1;for (int i columnTitle.length() - 1; i > 0; i--) {int k columnTitle.charAt(i) - A 1;number k * multiple;multiple * 26;}ret…...

【uni-app学习手札】

uni-app(vue3)编写微信小程序 编写uni-app不必拘泥于HBuilder-X编辑器,可用vscode进行编写,在《微信开发者工具》中进行热加载预览, 主要记录使用uni-app过程中自我备忘一些api跟语法,方便以后编写查找使用…...

ASP.NET Core 中使用 Dapper 的 Oracle 存储过程输出参数

介绍 Oracle 数据库功能强大,在企业环境中使用广泛。在 ASP.NET Core 应用程序中使用 Oracle 存储过程时,处理输出参数可能具有挑战性。本教程将指导您完成使用 Dapper(适用于 . NET 的轻量级 ORM(对象关系映射器)&am…...

C++的动态内存分配

使用new/delete操作符在堆中分配/释放内存 //使用new操作符在堆中分配内存int* p1 new int;*p1 2234;qDebug() << "数字是&#xff1a;" << *p1;//使用delete操作符在堆中释放内存delete p1;在分配内存的同时初始化 //在分配内存的时初始化int* p2 n…...

【论文阅读】-- TSR-TVD:时变数据分析和可视化的时间超分辨率

TSR-TVD: Temporal Super-Resolution for Time-Varying Data Analysis and Visualization 摘要1 引言2 相关工作3 我们的循环生成方法3.1 损失函数3.2 网络架构 4 结果与讨论4.1 数据集和网络训练4.2 结果4.3 讨论 5 结论和未来工作致谢参考文献附录1 训练算法及优化2 网络分析…...

《web应用技术》第12次课后作业

1、了解servlet技术 Servlet(server applet)&#xff1a;运行在服务器的小程序&#xff0c;Servlet就是一个接口&#xff0c;定义了Java类被浏览器访问到的规则。将来我们自定义一个类&#xff0c;实现Servlet接口&#xff0c;复写方法。 Servlet本身不能独立运行&#xff0c…...

【初阶数据结构】深入解析带头双向循环链表:探索底层逻辑

&#x1f525;引言 本篇将介绍带头双向循环链表底层实现以及在实现中需要注意的事项&#xff0c;帮助各位在使用过程中根据底层实现考虑到效率上问题和使用时可能会导致的错误使用 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔…...

【面试干货】Java中的访问修饰符与访问级别

【面试干货】Java中的访问修饰符与访问级别 1、public2、protected3、默认&#xff08;没有访问修饰符&#xff09;4、private &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;访问修饰符用于控制类、变量、方法和构造器…...

Oracle最终还是杀死了MySQL

起因 大约15年前&#xff0c;Oracle收购了Sun公司&#xff0c;从而也拥有了MySQL&#xff0c;互联网上关于Oracle何时会“扼杀MySQL”的讨论此起彼伏。 当时流传着各种理论&#xff1a;从彻底扼杀 MySQL 以减少对 Oracle 专有数据库的竞争&#xff0c;到干掉 MySQL 开源项目&…...

【Python的随机数汇总】

​我们写python代码的时候&#xff0c;很少能用得上随机数&#xff0c;但是随机数有很多妙用。例如&#xff0c;在我们做测试数据集的时候&#xff0c;可以构建一个随机的dataframe&#xff1b; 或者在保存数据的时候&#xff0c;可以在每条数据前插入一列作为&#xff0c;不重…...

[状态压缩 广搜BFS]Saving Tang Monk

描述 《Journey to the West》(also 《Monkey》) is one of the Four Great Classical Novels of Chinese literature. It was written by Wu Chengen during the Ming Dynasty. In this novel, Monkey King Sun Wukong, pig Zhu Bajie and Sha Wujing, escorted Tang Monk to…...

Flutter 实现软鼠标

文章目录 前言一、如何实现&#xff1f;1、记录鼠标偏移2、MouseRegion获取偏移3、Transform移动图标 二、完整代码三、使用示例总结 前言 flutter在嵌入式系统中运行时&#xff0c;有可能遇到drm鼠标无法使用的情况&#xff0c;但鼠标事件却可以正常接收&#xff0c;此时如果…...

使用 MLRun 和 MinIO 设置开发机器

MLOps 之于机器学习&#xff0c;就像 DevOps 之于传统软件开发一样。两者都是一组旨在改善工程团队&#xff08;开发或 ML&#xff09;和 IT 运营 &#xff08;Ops&#xff09; 团队之间协作的实践和原则。目标是使用自动化来简化开发生命周期&#xff0c;从规划和开发到部署和…...

基于RAG的Obsidian智能知识库:本地部署与优化实战

1. 项目概述&#xff1a;当知识管理遇上大语言模型 如果你和我一样&#xff0c;是 Obsidian 的深度用户&#xff0c;同时又对大语言模型&#xff08;LLM&#xff09;的智能涌现能力感到着迷&#xff0c;那么你肯定也想过一个问题&#xff1a;能不能让我的知识库“活”起来&…...

Page Assist终极指南:3步安装本地AI浏览器助手,开启智能网页浏览新时代

Page Assist终极指南&#xff1a;3步安装本地AI浏览器助手&#xff0c;开启智能网页浏览新时代 【免费下载链接】page-assist Use your locally running AI models to assist you in your web browsing 项目地址: https://gitcode.com/GitHub_Trending/pa/page-assist 想…...

VSCode性能优化实战:回归轻量编辑器,提升开发效率

1. 项目概述&#xff1a;为什么我们需要一个“经典体验”的VSCode&#xff1f; 如果你是一个从Sublime Text、Notepad或者更早的编辑器时代走过来的开发者&#xff0c;最近打开Visual Studio Code时&#xff0c;可能会感到一丝陌生。没错&#xff0c;VSCode变得越来越强大&…...

2026年山东大学软件学院创新项目实训博客(五)

2026年山东大学软件学院创新项目实训博客&#xff08;五&#xff09; 一、工作进展 本阶段 Agent 架构模块的核心推进是将父级编排从「单次补全加强制工具调用」升级为有界多轮循环&#xff0c;并同步完成系统提示词的多步能力声明、意图分类器的域关键词防误路由、以及 SSE 事…...

Proxima向量检索库:硬件优化与量化技术实战解析

1. 项目概述&#xff1a;一个为现代开发者打造的“近邻”代码库 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Zen4-bit/Proxima”。乍一看这个标题&#xff0c;可能会有点摸不着头脑。“Zen4-bit”像是一个用户名或者某种架构的代号&#xff0c;而“Proxima”则让人联…...

AI智能体长期记忆架构:构建Agent Shadow Brain解决上下文限制

1. 项目概述&#xff1a;当AI智能体拥有一个“影子大脑”最近在AI智能体开发领域&#xff0c;一个名为“Agent Shadow Brain”的项目引起了我的注意。这个项目由开发者theihtisham发起&#xff0c;其核心思想是为大型语言模型驱动的智能体配备一个独立的、持续运行的“影子大脑…...

如何用4个步骤构建你的开源六轴机械臂:完整DIY指南

如何用4个步骤构建你的开源六轴机械臂&#xff1a;完整DIY指南 【免费下载链接】Faze4-Robotic-arm All files for 6 axis robot arm with cycloidal gearboxes . 项目地址: https://gitcode.com/gh_mirrors/fa/Faze4-Robotic-arm Faze4-Robotic-arm是一个开源六轴机械臂…...

猫眼启发的亚太赫兹超表面成像系统设计与应用

1. 猫眼启发的亚太赫兹超表面成像系统概述在电磁波成像技术领域&#xff0c;传统系统往往面临视场匹配困难、系统冗余度高以及实时性不足等挑战。受猫眼结构中反光膜&#xff08;tapetum lucidum&#xff09;的生物学启发&#xff0c;我们开发了一种创新的主动-被动复合孔径共享…...

给STM32加个‘U盘’:手把手教你用W25Q64 Flash芯片实现掉电不丢失的数据存储

给STM32加个‘U盘’&#xff1a;手把手教你用W25Q64 Flash芯片实现掉电不丢失的数据存储 在嵌入式系统开发中&#xff0c;数据存储一直是个让人头疼的问题。想象一下&#xff0c;你花了一周时间调试的传感器参数&#xff0c;因为一次意外断电全部丢失&#xff1b;或者精心收集的…...

深入剖析QWidget鼠标追踪失效:从setMouseTracking到事件拦截的完整解决方案

1. 为什么鼠标移动事件会突然失效&#xff1f; 最近在做一个Qt项目时&#xff0c;遇到了一个让人抓狂的问题&#xff1a;明明已经调用了setMouseTracking(true)&#xff0c;但鼠标在某些区域移动时&#xff0c;mouseMoveEvent就是死活不触发。这让我百思不得其解&#xff0c;毕…...