pytorch零碎笔记

Python 随机种子介绍,PyTorch 中随机种子的设置与应用 随机种子是针对随机方法而言的。常见的随机方法有 生成随机数,以及其他像 随机排序 之类的,后者本质上也是基于生成随机数来实现的。在深度学习中,比较常用的随机方法的应用有:网络的随机初始化,训练集的随机打乱等。 阅读详情

为什么要设置随机种子

模型搭建过程中,参数都需要进行初始化,如果每次初始化的结果不同,训练模型的结果就不一样
因此为了保证每次输出结果一致,就需要设置随机数种子,保证代码的可复现性

random.random() #这个方法生产每次产生的随机数都是不同的
random.seed(x) #只要设定了随机数种子x,那么得到的随机数序列就是相同的

随机数种子的值可以是任意数字

数据规范化

规范化后平均值为0,标准差为1

内置函数 .mean() 、 .std()函数可以分别用来计算平均值和标准差

数据扩充

导入torchvision.transforms模块,用于人工创建更多数据集的方式操纵可用的训练数据。

  • .RandomRotation(x):在(-x,+x)度之间随机旋转图像
  • .RandomCrop(a,b):在图像周围以b为大小填充,人为扩大,然后再按照a×a的大小裁剪
  • .ToTensor():将图像从PIL图像转换为PyTorch张量
  • .Normalize(mean=[mean], std=[std]):规范化,减去平均值mean,然后除以给定的标准差std

模型定义

class 模型名称(nn.Model):
	def __init__ (self,input_dim,output_dim):
		super().__init__()
		self.input_fc = nn.连接方式(input_dim,输出维度)
		self.hidden_fc1 = nn.连接方式(输入维度,输出维度)
		#多个隐藏层
		self.output_fc = nn.连接方式(输入维度,output_dim)
	def foward(self,x)
		h_1 = F.激活函数(self.input_fc(x))
		h_2 = F.激活函数(self.hidden_fc1(h_2))
		#...
		h_n = F.激活函数(self.hidden_fcn(h_n-1))
		y_pred = self.output_fc(h_n)

定义训练循环

#定义优化器
optimizer = optim.优化器名(model.parameters())
#定义损失函数,如:criterion = nn.CrossEntropyLoss()
LossFunction = nn.损失函数名()
def train(model,iterator,optimizer,LossFuction):
	epoch_loss = 0	#损失总和
	epoch_acc = 0	#精确度总和
	model.train()
	for (x,y) in iterator:
		optimizer,zero_grad()#自动清除梯度
		y_pred = model(x)
		loss = LossFunction(y_pred,y)	#计算loss
		acc = calculate_accuarcy(y_pred,y)	#计算准确度
		loss.backward()	#梯度下降
		optimizer.step()
		
		epoch_loss += loss.item()
		epoch_acc += acc.item()
	return epoch_loss/len(iterator), epoch_acc/len(iterator)

常用函数

reshape()

用于转变数组或矩阵的的形状,常用,特此记录一下
reshape()的默认排列方式是"按行"排列,即行优先,reshape(m,n)=reshape(m,n,order=‘c’);若要改为“按列”排列,可通过修改order参数进行改变,即reshape(m,n,order=‘f’)
参数-1表示无意义
reshape(-1,n)代表将数组重整为n列的二维数组
reshape(n,-1)代表将数组重整为n行的二维数组

transforms.Compose()

torchvision 是pytorch的一个图形库,常用函数有:

  • torchvision.datasets: 一些加载数据的函数及常用的数据集接口;
  • torchvision.models: 包含常用的模型结构(含预训练模型),例如AlexNet、VGG、ResNet等;
  • torchvision.transforms: 常用的图片变换,例如裁剪、旋转等;
  • torchvision.utils: 其他的一些有用的方法。

在这其中,transforms.Compose()用于串联多个图片变换的操作,transform中的常用操作:

  • Resize:把给定的图片resize到给定size
  • Normalize:用均值和标准差归一化张量图像
  • ToTensor:将PIL图像转换为[0,255]范围内的张量(HWC),[0.0,1.0]范围内的张量(CHW)
  • ToPILImage:将张量转换为PIL图像
  • Scale:目前已经不用了,推荐用Resize
  • CenterCrop:在图片的中间区域进行裁剪
  • RandomCrop:在一个随机的位置进行裁剪
  • RandomHorizontalFlip:以0.5的概率水平翻转给定的PIL图像
  • RandomVerticalFlip:以0.5的概率竖直翻转给定的PIL图像
  • RandomResizedCrop:将PIL图像裁剪成任意大小和纵横比
  • Grayscale:将图像转换为灰度图像
  • RandomGrayscale:将图像以一定的概率转换为灰度图像
  • FiceCrop:把图像裁剪为四个角和一个中心
  • TenCrop
  • Pad:填充
  • ColorJitter:随机改变图像的亮度对比度和饱和度。

