更新中-深度学习实战中遇到的一些概念+少量代码

news2024/12/23 12:54:20

onnx

ONNX 是一种用于机器学习模型的开放式表示格式,它可以让不同的深度学习框架之间共享模型。

import onnxruntime
# 加载模型
session = onnxruntime.InferenceSession('model.onnx')
# 运行模型。第一个参数是输出变量列表,不指定的话返回所有值
output = session.run(None, {'input': input_data})

在这里插入图片描述
https://zhuanlan.zhihu.com/p/582974246

ckpt文件

ckpt 文件通常是指 TensorFlow 模型的检查点文件,用于保存模型的权重和其他参数。检查点文件包括两个部分:一个用于存储模型权重,另一个用于存储模型的元数据,例如模型的图结构和训练状态。

通过保存检查点文件,您可以在训练过程中定期保存模型的状态,以便在出现错误或意外终止时能够恢复训练。您还可以使用检查点文件来保存模型的最佳权重,以便在测试或生产环境中使用。

import torch

# MyModel 类需要继承自 PyTorch 中的nn.Module类,并实现forward 方法
model = MyModel()

# 加载权重
state_dict = torch.load('model.ckpt')
model.load_state_dict(state_dict)

# 使用模型进行推理
output = model(input_data)

将ckpt文件转为onnx文件:

import torch
import torch.onnx

# 打开ckpt,跟前面一样的
model = MyModel()
state_dict = torch.load('model.ckpt')
model.load_state_dict(state_dict)

# 将模型转换为 eval 模式
model.eval()

# 创建输入张量.随机的,维度为(1,3,224,224)
input_data = torch.rand(1, 3, 224, 224)

# 导出模型为 ONNX 格式,使onnx运行时版本为11
torch.onnx.export(model, input_data, 'model.onnx', opset_version=11)

Attention机制

即将有限的注意力集中到重点信息上,从而节省资源,快速获得最有效的信息。就是encoder层的输出经过加权平均后再输入到decoder层中,这个加权可以用矩阵表示,即Attention矩阵,它表示对于某个时刻的输出y,它在输入x上各个部分的注意力。

Self-Attention:输出序列即输入序列,自己计算自己的attention得分

Context-Attention:是encoder和decoder之间的attention,是两个不同序列之间的attention。(Transformer模型)
Transformer

Transformer

https://zhuanlan.zhihu.com/p/47812375

Transformer使一种处理序列数据的深度学习模型,在自然语言处理领域应用广泛。其中,编码器是将输入序列转换成一组特征向量,解码器则是特征向量转化成输出序列。

pytorch.nn.TransformerEncoder 中的每个层都包含一个 Multi-Head Attention 模块和一个全连接前馈神经网络模块。(跟前面Encoder模块是一样的,torch中是实现)

在 Multi-Head Attention 模块中,模型会将输入序列分成多个子序列,并在每个子序列上分别计算注意力,然后将注意力结果合并起来。这样的好处是可以让模型同时关注不同位置和不同方面的信息,以提高模型表现。但是头数越多,参数越多,计算量越大,模型的效果越好。需要权衡。

import torch
import torch.nn as nn

# 定义 TransformerEncoder 模型
class TransformerEncoderModel(nn.Module):
    def __init__(self, num_layers, input_dim, hidden_dim, num_heads):
        super(TransformerEncoderModel, self).__init__()
        self.encoder = nn.TransformerEncoder(
            nn.TransformerEncoderLayer(input_dim, num_heads, hidden_dim),
            num_layers
        )

    def forward(self, x):
        return self.encoder(x)

# 创建 TransformerEncoder 模型实例
model = TransformerEncoderModel(num_layers=2, input_dim=512, hidden_dim=2048, num_heads=8)

# 准备输入数据
input_data = torch.randn(10, 512)

# 运行模型得到输出
output_data = model(input_data)

# 输出结果
print(output_data.shape)

另一个示例:

import torch.nn as nn

encoder_layer = nn.TransformerEncoderLayer(d_model=512, nhead=8, 
				dim_feedforward=2048, dropout=0.1, activation='relu')
transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=2)

torch.nn.TransformerEncoderLayer部分参数说明

  • d_model 输入向量的维度,默认512
  • nhead 注意力头数(指将序列分成多少个子序列),默认8
  • dim_feedforward 全连接前馈神经网络模块的隐藏层大小,默认2048
  • dropout 在注意力和全连接前馈神经网络模块中使用的dropout概率,默认值0.1,是为了防止过拟合
  • activation 全连接前馈神经网络中激活函数类型,默认relu

