【昇思初学入门】第七天打卡-模型训练

训练模型

学习心得

  1. 构建数据集。这通常包括训练集、验证集(可选)和测试集。训练集用于训练模型,验证集用于调整超参数和监控过拟合,测试集用于评估模型的泛化能力。
    (mindspore提供数据集https://www.mindspore.cn/docs/zh-CN/r2.3.0rc2/api_python/mindspore.dataset.html)
  2. 定义神经网络模型。这通常涉及到选择适当的网络架构(如卷积神经网络CNN、循环神经网络RNN、全连接网络等)和激活函数。
    创建模型类:使用mindspore.nn.Cell作为基类,创建一个自定义的神经网络模型类。
    义网络层:定义所需的网络,如卷积层、全连接层、激活函数和池化层等
    实现construct方法:在construct方法中,使用定义好的网络层构建前向网络
  3. 定义超参、损失函数和优化器。
    设置超参数:设置超参数,如学习率、批次大小、训练轮数等。
    定义损失函数:选择适当的损失函数,如均方误差(MSE)用于回归问题,交叉熵损失(Cross-Entropy Loss)用于分类问题等。
    设置优化器:选择合适的优化器,如随机梯度下降(SGD)、Adam等,用于根据损失函数的梯度更新模型参数。
  4. 训练和评估。
    循环输入数据来训练模型。一次数据集的完整迭代循环称为一轮(epoch)。每轮执行训练时包括两个步骤:
    训练:迭代训练数据集,并尝试收敛到最佳参数。
    验证/测试:迭代测试数据集,以检查模型性能是否提升。

笔记

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

# Download data from open datasets
from download import download

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


def datapipe(path, 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 = MnistDataset(path)
    dataset = dataset.map(image_transforms, 'image')
    dataset = dataset.map(label_transform, 'label')
    dataset = dataset.batch(batch_size)
    return dataset

train_dataset = datapipe('MNIST_Data/train', batch_size=64)
test_dataset = datapipe('MNIST_Data/test', batch_size=64)

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 logits

model = Network()

epochs = 3
batch_size = 64
learning_rate = 1e-2

loss_fn = nn.CrossEntropyLoss()
optimizer = nn.SGD(model.trainable_params(), learning_rate=learning_rate)

# Define forward function
def forward_fn(data, label):
    logits = model(data)
    loss = loss_fn(logits, label)
    return loss, logits

# Get gradient function
grad_fn = mindspore.value_and_grad(forward_fn, None, optimizer.parameters, has_aux=True)

# Define function of one-step training
def train_step(data, label):
    (loss, _), grads = grad_fn(data, label)
    optimizer(grads)
    return loss

def train_loop(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(), batch
            print(f"loss: {loss:>7f}  [{current:>3d}/{size:>3d}]")
            
def test_loop(model, dataset, loss_fn):
    num_batches = dataset.get_dataset_size()
    model.set_train(False)
    total, test_loss, correct = 0, 0, 0
    for 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_batches
    correct /= total
    print(f"Test: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \n")

loss_fn = nn.CrossEntropyLoss()
optimizer = nn.SGD(model.trainable_params(), learning_rate=learning_rate)

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

结果
训练结果

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

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

相关文章

绘制全球各大洲典型流域的时间序列图

流量世界第一、长度第二的亚马逊流域(Amazon)、南美洲第四大、整条河流位于巴西的圣弗朗西斯科流域(Sao Francisco)、世界第四长、北美洲最长的密西西比流域(Mississippi)、欧洲最长的伏尔加流域&#xff0…

GitLab 不小心提交了master/develop版本如何回退

1. 找寻最近的版本,使用git reset --hard 回退到具体的提交版本号 2. git push origin master --force 这个会遇到gitlab默认拦截,处理版本 版本仓库页面,选择Setting——Repository,找到Protected branches 3. 再回到master分支…

python爬虫-爬虫的基础知识储备

爬虫就是一个不断的去抓去网页的程序,根据我们的需要得到我们想要的结果!但我们又要让服务器感觉是我们人在通过浏览器浏览不是程序所为!归根到底就是我们通过程序访问网站得到html代码,然后分析html代码获取有效内容的过程。下面…

开源/标准版 首页 logo大小修改

这个是diy的: 文件地址:template/uni-app/pages/index/diy/components/headerSerch.vue 这个是页面设计的: 文件地址:template/uni-app/pages/index/visualization/components/headerSerch.vue 先删除这三个 然后改下图的地方

C++ 模板:全特化和偏特化

目录 全特化(Full Specialization) 偏特化(Partial Specialization) 特点和使用场景 注意事项 在C中,模板特化(template specialization)是一种强大的功能,允许对模板进行特定情…

云计算 | 期末梳理(下)

1.模运算 2. 拓展欧几里得算法 3.扩散和混淆、攻击的分类 香农的贡献:定义了理论安全性,提出扩散和混淆原则,奠定了密码学的理论基础。扩散:将每一位明文尽可能地散布到多个输出密文中去,以更隐蔽明文数字的统计特性。混淆:使密文的统计特性与明文密钥之间的关系尽量复杂…

Javaweb配置tomcat

Tomcat 9版本链接 链接:https://pan.baidu.com/s/1u-eDur5KlqlXM_IM50Ahtg?pwd1njm 提取码:1njm 1、打开idea,创建maven项目 2023版IDEA 2、 目录结构 ps: 如果结果不完整,选中main右键 新建对应的文件夹 3、 web项目设置Tomcat(部署项目…

A股周一走势历史罕见,你知道是为什么吗?

今天的A股,让人历史罕见,你知道是为什么吗?盘面出现2个重要信号,一起来看看: 1、今天大盘低开低走,跌懵了,两市板块全部在等待翻红,这让人历史罕见。 2、盘面出现2个重要信号&#x…

【大数据】大数据时代的黎明

目录 前言 深入解读大数据的本质 大数据的起源与演进轨迹 大数据对社会经济的深远影响 经济领域的革新 社会治理与公共服务的智能化 创新体系的重构 面临的挑战与应对 前言 步入21世纪以来,人类文明正站在一个历史性的转折点上,迎来了大数据时代的…

VUE div的右上角的角标/标签

一、效果图 二、代码 <div class"comp-overview"><div class"overview-item" v-for"(item,index) in overviewInfoList" :key"index"><div class"angle_mark"><span>{{item.label}}</span>&…

Linux 磁盘空间清理

1.检查磁盘使用情况 #显示每个挂载点的磁盘使用量&#xff0c;以及可用空间和使用率 df -h #显示当前目录的全部文件和目录&#xff08;包括隐藏的&#xff09;,以MB显示 ll -h 2. du查看最大的目录或文件 #逐级检查某个目录下各个子目录的大小。从根目录开始&#xff0c;逐级…

谷歌云(GCP)4门1453元最热门证书限时免费考

谷歌云(GCP)最新活动&#xff0c;完成免费官方课程&#xff0c;送4门最热门考试免费考试券1张(每张价值200刀/1453元)&#xff0c;这4门也包括最近大热的AI/ML考试&#xff0c;非常值得学习和参加&#xff0c;活动7/17截止 谷歌云是全球最火的三大云计算厂商(前两名AWS, Azure…

【shell脚本速成】nginx安装脚本

文章目录 案例需求应用场景案例思路案例代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻&#xff0c;都沐浴在轻松…

福州代理记账服务财务专业知识会计助手

福州的代理记服务可探索企业和个体工商户处理财务和会计工作。选择合适的代理记服务不仅可以节省成本&#xff0c;还可以确保财务工作专业、合规。以下是一些关于代理记服务的关键信息和财务信息&#xff0c;供您参考&#xff1a; https://www.9733.cn/news/detail/180.html …

一分钟彻底掌握Java多线程生产者与消费者模型

代码 package com.example.KFC; public class Cooker extends Thread { public void run() { while (true) { synchronized (Desk.lock) { if (Desk.maxCount 0) { break; } else { if (!Desk.flag) { System.out.println("Cooker makes a hamburger"); …

Vue2/3中的this

一、Vue3 Vue3.0中this的替代方法 在vue3中&#xff0c;新的组合式API中没有this&#xff0c;可以通过以下方法替代this setup 在生命周期 beforecreate 和 created 前执行&#xff0c;此时 vue 对象还未创建&#xff0c;所以无法使用 this 方式一 getCurrentInstance() 方…

sd-wan跨境访问|公司海外工厂加速访问ERP系统解决方案

随着全球化的深入发展和国际市场竞争的加剧&#xff0c;越来越多的企业选择在国外建立工厂&#xff0c;以扩大市场份额和优化资源配置。然而&#xff0c;这也带来了一系列新的挑战&#xff0c;其中之一就是国外工厂员工在访问国内ERP系统时面临的超高延迟等问题。这一问题不仅严…

学习C++,这几个练手项目值得推荐

写项目是学习C的一种有效方式&#xff0c;有以下几个原因&#xff1a; 实践应用&#xff1a;通过写项目&#xff0c;你可以将所学的理论知识应用到实际中&#xff0c;加深对C语言和编程概念的理解。这有助于巩固你的知识&#xff0c;并提高你的编码能力。锻炼技能&#xff1a;…

数据结构(Java):顺序表集合类ArrayList

1、线性表 线性表&#xff0c;在逻辑结构上是连续的&#xff08;可理解为连续的一条直线&#xff0c;一对一的关系&#xff09;&#xff0c;而在物理结构上不一定连续&#xff0c;通常以数组和链式结构进行存储。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线…

etcd详解

一、etcd概要 1.etcd的简介 在做微服务集群开发时&#xff0c;有很多应用&#xff0c;有很多微服务上下游节点&#xff0c;它们本身需要很多存储配置文件&#xff0c;需要有一个地方来存储这些配置文件&#xff0c;因此诞生了etcd&#xff0c;它本质是为了微服务上下游服务去…