data.DataLoader

DataLoader 是PyTorch读取数据的一个重要接口,基本上用PyTorch训练模型都会用到。这个接口的目的是:将自定义的Dataset根据batch size大小、是否shuffle等选项封装成一个batch size大小的Tensor,后续只需要再包装成Variable即可作为模型输入用于训练。

class torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,
	batch_sampler=None, num_workers=0, collate_fn=<function default_collate>, 
	pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None)

常用参数有:

  • dataset (Dataset):定义要加载的数据集。
  • batch_size (int, optional):定义batch_size大小,也就是一次加载样本的数量,默认是1。
  • shuffle (bool, optional):在每个epoch开始的时候,是否进行数据重排序,默认False.
  • sampler (Sampler, optional):定义从数据集中取样本的策略,如果进行了指定,那么shuffle必须是False。
  • batch_sampler (Sampler, optional):与上一个参数sampler相似,但是一次只返回一个batch索引(indices),另外batch_sampler与batch_size,shuffle,sampler,drop_last互斥,也就是说设定了这个,其他四个就不能设定了。
  • num_workers (int, optional):定义加载数据使用的进程数,0代表所有的数据都被装载进主进程,默认是0。
  • collate_fn (callable*, *optional):将一个list的sample组成一个mini-batch的函数.
  • pin_memory (bool, optional):如果设定为True,那么data loader将会在返回之前,将tensors拷贝到CUDA中的固定内存。
  • drop_last (bool, optional): 这个是对最后的未完成的batch来说的,比如你的batch_size设置为64,而一个epoch只有100个样本,如果设置为True,那么训练的时候后面的36个就被扔掉了。如果为False(默认),那么会继续正常执行,只是最后的batch_size会小一点。
  • timeout (numeric, optional): 如果是正数,表明从worker进程中收集一个batch等待的时间,若超出设定的时间还没有收集到,那就不收集这个内容了。这个numeric总是大于等于0。默认为0。
  • worker_init_fn (callable, optional):每个worker的初始化函数,如果设置成None, 则在数据加载之前,在每个worker子进程上调用它,并将worker id ([0, num_workers - 1])作为输入。(默认值:无)

torch.nn.Conv2d()

Conv2d(in_channels, out_channels, kernel_size, stride=1,padding=0, dilation=1, groups=1,bias=True, padding_mode=‘zeros’)

对由多个输入平面组成的输入信号进行二维卷积,常用参数有:

  • in_channels (int) : 输入图像通道数
  • out_channels (int) :卷积产生的通道数
  • kernel_size (int or tuple) : 卷积核尺寸,可以设为1个int型数或者一个(int, int)型的元组。例如(2,3)是高2宽3卷积核
  • stride (int or tuple, optional) : 卷积步长,默认为1。可以设为1个int型数或者一个(int, int)型的元组。
  • padding (int, tuple or str, optional) : 填充操作,控制padding_mode的数目,默认为0
    设置在所有边界增加 值为 0 的边距的大小(也就是在feature map 外围增加几圈 0 ),例如当 padding =1 的时候,如果原来大小为 3 × 3 ,那么之后的大小为 5 × 5 。即在外围加了一圈 0
  • padding_mode (string, optional) :padding模式,默认为Zero-padding 。 字符串类型,接收的字符串只有 “zeros” 和 “circular”
  • dilation (int or tuple, optional) : 扩张操作:控制kernel点(卷积核点)的间距,默认值:1。
  • groups (int, optional) : group参数的作用是控制分组卷积,默认不分组,为1组。
    groups 为1,那么所有的输入都会连接到所有输出
    当 groups 为 2的时候,相当于将输入分为两组,并排放置两层,每层看到一半的输入通道并产生一半的输出通道,并且两者都是串联在一起的。这也是参数字面的意思:“组” 的含义。
    需要注意的是,in_channels 和 out_channels 必须都可以整除 groups,否则会报错
    在这里插入图片描述
  • bias (bool, optional) :为真,则在输出中添加一个可学习的偏差。默认:True。