nn.TransformerEncoder的src_key_padding_mask参数:
用于屏蔽不需要计算注意力的位置的掩码。因为在每个批次计算时,不是所有的序列长度都相同的,因此在进入处理前,我们会对序列进行填充,使长度相同。这些填充的位置显然不用计算注意力,所以要用src_key_padding_mask指明填充位置。

src_key_padding_mask可以设为None,表示所有位置都要计算注意力,如果不是None,就应该是一个二维的布尔型张量,形状为 (batch_size, input_seq_len)。其中,batch_size 表示批次大小,input_seq_len 表示输入序列的长度。

如果 src_key_padding_mask[i, j] 等于 True,则表示第 i 个样本的第 j 个位置是填充位置,不需要计算注意力;否则,表示该位置需要计算注意力。

Normalization

在深度学习中,归一化(Normalization)是一种常用的技术,用于提高模型的稳定性和训练效果。其中,层归一化(Layer Normalization)是一种常用的归一化方式,它可以使得每个样本的特征在神经网络中的传播具有一致性。在 PyTorch 中,nn.LayerNorm 类可以用于实现层归一化。

import torch.nn as nn
# normalized_shape: 归一化的维度。默认值为 -1,表示对输入的所有维度进行归一化
# eps: 一个小的常数,用于避免除以零误差。默认值为 1e-5。
layer_norm = nn.LayerNorm(normalized_shape=512, eps=1e-5)

Embedding

torch.nn.Embedding 是 PyTorch 中的一个类,用于实现嵌入层(embedding layer)。嵌入层通常用于将离散的符号嵌入到低维向量空间中,以便于神经网络对这些符号进行处理。例如,在自然语言处理中,我们通常需要将单词嵌入到低维向量空间中,以便于神经网络对单词进行分类、聚类、生成等任务。

torch.nn.Embedding 的常用参数包括:
 num_embeddings:表示嵌入层的符号个数,即嵌入层的输入大小;(例如,在自然语言处理任务中,num_embeddings 可以设置为词表的大小,即词汇表中单词的数量)
 embedding_dim:表示嵌入层的嵌入维度,即嵌入层的输出大小,即 Embedding 后的向量的大小。默认值为 128
 padding_idx:表示用于填充的符号索引,默认是None,表示不填充
 max_norm: 用于指定 Embedding 向量的最大范数。默认值为 None,表示不进行约束
 norm_type: 用于指定 Embedding 向量的范数类型。默认值为 2,表示 L2 范数
 scale_grad_by_freq: 用于控制梯度的缩放方式。默认值为 False,表示使用固定的梯度缩放因子
 sparse: 用于指定是否使用稀疏张量。默认值为 False,表示使用密集张量

import torch.nn as nn
# 将一个大小为 100 的词表映射为一个大小为 128 的向量
# 需要注意的是,输入的整数特征需要在 0 到 num_embeddings-1 的范围内
embedding = nn.Embedding(num_embeddings=100, embedding_dim=128)

DataLoader

torch.utils.data.DataLoader 是 PyTorch 中一个用于加载数据的工具类。它可以帮助我们将数据集转换为 PyTorch 中的 Dataset 对象,并提供了一些方便的功能:
 数据批量加载:DataLoader 可以将数据集分成多个批次进行加载,并按照设定的顺序将它们提供给模型进行训练
 数据顺序打乱:为了提高模型的训练效果,我们通常需要对数据集进行随机打乱。DataLoader 提供了一个 shuffle 参数,可以轻松地实现随机打乱
 数据并行加载:当数据集很大时,我们可能需要使用多个 CPU 或 GPU 并行加载数据。DataLoader 可以通过 num_workers 参数来指定并行加载的进程数
 batch_size:指定每个批次的样本数量。默认为 1
 collate_fn:指定如何将每个样本的数据进行合并。默认为在每个批次中返回一个元组的列表,即批次中的每个元素包含一个元组,元组中的第 i 个元素是第 i 个样本的数据。可以根据具体的需求自定义合并方法
 drop_last:如果设为 True,当数据集中的样本数量不能被 batch_size 整除时,将丢弃最后一个批次中的剩余样本。默认为 False。

PyTorch Lightning 框架

pytorch_lightning.LightningModule 是 PyTorch Lightning 框架中的一个类,它是一个高级别的封装,用于简化深度学习模型的开发和训练过程。它提供了一组标准化的接口和实现,可以帮助我们更方便地定义和训练神经网络模型,同时还可以获得更好的性能和可重用性。只要写好forward,training_step写好了loss,并且return了,就可以自动反向传播

