pytorch
文章平均质量分 72
torch
funNLPer
2 B A NB NLPer
展开
-
【torch】HuggingFace的datasets库中load_dataset方法使用
一些情况下加载数据集的逻辑较为复杂,需要自定义加载方式。比如训练ControlNet时,输入有原始图片,边缘图,以及prompt,这时候我们就需要通过在图片所在的目录下写一个python脚本来处理数据加载方式。如下所示,我们数据处理需要是,每条数据包括两张图片,一个文本。step1: 首先我们先创建一个json文件,把图片和文本对应起来,json文件的格式如下所示step2:创建一个python脚本fill50k.py根据json文件中的对应关系加载图片,python脚本如下所示,这个脚本中定义一个。原创 2023-07-26 00:41:03 · 32889 阅读 · 7 评论 -
transformers库使用--模型构建
1. GPT2相关模型1.1 GPT2模型transformers.GPT2Model简介: 最原始的GPT2模型(bare GPT2),transformer输出的hidden_state后不接任何特殊的网络层。该模型继承PreTrainedModel。使用:from transformers import GPT2PreTrainedModel, GPT2Model, GPT2Configconfig = GPT2Config()# config = GPT2Config.from_j原创 2022-04-13 00:52:01 · 3819 阅读 · 0 评论 -
transformers库使用--tokenizer
在我使用transformers进行预训练模型学习及微调的时候,需要先对数据进行预处理,然后经过处理过的数据才能送进bert模型里,这个过程中使用的主要的工具就是tokenizer。通过与相关预训练模型相关的tokenizer类建立tokenizer,例如,对于Roberta,我们可以使用与之相关的RobertaTokenizer,或者直接通过AutoTokenizer类,这个类能自动的识别所建立的tokenizer是与哪个bert模型相对应。通过tokenizer,它会将一个给定的文本分词成一个token原创 2022-04-13 00:40:29 · 7920 阅读 · 0 评论 -
torch.where()理解
1. torch.where(condition, x, y) → Tensor返回一个tensor,其中的元素根据condition从x或y中选取 out i={xi if condition iyi otherwise \text { out }_{i}= \begin{cases}\mathrm{x}_{i} & \text { if } \text { condition }_{i} \\ \mathrm原创 2022-04-07 00:01:23 · 1769 阅读 · 0 评论 -
torch分布式训练
1. 基本概念rank进程号,在多进程上下文中,我们通常假定rank 0是第一个进程或者主进程,其它进程分别具有1,2,3不同rank号,这样总共具有4个进程node物理节点,可以是一个容器也可以是一台机器,节点内部可以有多个GPU;nnodes指物理节点数量, nproc_per_node指每个物理节点上面进程的数量local_rank指在一个node上进程的相对序号,local_rank在node之间相互独立WORLD_SIZE全局进程总个数,即在一个分布式任务中rank原创 2022-04-05 23:57:25 · 13266 阅读 · 5 评论 -
torch F.cosine_similarity使用
看名字就知道是算余弦相似度,但是有个烦人的参数dim,本文主要解决如下几个问题dim 参数到底有什么作用?如何设置dim参数两个矩阵使用该函数算余弦相似度到底是按列向量来算还是按行向量来算?如果想要算矩阵中每个行向量两两之间的相似度,如何计算?1. dim的作用实验一: dim=0import torch.nn.functional as Fimport torchimport matha = torch.tensor([[1, 2], [3, 4]], dtype=torch.原创 2022-03-30 00:23:30 · 14736 阅读 · 2 评论 -
torch.nn和torch.nn.functional的区别
torch.nn 中大多数 layer 在 torch.nn.funtional 中都有一个与之对应的函数。二者的区别在于:torch.nn.Module 中实现 layer 的都是一个特殊的类, 会自动提取可学习的参数。nn.functional 中的函数,更像是纯函数,由 def function( ) 定义,只是进行简单的数学运算而已。即 functional 中的函数是一个确定的不变的运算公式,输入数据产生输出就ok。而深度学习中会有很多权重是在不断更新的,不可能每进行一次 forward 就用原创 2022-01-24 14:56:41 · 2663 阅读 · 0 评论 -
torch中contiguous()函数
1. 背景torch中一些操作会改变原数据,比如:narrow() view() expand() transpose()等操作,在使用transpose()进行转置操作时,pytorch并不会创建新的、转置后的tensor,而是修改了tensor中的一些属性(也就是元数据),使得此时的offset和stride是与转置tensor相对应的。转置的tensor和原tensor的内存是共享的,即改变转置后的tensor, 原先tensor中内容也会改变,而contiguous方法就类似深拷贝,使得上面这些操原创 2021-10-09 23:50:47 · 5317 阅读 · 3 评论 -
transformer中SequenceSummary:分类好帮手
1. 概述SequenceSummary主要作用是从各种预训练模型的hidden state中抽取出向量来分类。例如在BERT中我们通常选取句子中第一字也就是[CLS]对应的向量来分类,而GPT2中我们会选择最后一个字来做分类。当然,在GPT2中不能直接取最后一个字,比如我们设定句子的最大长度为6,如果输入句子是你好,我们会选择【好】字对应的向量来做分类,而经过padding后输入变成[ 你 好 ],这时我们需要指定cls_index=3,即指定index=3对应的词的向量来分类。而Sequence原创 2021-09-26 01:22:04 · 531 阅读 · 0 评论 -
梯度累加及torch实现
1. 什么是梯度累加我们在训练神经网络的时候,超参数batch size的大小会对最终的模型效果产生很大的影响。一定条件下,batch size设置的越大,模型就会越稳定。batch size的值通常设置在 8-32 之间,但是当我们做一些计算量需求大的任务(例如语义分割、GAN等)或者输入图片尺寸太大的时候,我们的batch size往往只能设置为2或者4,否则就会出现 “CUDA OUT OF MEMORY” 的不可抗力报错。梯度累加就是在有限的计算资源的条件下变相的扩大batch size2. 梯原创 2021-09-21 22:19:06 · 1912 阅读 · 2 评论 -
学习率预热(transformers.get_linear_schedule_with_warmup)
1. 什么是warmupwarmup是针对学习率learning rate优化的一种策略,主要过程是,在预热期间,学习率从0线性(也可非线性)增加到优化器中的初始预设lr,之后使其学习率从优化器中的初始lr线性降低到0,如下图所示:上图中初始learning rate设置为0.0001,设置warm up的步数为100步2. warmup的作用由于刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可原创 2021-09-21 12:44:41 · 25687 阅读 · 3 评论 -
FP16和FP32以及基于Apex的混合精度加速
1. FP16FP16也称为半精度浮点数是一种计算机使用的二进制浮点数数据类型,使用 2 字节(16 位)存储图1. FP16和FP32表示范围对比FP16的表示范围(6∗10−8→655046*10^{-8} \to 655046∗10−8→65504),FP32表示范围(1.4∗10−45→1.7∗10381.4*10^{-45} \to 1.7*10^{38}1.4∗10−45→1.7∗1038)FP16的作用减少显存占用,FP16 的内存占用只有 FP32 的一半,自然地就可以帮助训原创 2021-09-21 02:09:48 · 6622 阅读 · 2 评论 -
梯度裁剪torch.nn.utils.clip_grad_norm_
1. 作用防止梯度爆炸,即设置一个梯度大小的上限,当梯度的范数大于上限时,将该参数的范数设置为上限。补充:范数最常用的是p-范数,若向量x=[x1,x2,⋯ ,xn]Tx=\left[x_{1}, x_{2}, \cdots, x_{n}\right]^{\mathrm{T}}x=[x1,x2,⋯,xn]T,则p范数定义如下∥x∥p=(∣x1∣p+∣x2∣p+⋯+∣xn∣p)1p\|x\|_{p}=\left(\left|x_{1}\right|^{p}+\left|x_{2}\right|原创 2021-09-20 23:56:16 · 1527 阅读 · 0 评论 -
torch.gather()总结
torch.gather沿给定轴 dim ,将输入索引张量 index 指定位置的值进行聚合.1. 二维情况下(1)case1: dim=0import torchtensor_0 = torch.arange(3, 12).view(3, 3)index = torch.tensor([[2, 1, 0]])tensor_1 = tensor_0.gather(0, index)print("tensor_0:", tensor_0)print("tensor_1", tensor_1)原创 2021-08-28 19:21:52 · 532 阅读 · 0 评论 -
torch中构建模型的几种方法总结
1. 模型构建1.1 继承nn.Module该方法是最常用的方法,一个nn.Module应该包含一些层及返回前向传播方法的输出值from torch import nnclass LinearNet(nn.Module): def __init__(self, n_feature): super(LinearNet, self).__init__() self.linear = nn.Linear(n_feature, 1) def forward(原创 2021-04-28 16:24:48 · 1762 阅读 · 0 评论 -
torch中.data和.detach()的区别
1. 概述在 pytorch 中, 有两种情况不能使用 inplace operation对于 requires_grad=True 的 叶子张量(leaf tensor) 不能使用 inplace operation对于在求梯度阶段需要用到的张量不能使用 inplace operation第一种情况: requires_grad=True 的 leaf tensor类似于x = torch.ones(2, 2, requires_grad=True)中的x是直接创建的,它没有grad_fn,原创 2021-04-27 22:32:43 · 4626 阅读 · 0 评论 -
torch中自动求导
1. 概述将一个tensor的.requires_grad属性设置成 True (默认为False),就可以对其进行追踪,并使用.backward()方法来对其求梯度,该tensor的梯度累加在.grad属性中。若该变量不想被追踪可以使用.detach()方法将其从追踪记录中分离出来,此时梯度无法继续传递,也可使用with torch.no_grad()方法将不想被追踪的代表包裹。import torchx = torch.tensor([1.0,2,3,4], requires_grad=True)原创 2021-04-27 19:40:44 · 1652 阅读 · 0 评论 -
pytorch中model.train(),model.eval() 和 torch.no_grad()的区别
1. model.train()如果模型中有BN层或Dropout层,model.train()是保证训练时BN层能够用到每一批数据的均值和方差,对于Dropout,model.train()是随机取一部分网络连接来训练更新参数。2. model.eval()model.eval()的作用是在测试时不启用 Batch Normalization 和 Dropout。在测试时,model.eval()是保证BN层能够用全部训练数据的均值和方差,即测试过程中要保证BN层的均值和方差不变;对于Dropout原创 2021-04-27 16:55:43 · 2357 阅读 · 1 评论 -
pytorch学习率调整
见 torch.optim.lr_scheduler:调整学习率原创 2020-05-31 18:20:25 · 188 阅读 · 0 评论 -
pytorch词嵌入
1. nn.Embeddingtorch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, sparse=False)参数num_embeddings (int) - 嵌入字典的大小embedding_dim (int) -原创 2020-05-31 12:26:47 · 1162 阅读 · 0 评论 -
pytorch -- expand 和 expand_as
1. expand(size)示例:x = torch.rand(1,2,3)print(x)print("x.shape:", x.shape)y = x.expand(2, 2,3)print(y)print("y.shape:", y.shape)输出:tensor([[[0.8020, 0.2300, 0.8632], [0.9463, 0.0172,...原创 2020-01-18 12:46:28 · 700 阅读 · 0 评论 -
pytorch --- tensor.squeeze(dim)和unsqueeze(dim)
tensor.squeeze(dim)作用: 如果dim指定的维度的值为1,则将该维度删除,若指定的维度值不为1,则返回原来的tensor例子:x = torch.rand(2,1,3)print(x)print(x.squeeze(1))print(x.squeeze(2))输出:tensor([[[0.7031, 0.7173, 0.0606]], [[0....原创 2020-01-16 23:33:58 · 14755 阅读 · 3 评论 -
pytorch --- torch.cat()
torch.cat((tensor1,tensor2), dim)将两个tensor连接起来,具体如何连接见下面例子x = torch.rand((2,2,3))y = torch.rand((2,2,3))print("x:",x)print("y:",y)print("dim=0:", torch.cat((x,y),dim=0))print("dim=1:", torch.ca...原创 2020-01-16 23:16:04 · 2477 阅读 · 0 评论 -
pytorch--tensor.copy_()
tensor.copy_(src)将src中的元素复制到tensor中并返回这个tensor; 两个tensor应该有相同shape例子:x = torch.tensor([[1,2], [3,4], [5,6]])y = torch.rand((3,2))print(y)y.copy_(x)print(y)输出tensor([[0.1604, 0.0176], ...原创 2020-01-16 21:17:07 · 14808 阅读 · 0 评论 -
torch.nn.functional.binary_cross_entropy_with_logits
torch.nn.functional.binary_cross_entropy_with_logits(input, target, weight=None, size_average=None, reduce=None, reduction=‘mean’, pos_weight=None)参数说明input神经网络预测结果(未经过sigmoid),任意形状的tensortarget标签值...原创 2020-01-14 12:08:18 · 9590 阅读 · 0 评论 -
pytorch --- tensor.permute()和torch.transpose()
tensor.permute(dim1, dim2, dim3, …)permute可以对任意高维矩阵进行转置.但只有 tensor.permute() 这个调用方式x = torch.rand(2,3,4)print("x.shape:", x.shape)x = x.permute(2,1,0)print("x.shape:", x.shape)输出:x.shape: torc...原创 2020-01-13 15:02:31 · 7082 阅读 · 1 评论 -
pytorch --- torch.bmm()
小批量乘法运算 torch.bmm()假设第⼀个⼩批量中包含n个形状为[a, b]的矩阵 ,第⼆个⼩批量中包含n个形状为[b, c] 的矩阵 。这两个⼩批量的矩阵乘法输出为n个形状为[a, c] 的矩阵 。因此,给定两个形状分别为( n ,a ,b )和(n ,b ,c )的 Tensor ,⼩批量乘法输出的形状为(n ,a ,c )...原创 2020-01-13 13:37:49 · 1555 阅读 · 0 评论 -
pytorch --- torch.utils.data.DataLoder()的使用
torch.utils.data.DataLoader(dataset, batch_size, shuffle, num_workers, collate_fn)参数说明dataset 传入的数据集batch_size每个batch有多少个样本shuffle是否打乱数据num_workers有几个进程来处理data loadingcollate_fn将一个list的sample组成...原创 2020-01-13 12:46:47 · 819 阅读 · 2 评论 -
pytorch中nn.RNN()总结
nn.RNN(input_size, hidden_size, num_layers=1, nonlinearity=tanh, bias=True, batch_first=False, dropout, bidirectional=False)参数说明input_size输入特征的维度, 一般rnn中输入的是词向量,那么 input_size 就等于一个词向量的维度h...原创 2020-01-11 11:41:57 · 23653 阅读 · 7 评论 -
pytorch---torch.stack
torch.stack([tensor1, tensor2, tensor3…], dim=0)基本作用: 将几个矩阵按照dim指定维度堆叠在一起;具体如何堆叠看下方例子import torchx = torch.rand((2,3))y = torch.rand((2,3))z = torch.stack([x, y], dim=0)z2 = torch.stack([x, y], ...原创 2020-01-11 10:27:13 · 646 阅读 · 0 评论