torch.nn.Linear()

用于设置网络中的全连接层

torch.nn.Linear(in_features,out_features,bais=True)

in_features:输入样本的大小
out_features:输出样本的大小
从输入输出的张量的shape角度来理解,相当于一个输入为[batch_size, in_features]的张量变换成了[batch_size, out_features]的输出张量。

torch.nn.Parameter()

将一个固定不可训练的tensor转换成可以训练的类型parameter,并将这个parameter绑定到这个module里面(net.parameter()中就有这个绑定的parameter,所以在参数优化的时候可以进行优化的),所以经过类型转换这个self.v变成了模型的一部分,成为了模型中根据训练可以改动的参数了。
nn.Parameter()添加的参数会被添加到Parameters列表中,会被送入优化器中随训练一起学习更新
在nn.Module类中,pytorch 也是使用 nn.Parameter来对每一个module的参数进行初始化的

self.v = torch.nn.Parameter(torch.FloatTensor(hidden_size))

torch.nn.Identity()

源码如下:

class Identity(Module):
    r"""A placeholder identity operator that is argument-insensitive.
    Args:
        args: any argument (unused)
        kwargs: any keyword argument (unused)
    Examples::
        >>> m = nn.Identity(54, unused_argument1=0.1, unused_argument2=False)
        >>> input = torch.randn(128, 20)
        >>> output = m(input)
        >>> print(output.size())
        torch.Size([128, 20])
    """
    def __init__(self, *args, **kwargs):
        super(Identity, self).__init__()
 
    def forward(self, input: Tensor) -> Tensor:
        return input

identity模块不改变输入,直接return input
不区分参数的占位符标识运算符。其实意思就是这个网络层的设计是用于占位的,即不干活,只是有这么一个层,放到残差网络里就是在跳过连接的地方用这个层,显得没有那么空虚!
比如我们要加深网络,有些层是不改变输入数据的维度的,在增减网络的过程中我们就可以用identity占个位置,这样网络整体层数永远不变

利用Pytorch搭建简单的图像分类模型(之三)---训练与测试的函数编写 有关训练函数的编写,包含损失的计算、准确率的计算等。 阅读详情

相关推荐

刘二大人《PyTorch深度学习实践》

刘二大人《PyTorch深度学习实践》线性模型 线性模型 损失函数是针对一个样本的 training set得到的是一个平均平方误差MSE 穷举法绘制损失曲线:numpy和matplotlib import numpy as np import matplotlib.pyplot as plt #数据集 x_data = [1.0,2.0,3.0] y_data = [2.0,4.0,6.0] #定义模型 def forward(x): return x * w #定义损失函数 def loss

baimenglin的博客 3558

剖析深度学习中的epoch与batch_size关系、代码

为了区分深度学习中这两者的定义,详细讲解其关系以及代码在 PyTorch 中,“epoch”(周期)和 “batch size”(批大小)是训练神经网络时的两个重要概念它们用于控制训练的迭代和数据处理方式。Epoch 是指整个训练数据集被神经网络完整地遍历一次的次数。在每个 epoch 中,模型会一次又一次地使用数据集中的不同样本进行训练,以更新模型的权重。通常,一个 epoch 包含多个迭代(iterations),每个迭代是一次权重更新的过程。

码农研究僧的博客 1万+

Pytorch学习系列之十:如何确定合适的epoch数、在加载的模型基础上继续训练

1,使用背景 当有以下两种情况时: 1) 不知道训练的epoch选取为何值时。过小,训练不充分,泛化能力差; 过大,训练过度,导致过拟合。所以需要动态观察每个epoch后,模型在验证集(也可以不严谨的说是测试集)上的精度,选取精度最大的epoch作为最终的训练结果。 2)在加载的模型基础上继续训练。 在训练模型的时候可能会因为一些问题导致程序中断,或者常常需要观察训练情况的变化来更改学习率等参数,这时候就需要加载中断前保存的模型,并在此基础上继续训练。 2,实战代码 本文以CIFAR10数据

thequitesunshine007的博客 1万+

Pytorch不得不看的基础

