机器学习之模型训练

前言

模型训练一般分为四个步骤:

  1. 构建数据集。
  2. 定义神经网络模型。
  3. 定义超参、损失函数及优化器。
  4. 输入数据集进行训练与评估。

有了数据集和模型后,可以进行模型的训练与评估。

构建数据集

定义神经网络模型

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()

从网络构建中加载代码,构建一个神经网络模型。

定义超参、损失函数和优化器

超参

超参数是可以调整的参数,可以控制深度学习模型训练优化的过程,包括训练轮次、批次大小和学习率等。这些超参数的取值会影响模型的训练和收敛速度,其中学习率在迭代过程中控制模型的学习进度。

损失函数

损失函数用于评估模型预测值和目标值之间的误差,帮助模型降低误差并提高预测准确性。常见的损失函数包括均方误差和负对数似然,用于回归和分类任务。nn.CrossEntropyLoss结合了多种损失函数的功能,对模型的预测结果进行归一化并计算误差。

优化器

模型优化是通过调整模型参数来减少模型误差的过程,MindSpore提供了多种优化算法的实现,称之为优化器。优化器内部定义了模型参数优化过程,所有优化逻辑都封装在优化器对象中。在这里,使用了SGD(随机梯度下降)优化器。

训练与评估

设置了超参、损失函数和优化器后,我们就可以循环输入数据来训练模型。一次数据集的完整迭代循环称为一轮(epoch)。每轮执行训练时包括两个步骤:训练和验证/测试。在训练阶段,模型通过迭代训练数据集来调整参数,以尝试收敛到最佳参数。而在验证/测试阶段,模型通过迭代测试数据集来评估模型的性能是否提升。这种流程的循环迭代可以帮助模型不断学习和优化,以达到更好的性能和准确度。

# 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 lossdef 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(), batchprint(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, 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")
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.mzph.cn/pingmian/43173.shtml

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

相关文章

WPF更新UI线程实现进度条功能

WPF更新UI线程实现进度条功能 我的写法 <Page x:Class"CableInspectionScreen.ConfigPage"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http:/…

AtCoder Beginner Contest 360

A - A Healthy Breakfast 枚举一下&#xff0c;只要R在M之前就行了 #include <iostream>using namespace std;int main() {char a,b,c;cin >> a >> b >> c;if((a R && (b M || c M)) || (b R && c M)){cout << "Yes…

OpenSNN推文:个人博客站点文章汇总:大模索型时代,ESM-AA,Victoria Metrics

产学研专家共论道&#xff01;探大模索型时代数据要素流通突围之道&#xff0c;「隐语城市行开源两周年特别活动」报名开启 2024年7月3日 segmentfault思否 简介&#xff1a;随着 “数据二十条”等引导或规范数据要素流通的政策文件落地&#xff0c;包含隐私计算、AI 大模型…

论文阅读:A Survey on Evaluation of Large Language Models

A Survey on Evaluation of Large Language Models 这篇论文是由Yupeng Chang等人撰写的关于大型语言模型&#xff08;LLMs&#xff09;评估的综述&#xff0c;题为《A Survey on Evaluation of Large Language Models》。 摘要 大型语言模型&#xff08;LLMs&#xff09;在…

【trition-server】运行一个pytorch的ngc镜像

ngc 提供了pytorch容器 号称是做了gpu加速的 我装的系统版本是3.8的python,但是pytorch似乎是用conda安装的3.5的: torch的python库是ls支持gpu加速是真的 英伟达的pytorch的说明书 root@a79bc3874b9d:/opt/pytorch# cat NVREADME.md PyTorch ======= PyTorch is a python …

为什么gpt模型输入的token最大数量被限制在几万,是有技术问题吗?

既是技术问题&#xff0c;也是算力问题。 算力问题很容易理解&#xff0c;GPT4大概率还是用Transformer模型。Transformer如果经过各种Linear技术的优化&#xff08;如Sparse&#xff09;&#xff0c;那么Scaling Law难以保证&#xff1b;如果保持原样&#xff0c;那么复杂度是…

深入理解Java中的Lambda表达式与函数式接口

深入理解Java中的Lambda表达式与函数式接口 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. Lambda表达式的基础 Lambda表达式是Java 8引入的一个重要特性&#xff0c;它使得Java的函数式编程更…

vivado DIFF_TERM_ADV

DIFF_TERM_ADV 高级差分终止&#xff08;DIFF_TERM_ADV&#xff09;属性用于 UltraScale体系结构&#xff0c;用于启用或禁用内置的100Ω差分 用于输入或双向端口的端接。DIFF_TERM_ADV表示差 应在差分输入和双向端口缓冲器上使用终止方法&#xff0c;以及 Vivado Design Suite…

嵌入式C语言面试相关知识——CPU、进程和线程相关(相关问题很多,会经常过来更新)

