PyTorch主要模块

【Pytorch学习】-- 使用pytorch自带模型 -- VGG16 Pytorch学习 阅读详情

一,深度学习任务流程

PyTorch的强大使得深度学习任务像搭积木一样。

机器学习流程:一般分为这几个步骤:数据加载—数据预处理—划分数据集—选择模型—定义损失函数,优化器,超参数—验证评估。

ML与DL的不同:
1,数据:由于DL所需数据量大,所以需要按批(batch)读取;
2,模型:DL的网络层数较深,且有特定功能的网络层,就跟盖房子一样,需要逐层搭建,或预定义模块再组装;
3,加速:DL由于数据大,模型深,所以需要加速,需要
GPU
,并行运算等。

深度学习流程:流程类似于ML,按批读入数据—模型构建—放入GPU中训练—损失函数反向传播—优化器—训练/验证—调整评估。

二,基本流程

1,基本配置

导包:涉及表格的可能用pandas,图片可能用到cv2,可视化可能用matplotlib,seaborn等。但是以下包基本是深度学习项目必须的;

import os
import numpy as np
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader #数据加
import torch.optim as optimizer #优化器

超参数设置:超参数统一设置,方便后续调试修改:

  1. batch size=16 # 批次大小
  2. lr = 1e-4 # 初始学习率
  3. epochs = 100 # 训练次数

GPU配置:常见有两种方式

# 方案一:使用os.environ,这种情况如果使用GPU不需要设置,0表示显卡0,1表示显卡1.用几块写几块。
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1'

# 方案二:使用“device”,后续对要使用GPU的变量用.to(device)即可,model.to_device(device)
device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")

2,数据读入

PyTorch通过Dataset+DataLoader读取数据。
Dataset定义好数据的格式和数据变换形式,DataLoader用iterative的方式不断读入批次数据。
Dataset:有两种数据读取方式:
1,下载并使用Pytorch提供的内置数据集,需要继承PyTorch自身的Dataset类。
2,定义自己的Dataset类实现灵活数据读取。同时还要对数据进行必要的变换,比如说将图片统一成一致的大小。需要将图片转化为Tensor类,具体可以看实战部分。
主要包含三个函数:

  • init: 用于向类中传入外部参数,同时定义样本集
  • getitem: 用于逐个读取样本集合中的元素,可以进行一定的变换,并将返回训练/验证所需的数据
  • len: 用于返回数据集的样本数

DataLoader:构建好Dataset后,就可以使用DataLoader来按批次读入数据了,实现代码如下:

from torch.utils.data import DataLoader

train_loader = torch.utils.data.DataLoader(train_data, batch_size=batch_size, num_workers=4, shuffle=True, drop_last=True)
val_loader = torch.utils.data.DataLoader(val_data, batch_size=batch_size, num_workers=4, shuffle=False)
  • batch_size:样本是按“批”读入的,batch_size就是每次读入的样本数
  • num_workers:有多少个进程用于读取数据
  • shuffle:是否将读入的数据打乱
  • drop_last:对于样本最后一部分没有达到批次数的样本,使其不再参与训练

3,模型构建

PyTorch中神经网络构造基于** Module 类**的模型来完成的,Module 类是 nn 模块里提供的一个模型构造类,是所有神经⽹络模块的基类。神经网络通过层定义+层顺序的方式进行构建。

不含模型参数的层: MyLayer 类通过继承 Module 类自定义了一个将输入减掉均值后输出的层,并将层的计算定义在了 forward 函数里。这个层里不含模型参数。

import torch
from torch import nn

class MyLayer(nn.Module):
    def __init__(self, **kwargs):
        super(MyLayer, self).__init__(**kwargs)
    def forward(self, x):
        return x - x.mean()  

含模型参数的层:自定义含模型参数的自定义层。其中的模型参数可以通过训练学出。Parameter 类其实是 Tensor 的子类,如果一 个 Tensor 是 Parameter ,那么它会⾃动被添加到模型的参数列表里。

class MyListDense(nn.Module):
    def __init__(self):
        super(MyListDense, self).__init__()
        self.params = nn.ParameterList([nn.Parameter(torch.randn(4, 4)) for i in range(3)])
        self.params.append(nn.Parameter(torch.randn(4, 1)))

    def forward(self, x):
        for i in range(len(self.params)):
            x = torch.mm(x, self.params[i])
        return x