Conv Conv1d torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode=‘zeros’, device=None, dtype=None) in_channels(int) – 输入信号的通道。在文本分类中,即为词向量的维度 out_channels(int) – 卷积产生的通道。有多少个out_channel

JamesShuker的博客 618

别再只飞不记了!用CsvView分析你的大疆飞行日志,优化航拍与排查炸机原因

本文详细介绍了如何利用CsvView工具分析大疆无人机的飞行日志,帮助用户优化航拍效率和飞行安全。通过解读飞行日志中的关键数据,如电池性能、飞行轨迹等,用户可以及时发现潜在问题并改进飞行习惯。文章还提供了事故排查方法和进阶分析技巧,适合无人机爱好者和专业飞手。

weixin_42535461的博客 549

UE5 VlcMedia 插件编译与流媒体播放实战

本文详细介绍了在虚幻引擎5中编译并集成VlcMedia插件以解决流媒体播放难题的实战指南。针对UE5不再默认支持Win32 API导致的编译错误,文章提供了核心的构建配置文件修改步骤,并指导如何启用插件、创建VLC媒体播放器,最终成功播放如.m3u8等格式的网络直播流或点播视频。

weixin_29013129的博客 339

【Pytorch 01】Pytorch 环境的配置及安装 及 一些非常零碎的细节

1. 安装 Anoconda 2. 在电脑中任务管理器的性能选项卡中可以看到自己GPU的状态。 3. 在 Anoconda Prompt 中 执行: 4. 下载好package后,激活pytorch 5. 在pytorch上复制命令到 Anoconda Prompt 。 6. 判断pytorch是否安装成功。 7. 在 pytorch 中安装jupter notebook 8. 在 jupter notebook 运行中用 shift + enter 执行语句。 9. 输入 nvidia-

weixin_42322991的博客 1283

C语言|深入浅出讲解int转换为float全过程(附2017年统考大题案例)

int转换为float类型为什么会发生精度损失? 精度损失的详细过程究竟是什么样的? 什么样情况float会发生精度损失?没有弄懂2017年浮点数统考大题? 这一篇用2017年统考大题案例帮你更深的理解浮点数的存储规则。

DADONGOOO的博客 1万+

Pytorch使用 零碎记录

Pytorch 记录

Ray Home 695

【HCIE】FRR+BFD+OSPF与BGP联动

FRR+BFD+OSPF与BGP联动

Wenrs的博客 1997

OpenAI,从推出更强大的Sora 2模型展开探索与未来发展前景+部署方法大全+文末邀请码*12

摘要 OpenAI推出的Sora 2是第二代AI视频生成模型,在多模态内容生成领域实现重大突破。文末足足有12个邀请码,速来速享!!!

aqfcca的博客 2248

简单图像分类网络零碎笔记

填充和步幅是卷积层的超参数填充在输入周围添加额外的行、列,来控制输出形状的减少量步幅是每次滑动核窗口时的行/列的补偿,可以城北的减少输出形状卷积核的大小是奇数;所有边的填充行数和列数相同;输出与输入具有相同高度和宽度 则可以得出:输出Y[i, j]是通过以输入X[i, j]为中心,与卷积核进行互相关计算得到的。填充可以增加输出的高度和宽度。这常用来使输出与输入具有相同的高和宽。步幅可以减小输出的高和宽,例如输出的高和宽仅为输入的高和宽的1/�(�是一个大于1的整数)。

颈椎小问题老奶奶的博客 197

C#海康威视摄像头控制,将IntPtr转换成Bitmap图片

C#通过skd控制海康威视摄像头,获取bitmap格式图片

ReflexMechanism的博客 6586

目标检测零碎笔记

命令式(解释型)编程和符号式编程的区别如下:命令式编程更容易使用。在Python中,命令式编程的大部分代码都是简单易懂的。命令式编程也更容易调试,这是因为无论是获取和打印所有的中间变量值,或者使用Python的内置调试工具都更加简单;符号式编程运行效率更高,更易于移植。符号式编程更容易在编译期间优化代码,同时还能够将程序移植到与Python无关的格式中,从而允许程序在非Python环境中运行,避免了任何潜在的与Python解释器相关的性能问题。

颈椎小问题老奶奶的博客 129

淘系商品的成长密码:历史与趋势透视