pytorch_lightning.LightningModule可以帮助我们实现以下功能:
 简化模型定义:LightningModule 提供了一组标准化的模型接口,例如 init、forward、training_step、validation_step 和 test_step 等
 自动管理训练过程:例如优化器的选择和配置、学习率的调整和策略、梯度的累积和截断等
 多样化的训练选项:如分布式训练、自动混合精度和自动批量大小等
 高度可重用性

pytorch_lightning.callbacks.ModelCheckpoint 是 PyTorch Lightning 中的一个回调函数类,用于在训练过程中自动保存模型的权重参数。具体来说,它可以帮助我们实现以下功能:
 自动保存模型:会根据设定的条件自动保存模型的权重参数。可以根据需要设定保存的频率、保存的文件名等参数
 自动加载模型:可以自动加载之前训练好的模型权重参数,从而实现断点训练的功能
 自动清理模型:为了避免磁盘空间的浪费,可以根据设定的条件自动清理不需要的模型权重文件

常用参数:
 filepath:用于指定保存模型权重参数的文件名。可以使用类似于 {epoch}、{val_loss} 等占位符来动态地生成文件名。
 save_top_k:用于指定保存最好的几个模型。例如,save_top_k=1 表示只保存最好的一个模型,save_top_k=3 表示保存最好的三个模型。默认为 1
 monitor:用于指定监控的指标。例如,monitor=‘val_loss’ 表示监控验证集上的损失函数值。
 mode:用于指定监控指标的模式。例如,mode=‘min’ 表示监控指标越小越好,mode=‘max’ 表示监控指标越大越好,mode=‘auto’ 表示根据指标的类型自动选择模式。默认为 ‘auto’
 save_last:用于指定是否保存最后一个模型。默认为 True
 save_weights_only:用于指定是否只保存模型的权重参数而不保存整个模型。默认为 False
 period:用于指定保存模型的间隔周期。例如,period=10 表示每隔 10 个 epoch 保存一次模型。默认为 None,表示每个 epoch 都保存一次模型

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

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

相关文章

ESP8266使用MicroPython接入ThingsBoard

1、概述 我们老大当初叫我学习microPython,这个可以直接将代码发到板子上,然后就可以跑,就相当于设备业务代码由我们来写,不仅仅是让嵌入式来写,嵌入式做的就是封装函数,我们可以调用.最终这个还是实现了,但是没有推广. 2、设备 我自己购买的设备是ESP8266,某宝上购买的,mic…

智能仓储系统哪家公司做的比较好?求推荐排名不错的智能仓储公司?

什么是仓储服务信息平台?仓储服务信息平台可以为企业提供哪些便利? 随着电商和物流行业的快速发展,仓储服务越来越受到人们的关注。为了更好地管理仓储服务,提高效率,降低成本,仓储服务信息平台也应运而生…

CTF国赛2023 - ukfc(四道逆向已下班)

没啥好说的,惜败已复现:badkey1、国粹、ezbyte、moveAside、ezAndroid Notice:复现时候的一些题解来源于各大战队的wp,比如F61d,侵删 Re ezbyte 首先跟踪很容易分析到前后缀 至于里面的,得知道是dwarf…

哪个牌子的电容笔好用?Apple Pencil平替

随着时代的进步,数码产品在人们日常生活中的使用频率越来越高,一个iPad和一支电容笔似乎已然成为人们主要的学习工具了。电容笔的发展速度很快,在众多的电容笔牌子中,什么牌子好用又便宜?下面,我来给大家推…

深度学习进阶篇[8]:对抗神经网络GAN基本概念简介、纳什均衡、生成器判别器、解码编码器详解以及GAN应用场景

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

FastReport Business Graphics .NET 2023.1 Crack

FastReport 商业图形 .NET .NET WinForms 的数据可视化库 使用 FastReport 业务图形库,您可以可视化不同层次的数据,构建业务图表以供进一步分析和决策。 所有这些都可以直接在您的应用程序中工作! 利用 .NET 7、.NET Core、Blazor、ASP.NE…

数据采集学习心得

数据采集是指从互联网或其他数据源中收集数据的过程。在当今信息时代,数据采集已经成为了一项非常重要的技能。无论是在商业领域还是学术领域,数据采集都是非常必要的。本文将分享我在学习数据采集过程中的心得体会。 一、数据采集的重要性 在当今信息…