嵌入式C语言面试相关知识——CPU、进程和线程相关 一、博客声明二、自问题目——CPU相关1、什么是中断&#xff1f;如何处理中断&#xff1f;2、解释上下文切换(Context Switch)&#xff1f;3、在嵌入式中如何优化CPU使用&#xff1f; 三、自问题目——进程相关1、什么是进程&a…

顶会FAST24最佳论文|阿里云块存储架构演进的得与失-1.引言

今年早些时候&#xff0c;2月份举办的全球计算机存储顶会USENIX FAST 2024&#xff0c;最佳论文来自阿里云&#xff0c;论文名称《What’s the Story in EBS Glory: Evolutions and Lessons in Building Cloud Block Store》 &#xff0c;论文详尽地探讨了阿里云在过去十年中开…

EtherCAT主站IGH-- 10 -- IGH之ethernet.h/c文件解析

EtherCAT主站IGH-- 10 -- IGH之ethernet.h/c文件解析 0 预览一 该文件功能`eoe.c` 文件功能函数预览二 函数功能介绍1. `ec_eoe_init`2. `ec_eoe_clear`3. `ec_eoe_send`4. `ec_eoe_run`5. `ec_eoe_queue`6. `ec_eoe_is_open`7. `ec_eoe_is_idle`8. `ec_eoe_name`示例用法示例详…

HTML(28)——空间转换

空间&#xff1a;是从坐标轴角度定义的XYZ三条坐标轴构成了一个立体空间 Z轴位置与视线方向相同 空间转换 平移 属性&#xff1a; transform: translate3d(x,y,z);transform: translateX();transform: translateY();transform: translateZ(); 取值&#xff1a;像素单位数值…

国内教育科技公司自研大语言模型

好未来的数学大模型九章大模型&#xff08;MathGPT&#xff09; 2023年8月下旬&#xff0c;在好未来20周年直播活动中&#xff0c;好未来公司CTO田密宣布好未来自研的数学领域千亿级大模型MathGPT正式上线并开启公测。根据九章大模型的官网介绍&#xff0c;九章大模型&#xff…

python - 函数 / 字典 / 集合

一.函数 形参和实参&#xff1a; >>> def MyFirstFunction(name): 函数定义过程中的name是叫形参 ... print(传递进来的 name 叫做实参&#xff0c;因为Ta是具体的参数值&#xff01;) print前面要加缩进tab&#xff0c;否则会出错。 >>> MyFirstFun…

强化学习(Reinforcement Learning,简称RL)

强化学习&#xff08;Reinforcement Learning&#xff0c;简称RL&#xff09;是一种机器学习范式&#xff0c;它允许智能体&#xff08;agent&#xff09;通过与环境互动来学习如何采取行动&#xff0c;以最大化某种累积奖励。在机器人控制中&#xff0c;强化学习可以用来解决各…

第6天: Web架构篇域名语言中间件数据库系统源码获取

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 操作系统层面简述两者区别以及识别的意义操作系统层面漏洞类型对应意义数据库层面第三方层面 操作系统层面 识别操作系统常见办法 通过网站或者通过扫描工具网站对…

强化学习编程实战-2马尔可夫决策过程

2.1 从多臂赌博机到马尔可夫决策过程 如图2-1&#xff0c;图中A为多臂赌博机&#xff0c;B为一堆鸳鸯&#xff0c;其中左上角为雄性鸳鸯&#xff0c;右上角为雌性鸳鸯&#xff0c;B展示的任务是雄性鸳鸯绕过障碍物找到词性鸳鸯。跟多臂赌博机不同的是&#xff0c;雄性鸳鸯经过一…

019-GeoGebra中级篇-GeoGebra的坐标系

GeoGebra作为一款强大的数学软件&#xff0c;支持多种坐标系的使用&#xff0c;包括但不限于&#xff1a;笛卡尔坐标系&#xff08;Cartesian Coordinate System&#xff09;、极坐标系&#xff08;Polar Coordinate System&#xff09;、参数坐标系&#xff08;Parametric Coo…

虚拟机使用

1、安装 如何安装虚拟机&#xff1f;保姆级安装教程&#xff01; - 知乎 (zhihu.com) 2、使用 2.1 快照 作用&#xff1a;保留当前系统信息为快照&#xff0c;随时可以恢复&#xff0c;以防未来系统被你玩坏&#xff0c;就好比游戏中的归档&#xff01;每配置好一个就可以保…

Linux dig命令常见用法

Linux dig命令常见用法 一、dig安装二、dig用法 DIG命令(Domain Information Groper命令)是常用的域名查询工具&#xff0c;通过此命令&#xff0c;你可以实现域名查询和域名问题的定位&#xff0c;对于网络管理员和在域名系统(DNS)领域工作的小伙伴来说&#xff0c;它是一个非…