本文分析了淘系商品的发展历程,从早期的市场探索到如今的行业领先地位,深入探讨了技术创新、供应链优化、用户需求洞察等关键因素在淘系商品成功中的作用。通过对平台不断完善商品生态、提升购物体验和服务的过程分析,文章总结了淘系商品在竞争激烈的市场中如何通过创新应对挑战并推动电商行业的进步。未来,随着消费趋势变化和新兴模式的兴起,淘系商品将在更大范围内发挥其市场影响力。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

c#仿热血江湖

Int32_1 = (int) table.Rows[i]["FLD_初级附魂"],Int32_2 = (int) table.Rows[i]["FLD_中级附魂"],Int32_3 = (int) table.Rows[i]["FLD_是否绑定"],Int32_0 = (int) table.Rows[i]["FLD_进化"],Form1.smethod_1(2, "加载百宝阁物品----没有百宝阁数据");Form1.smethod_1(2, "加载物品商店----没有物品数据");

weixin_42132177的博客 143

python,pytorch的零碎函数知识点

1,isinstance 描述:isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。 区别:isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系。 isinstance() 会认为子类是一种父类类型,考虑继承关系。 如果要判断两个类型是否相同推荐使用 isinstance()。 语法:isinst...

温瞳 460

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

PyTorch 预分配显存是什么,为什么会有PyTorch 预分配显存

在 GPU 训练时,PyTorch如果不预分配,每次创建 Tensor 都向 GPU 申请内存,会有cudaMalloccudaMalloc假设 PyTorch这样每次xcudaMalloccudaFree1024**2.2f1024**2.2f1024**2.2f1024**2.2fxx。

陈开心的博客 1741

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

关于python的小零碎

虽然天天都用python,但仔细想想自己对python也没啥了解…pytorch代码都是从github上东抄抄西抄抄然后自己改的,在写其他python代码的时候也是随时百度谷歌…这要是面试的时候问起来python的一些细节答不出来太丢人了啊!此博客用来记录python这个语言的一切,随时补充。 1. Python和其他语言的区别 Python是解释型语言。这意味着不像C和其他语言,Python运行前不需要编译。 Python是动态类型的,这意味着你不需要在声明变量时指定类型。你可以先定义x=111.

weixin_41332009的博客 248

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

模型搭建零碎小知识点

cascade级联和concatenate串联区别是什么? 级联将上一系统的输出作为下一系统的输入, 串联将两个系统的输出相加.

xihewen的博客 568

PyTorch 基础操作总结

torch 张量的一些基本操作,torch 张量乘法,pytorch 数据集类 Dataset,DataLoader,torchvision 中的 transforms、datasets,torch 中 SVD 分解,特征值分解,QR 分解,利用 torch 进行深度学习的基本框架

上官永石的博客 3386

【Python】知识点零碎学习1

本文摘要: 介绍了Python和PyTorch中常用的数据处理方法:1)列表操作包括创建、拼接和引用赋值;2)字符串分割方法rsplit的使用;3)PyTorch中随机数生成函数(rand,randn,randint,randperm)的特点;4)张量拼接函数torch.stack的用法;5)最大值索引函数torch.argmax的工作原理;6)NumPy数组交集函数intersect1d的参数和返回值。这些方法涵盖了数据处理中的常见需求,包括列表操作、字符串处理、随机数生成、张量操作和数组运算等基础功能。

随缘不强求,反正也求不来 966

VREP ——学习零碎

1、教程 https://www.cnblogs.com/21207-iHome/p/7844865.html https://www.jianshu.com/p/839c4defd4fb

weixin_40820983的博客 842

pytorch杂记本

本博客用于记录在学习pytorch时遇到的零碎问题 测试代码用时 参考: https://blog.youkuaiyun.com/u013548568/article/details/81368019 https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-cuda/ torch.cuda.synchronize() # 等待当前设备上所有流中的所有核心完成。 start = time.time() result = model(inpu

-徐徐图之-的博客 659

代码pytorch

model.train() 和 model.eval() 一般在模型训练和评价的时候会加上这两句,主要是针对由于model 在训练时和评价时 Batch Normalization 和 Dropout 方法模式不同: model.eval(),不启用 BatchNormalization 和 Dropout。此时pytorch会自动把BN和DropOut固定住,不会取平均,而是用训练好的值。不然的话,一旦test的batch_size过小,很容易就会因BN层导致模型performance损失较大; mod

lsfeitianzhuzhuxia的博客 532
上一篇: 面向对象
楼星辰
博客等级 码龄7年 48粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值