高考即将到来,如何选择大学和专业?(2023版本)

同学们,高考又快到了,怎么选择大学和专业一直是同学们心烦的事情,正所谓“选择大于努力”,选择错了,努力方向自然就错了,事倍功半,甚至南辕北辙,所以对此我们必需慎之又慎&#xff0…

Mybatis自定义分页插件及PageHelper源码分析

文章目录 前言一、自定义一个简单的mybatis分页插件?1.判断当前传参是不是一个Page,如果是page就进行转换。2.分页查询总条数3.修改原有sql4.执行原有方法5.存在问题: 二、PageHelper分析1.PageHelper简介2.PageHelper源码分析 三&#xff1a…

概率论:假设检验

参考书目:《行为科学统计精要》(第八版)——弗雷德里克J格雷维特 1、假设检验预备知识 Z分位数样本均值的分布标准误 参考: 概率论:样本与总体分布,Z分数与概率_格勒王的博客-CSDN博客如何理解样本和整体…

Linux入门到进阶

文章目录 前言一、第一章-初识Linux1.初识Linux2.虚拟机介绍3.VMware Workstation安装4.在VMware上安装Linux5.远程连接Linux系统6.扩展:WSL(Windows Subsystem for Linux)7.扩展:虚拟机快照 二、第二章-Linux基础命令1.Linux的目…

AMEYA360:纳芯微推出车规级耐高压、三线霍尔开关及锁存器NSM101x系列

纳芯微推出全新三线制车规霍尔效应开关/锁存器NSM101x系列,为数字位置检测提供高精度的解决方案,可被广泛应用于汽车执行器等的位置检测。 NSM101x产品系列包含了3个产品型号,即NSM1011(单极霍尔开关)、NSM1012(全极霍尔开关)、NSM1013(霍尔锁…

oracle19c介绍和windows上安装

目录 一、版本 (1)历史 (2)11g和12c管理方式区别 11g 12C (3)各个版本对操作系统要求 二、分类 (1)分为桌面类和服务器类 (2)分为企业版和标准版 三…

后端(一):Tomcat

我们之前的前端是被我们一笔带过的,那不是我们要讲的重点,而这里的后端则是重点。本章先来认识认识后端的基础。 Tomcat 是什么 我们先来聊聊什么叫做tomcat,我们熟悉的那个是汤姆猫: 这和我们Java世界中的Tomcat 不是同一只猫&…

包含合并单元格的表格快速排序

实例需求:现需要将原料配方成分表按照“原料含量”从高到低排序,如下图所示。由于表格中包含合并单元格,因此Excel的排序功能无法正常。 示例代码如下。 Sub demo()Dim data(), i, idx, k, slstRow Cells(Rows.Count, 2).End(xlUp).RowReDi…

02-项目系统架构

1、为何选择xxxxx 1.1、高并发场景有哪些? 商品秒杀,双11 微信支付宝平台 微博突发热点 用户操作日志 购票平台 1.2、为何选择xxxxx 业务复杂度高于淘宝双11,考验个人程序设计能力 动态库存 选座功能 线上线下 持续高并发业务&…

5G宏基站的形态5G基站长什么样?

据说,全国建了约273.3万个5G基站。 真是春城无处不飞花,5G遍布千万家。 今天我们换个轻松的话题,来看看春光下的5G宏基站。 胜日寻芳泗水滨,无边光景一时新。 等闲识得东风面,万紫千红总是春。 古人在春游时寻芳&am…

QGIS 对 GeoJson 文件数据进行压缩

项目场景 地图开发,友商提供的是边界Shapefile文件,文件比较大,例如某个文件就 29.2 M ,这么大的数据,在echarts 上显示地图,前端会很卡,特别是有地图下钻的时候,体验很不好&#x…

【终极计算平台】上海道宁为您提供​Wolfram技术,支持跨桌面、云、服务器和移动设备的强大工作流程

Wolfram帮助世界 加快研究、教育、技术发展和 革新的步伐 无论您所在任何领域 无论您需要任何应用 Wolfram技术都是您的终极计算平台 Mathematica 具有 涵盖所有技术计算领域的 将近 6,000 个内置函数—— 所有这些都经过精心制作 使其完美地 整合在Mathematica系统中…

黑马优购学习笔记

1. uni-app 简介 uni-app 是一个使用 Vue.js 开发所有前端应用的框架。开发者编写一套代码,可发布到 iOS、Android、 H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。 详细的 uni-app 官方文档,请翻…