net = MyListDense()
print(net)

关键参数解释:

  • torch.Tensor - 一个多维数组,支持诸如backward()等的自动求导操作,同时也保存了张量的梯度
  • nn.Module - 神经网络模块。是一种方便封装参数的方式,具有将参数移动到GPU、导出、加载等功能。
  • nn.Parameter - 张量的一种,当它作为一个属性分配给一个Module时,它会被自动注册为一个参数。
  • autograd.Function - 实现了自动求导前向和反向传播的定义,每个Tensor至少创建一个Function节点,该节点连接到创建Tensor的函数并对其历史进行编码。

4,模型初始化

一个好的权重值,会使模型收敛速度提高,使模型准确率更精确。使用torch.nn.init。
torch.nn.init使用:根据实际模型来使用torch.nn.init进行初始化,通常使用isinstance来进行判断模块属于什么类型。

import torch
import torch.nn as nn

conv = nn.Conv2d(1,3,3)
linear = nn.Linear(10,1)

isinstance(conv,nn.Conv2d)
isinstance(linear,nn.Conv2d)

对于不同的类型层,我们就可以设置不同的权值初始化的方法。

# 查看随机初始化的conv参数
conv.weight.data
# 查看linear的参数
linear.weight.data

# 对conv进行kaiming初始化
torch.nn.init.kaiming_normal_(conv.weight.data)
conv.weight.data
# 对linear进行常数初始化
torch.nn.init.constant_(linear.weight.data,0.3)
linear.weight.data

初始化函数封装:将各种初始化方法定义为一个initialize_weights()的函数并在模型初始后进行使用。如下代码遍历当前模型的每一层,然后判断各层属于什么类型,然后根据不同类型层,设定不同的权值初始化方法。

def initialize_weights(self):
	for m in self.modules():
		# 判断是否属于Conv2d
		if isinstance(m, nn.Conv2d):
			torch.nn.init.xavier_normal_(m.weight.data)
			# 判断是否有偏置
			if m.bias is not None:
				torch.nn.init.constant_(m.bias.data,0.3)
		elif isinstance(m, nn.Linear):
			torch.nn.init.normal_(m.weight.data, 0.1)
			if m.bias is not None:
				torch.nn.init.zeros_(m.bias.data)
		elif isinstance(m, nn.BatchNorm2d):
			m.weight.data.fill_(1) 		 
			m.bias.data.zeros_()	

5,损失函数

二分类交叉熵损失函数:计算二分类任务时的交叉熵(Cross Entropy)函数。在二分类中,label是{0,1}。对于进入交叉熵函数的input为概率分布的形式。一般来说,input为sigmoid激活层的输出,或者softmax的输出。

torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')
# weight:每个类别的loss设置权值
# size_average:数据为bool,为True时,返回的loss为平均值;为False时,返回的各样本的loss之和
# reduce:数据类型为bool,为True时,loss的返回是标量。

交叉熵损失函数:交叉熵函数

torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')
ignore_index:忽略某个类的损失函数

L1损失函数:计算输出y和真实标签target之间的差值的绝对值。

torch.nn.L1Loss(size_average=None, reduce=None, reduction='mean')
# reduction有三种计算模式可选
# none:逐个元素计算。sum:所有元素求和,返回标量。mean:加权平均,返回标量。默认求平均

MSE损失函数:计算输出y和真实标签target之差的平方。

torch.nn.MSELoss(size_average=None, reduce=None, reduction='mean')
# reduction参数与L1一样

平滑L1 (Smooth L1)损失函数: L1的平滑输出,其功能是减轻离群点带来的影响

torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction='mean', beta=1.0)

目标泊松分布的负对数似然损失: 泊松分布的负对数似然损失函数

torch.nn.PoissonNLLLoss(log_input=True, full=False, size_average=None, eps=1e-08, reduce=None, reduction='mean')
# log_input:输入是否为对数形式,决定计算公式
# full:计算所有 loss,默认为 False
# eps:修正项,避免 input 为 0 时,log(input) 为 nan 的情况

KL散度:计算KL散度,也就是计算相对熵。用于连续分布的距离度量,并且对离散采用的连续输出空间分布进行回归通常很有用。

torch.nn.KLDivLoss(size_average=None, reduce=None, reduction='mean', log_target=False)
# reduction:计算模式,可为 none/sum/mean/batchmean

MarginRankingLoss:计算两个向量之间的相似度,用于排序任务。该方法用于计算两组数据之间的差异。

torch.nn.MarginRankingLoss(margin=0.0, size_average=None, reduce=None, reduction='mean')

多标签边界损失函数: 对于多标签分类问题计算损失函数

torch.nn.MultiLabelMarginLoss(size_average=None, reduce=None, reduction='mean')

二分类损失函数:计算二分类的 logistic 损失

torch.nn.SoftMarginLoss(size_average=None, reduce=None, reduction='mean')torch.nn.(size_average=None, reduce=None, reduction='mean')

多分类的折页损失:计算多分类的折页损失

torch.nn.MultiMarginLoss(p=1, margin=1.0, weight=None, size_average=None, reduce=None, reduction='mean')

三元组损失: 计算三元组损失

torch.nn.TripletMarginLoss(margin=1.0, p=2.0, eps=1e-06, swap=False, size_average=None, reduce=None, reduction='mean')

HingEmbeddingLoss:对输出的embedding结果做Hing损失计算

torch.nn.HingeEmbeddingLoss(margin=1.0, size_average=None, reduce=None, reduction='mean')

余弦相似度:对两个向量做余弦相似度

torch.nn.CosineEmbeddingLoss(margin=0.0, size_average=None, reduce=None, reduction='mean')

CTC损失函数:用于解决时序类数据的分类

torch.nn.CTCLoss(blank=0, reduction='mean', zero_infinity=False)

注:具体公式及理解后续赘述。

6,训练与评估

训练:训练状态,那么模型的参数应该支持反向传播的修改

model.train()   # 训练状态

评估:验证/测试状态,则不应该修改模型参数

model.eval()   # 验证/测试状态

训练流程:

# 用for循环读取DataLoader中的全部数据
for data, label in train_loader:

# 将数据放到GPU上用于后续计算
data, label = data.cuda(), label.cuda()

# 用当前批次数据做训练时,应当先将优化器的梯度置零
optimizer.zero_grad()

# 将data送入模型中训练
output = model(data)

# 预先定义的criterion计算损失函数
loss = criterion(output, label)

# 将loss反向传播回网络:
loss.backward()

# 使用优化器更新模型参数:
optimizer.step()

评估流程:验证/测试的流程基本与训练过程一致,不同点在于:

  • 需要预先设置torch.no_grad,以及将model调至eval模式
  • 不需要将优化器的梯度置零
  • 不需要将loss反向回传到网络
  • 不需要更新optimizer

7,可视化

一般为了便于观察,通常会使用可视化的方式,将结果更直观的展现出来。比如分类的ROC曲线,以及训练验证过程中的损失函数曲线等。
注:关于可视化,后续会专门出一节。

三,PyTorch基础实战

基础实战——Fashion-mnist时装分类

文章链接:基础实战——Fashion-mnist时装分类。

Pytorch预训练模型、内置模型实现图像分类、检测和分割 原创:余晓龙 Pytorch中提供了很多已经在ImageNet数据集上训练好的模型了,可以直接被加载到模型中进行预测任务。预训练模型存放在Pytorch的torchvision中库,在torchvision库的models模块下可以查看内置的模型,models模块中的模型包含四大类,如图所示: 一、图像分类代码实现 # coding: utf-8 from PIL import Image import matplotlib.pyplot as plt plt.rcParams['font.sans- 阅读详情

相关推荐

pytorch学习记录,其主要的17个模块功能概述

这里先介绍下pytorch主要的一些模块分别可以实现什么功能,后续会不断更新每一个模块中具体的API以及代码示例 一,torch模块 import torch 包含了多维张量的数据结构以及基于其上的多种数学操作。另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化。具体包括pytorch张量的生成,以及运算、切片、连接等操作,还包括神经网络中经常使用的激活函数,比如sigmoid、relu、tanh,还提供了与numpy的交互操作 二,torch.Tensor import torch

weixin_43220532的博客 4752

【神经网络】06 - PyTorch自带的网络模型

许多框架会把VGG16当作前置框架,使用VGG16提取特征,在VGG16后面加一些网络结构实现功能。

SmallBamboo的博客 1038

【HDR】曝光融合(Exposure Fusion)

在曝光融合(Exposure Fusion)算法问世之前,多曝光序列合成用于显示的HDR需要两个步骤,第一步是将多张不同曝光的低动态范围图像合成为HDR(例如Debevec提出的加权融合方法),通常HDR为12bit或者16bit;第二步是通过tonemapping对高动态范围HDR进行压缩以支持低动态范围显示设备(例如Durand提出的基于双边滤波的tonemapping算法),一般会压缩至8bit。

专注人工智能,主攻CV 1万+

Pytorch的内置模型

Pytorch的内置模型 翻译自 https://pytorch.org/docs/stable/torchvision/models.html TORCHVISION.MODELS 文章目录Pytorch的内置模型torchvision.models中包含了如下模型你可以通过随机权重来初始化一个模型我们给他们提供了预训练的模型,使用torch.utils.model_zoo ,通过让参数pr...

博客 1万+

深入GD32/STM32引脚复用:你的JTAG/SWD接口是怎么‘消失’的?一次讲清原理与预防

本文深入解析GD32/STM32调试接口(JTAG/SWD)突然失效的原理与预防措施。通过分析MCU启动流程、引脚复用机制及典型错误代码模式,揭示调试接口'消失'的根本原因,并提供硬件设计检查清单、软件防护代码及开发流程优化方案,帮助开发者有效避免烧录失败问题。

weixin_42532938的博客 368

2006NOIP普及组真题 4. 数列

从上述推理中,我们发现要输出的幂次和中的第 N 项(也就是幂次和中的序号N),对应的二进制位数和幂次和对应的二进制位数相同。当 k=3 时,k的幂次为1, 3, 9, 27, 81…,即第0位,第2位均为1,转成 k 进制(k=3)时。,即第2位,第3位均为1,转成 k 进制(k=3)时。转成 k 进制(k=3)时的幂次和为。,即第0位,第1位,第2位均为1,(即第0位,第1位,第2位均为1)N=12时,12的二进制是。(即第0位,第2位均为1)(即第2位,第3位均为1)结论:这道题就变成了。

weixin_40252159的博客 1513

【pytorch】pytorch模型构造(含超详细python代码)

【pytorch】pytorch模型构造(含超详细python代码)

zjutkarma的博客 444

【从零开始学Skynet】基础篇(一):Skynet环境搭建

Skynet运行于Linux操作系统,我们可以在自己的电脑上搭建虚拟机系统,也可以购买阿里云、腾讯云服务器,笔者这个系列的所有代码都是在Ubuntu16.04版本的虚拟机系统下运行编辑。

我是一条寻水的鱼 3167

pytorch的主要模块

1. torch模块 torch模块包含了一些pytorch的常用激活函数,如Sigmoid(torch.sigmoid)、ReLu(torch.relu)和Tanh(torch.tanh);同时也包含了pytorch张量的一些计算操作,如矩阵的乘法(torch.mm)、张量元素的选择(torch.select)。注意,该模块中计算的对象大多数是pytorch张量。 例: a = torch.randn(1,2,3,4,5) torch.numel(a) 2. torch.Tensor模块 torch.

m0_45827246的博客 2853

Python | 集合(set)运算之intersection()

简介 在做力扣题的时候,有一个思路是要求解两个字符串的交集。 一般来说,求解交集的思路是遍历两个字符串,判断有无相等,有相等则添加到交集中,直到循环结束。 但是这样做,会增加很多的不必要的遍历:比如说,当一个字符串中有多个相同的元素时,该元素会被遍历多次。 因此,在求解时,我们可以先将字符串转换为set集合类型。集合中存储的元素没有顺序,且互异(即元素不可重复)。 算例 求字符串m“abcdaaa” 与 字符串n“bcddses”是否存在交集 首先将字符串转换为set类型: m = set(m) n

lovetaozibaby的博客 1万+

爬虫Incapsula reese84加密案例:Etihad航空

声明:该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。

老衲爱洗头的博客 2429

Pytorch的主要模块

介绍下pytorch的主要模块和辅助模块。 Pytorch的主要模块 PyTorch主要包括以下16个模块: 1.torch模块 torch模块本身包含了PyTorch经常使用的一些激活函数,比如Sigmoid(torch.sigmoid)、ReLU(torch.relu)和Tanh(torch.tanh),以及PyTorch张量的一些操作,比如矩阵的乘法(torch.mm)、张量元素的选择(torch.select)。需要注意的是,这些操作的对象大多数都是张量,因此,传入的参数需要是PyTorch

蒲建建 1261

华为MetaERP PTP采购到应付全流程解析

摘要:本文系统解析华为MetaERP中的PTP(采购到应付)全流程管理方案,涵盖从采购申请到付款执行的完整业务流程。文章详细分解了PR、PO、GR、IV、AP等关键环节的财务核算规则,并提供了预算校验、库存更新等Python代码示例。同时阐述了IT落地架构设计,包括会计引擎配置、系统集成方案及银企直连支付接口实现。该方案通过三单匹配自动化和智能会计引擎,将处理效率提升10倍(200笔/人天→2000笔/人天),实现98%的自动化率,为集团企业提供了高效的数字化财务管理样板。文中所有技术方案均需根据实际场景调

金牌架构师 1741

Pytorch的主要模块简介

模块Pytorch的主要模块

qq_42368048的博客 1611

代谢组数据分析(十九):随机森林构建代谢组预后模型

建立胃癌(GC)预后模型时,从队列3中的181名患者中,使用右删失结果数据进行了随机分层抽样,分为训练数据集(n = 121)和测试数据集(n = 60)。训练了一个包含1000棵树的随机生存森林(RSF)模型,根据它们基于排列的特征重要性来选择突出的特征。通过再次训练随机生存模型,并选取28种代谢物,建立了显示出色预测能力(AUROC = 0.832,95% CI:0.697-0.951)的最佳模型,用于预测测试数据集中GC患者的生存结果。

专注生信领域 1713

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

PyTorch的主要模块

PyTorch的主要模块

weixin_45451576的博客 1189

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

pytorch主要模块

pytorch模型搭建及训练基本流程,以及一个实例

Gu_NN的博客 3062

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

PyTorch的主要组成模块

详细介绍了使用PyTorch进行网络模型搭建的过程,并对网络维度,网络参数进行解析。

kevin的博客 617

深入浅出PyTorch-PyTorch的主要组成模块

深度学习和机器学习在流程上基本类似,但在代码实现上有较大差异。

qq_63974399的博客 1599

PyTorch升级之旅——主要组成模块

第三章:PyTorch的主要组成模块 — 深入浅出PyTorch (datawhalechina.github.io)不含模型参数的层通常用于执行简单的操作,例如数据变换。# 测试自定义层在这个例子中,MyLayer类继承了nn.Module,并在forward方法中定义了将输入减去均值的操作。实例化后,调用该层时,它会对输入数据执行定义的操作。含模型参数的层通常用于学习和更新参数。我们可以使用和来定义这些参数。return x# 测试自定义层print(net)在这个例子中,类包含了一个。

qq_53589322的博客 1066

Pytorch的主要组成模块

Pytorch的主要组成模块 一、基本配置 对于一个PyTorch项目,我们需要导入一些Python常用的包来帮助我们快速实现功能。常见的包有os、numpy等,此外还需要调用PyTorch自身一些模块便于灵活使用,比如torch、torch.nn、torch.utils.data.Dataset、torch.utils.data.DataLoader、torch.optimizer等等。 首...

CodeInLinXu 165

Linux深入浅出PyTorch(二)Pytorch主要组成模块及基础实战

Linux下学习PyTorch笔记

weixin_41794514的博客 1201

Pytorch主要组成模块

参考资料: 课程内容链接:https://github.com/datawhalechina/thorough-pytorch 教程视频链接:https://www.bilibili.com/video/BV1L44y1472Z 导入包的方式 import os import numpy as np import torch import torch.nn as nn from torch.utils.data import Dataset, DataLoader import torch.opti

weixin_44630230的博客 417
上一篇: pytorch环境配置及基础知识
下一篇: PyTorch项目实战—FashionMNIST时装分类
Alexa2077
博客等级 码龄7年 839粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值