
pytorch
风吹草地现牛羊的马
这个作者很懒,什么都没留下…
展开
-
nn.TransformerEncoderLayer中的src_mask,src_key_padding_mask解析
注意,不同版本的pytorch,对nn.TransformerEncdoerLayer部分代码差别很大,比如1.8.0版本中没有batch_first参数,而1.10.1版本中就增加了这个参数,笔者这里使用pytorch1.10.1版本实验。原创 2023-03-14 13:06:20 · 10088 阅读 · 2 评论 -
实体抽取-将bio标签转为json文件的代码
【代码】实体抽取-将bio标签转为json文件的代码。原创 2023-02-12 19:14:47 · 2211 阅读 · 0 评论 -
pytorch 实现Transformer encoder
【代码】pytorch 实现Transformer encoder。原创 2023-02-01 17:19:47 · 2368 阅读 · 0 评论 -
beam_search
import torchimport torch.nn.functional as Ffrom src.utils import generate_square_subsequent_maskimport mathclass Translator(): def __init__(self, bos_idx, eos_idx, device, max_steps=64, beam_size=3, length_norm_coefficient=0.6): '''原创 2022-03-31 14:27:10 · 710 阅读 · 0 评论 -
Encoder-Decoer模型共享embedding矩阵,embedding矩阵的参数更新问题
最近做生成式问答,尝试用bert做encoder,transformer-decoder做decoder框架来做。遇到一个问题,就是我想让decoder共享bert的embedding矩阵,但是由于设置了decoder和encoder学习速率不同,因此,我不知道embedding矩阵参数如何更新?会不会收到decoder端的影响,于是做了下面的实验。import torchimport torch.nn as nnclass Encoder(nn.Module): def __init__原创 2022-03-29 21:26:49 · 1451 阅读 · 0 评论 -
BertTokenizer在处理中英文混合序列中遇到的问题
直接上代码:from transformers import BertTokenizerpath = '../PTM/bert-base-zh'tokenizer = BertTokenizer.from_pretrained(path)text_1 = '①Goodpasture综合征'text_2 = '1Goodpasture综合征'text_3 = '@Goodpasture综合征'text_4 = 'Goodpasture综合征'print(tokenizer.tokeni原创 2021-11-18 15:32:48 · 2749 阅读 · 0 评论 -
pytorch的in-place问题(a+=b 和a=a+b的区别)
import torchdef f_1(mu): eps = 0.01 mu = mu + eps # 相当于创建了新的变量,原变量没有变 def f_2(mu): eps = 0.01 mu += eps # 没有创建新的变量,对原变量进行操作,也就是in-place mu = torch.ones(2, 4)f_1(mu)print(mu)f_2(mu)print(mu)'''tensor([[1., 1., 1.,原创 2021-08-31 22:43:59 · 344 阅读 · 0 评论 -
dropout的forward过程及backward反向传播过程
forward过程假设以概率ppp丢弃KKK维输入向量x=[x1,x2,,,xK]x=[x_1, x_2, ,, x_K]x=[x1,x2,,,xK]的某些值。那么经过dropout之后的向量定义为ddd,有x′=dropout(x)x' = dropout(x)x′=dropout(x)这个过程相当于生成一个随机的KKK维的mask,这个mask的生成过程如下:r=rand(K)=[r1,r2,,,rK],其中0<ri<1。mask={0原创 2021-08-19 19:48:28 · 3117 阅读 · 0 评论 -
pytorch的scheduler用法
https://zhuanlan.zhihu.com/p/349973983原创 2021-06-29 14:38:19 · 3905 阅读 · 0 评论 -
pytorch中bool类型的张量作为索引
pytorch中bool类型是可以作为索引的,同时也支持sum等操作。索引时相当于取出为True等位置的元素之后组成一个新的tensor.原创 2021-06-21 15:48:39 · 4187 阅读 · 0 评论 -
pytorch 计算图
例1假设我们函数是y=(x+w)∗(w+1)y=(x+w)*(w+1)y=(x+w)∗(w+1),我们要求yyy对x和wx和wx和w的导数,应该如何用pytorch来求解。上面的计算图表示y=(x+w)∗(w+1)y=(x+w)*(w+1)y=(x+w)∗(w+1),先计算括号内部的加法,再计算乘法。计算顺序是:a=x+wa=x+wa=x+w,b=w+1b=w+1b=w+1,y=a∗by=a*by=a∗b。用代码来表示:import torchw = torch.tensor([1.], re原创 2021-01-19 22:50:30 · 1811 阅读 · 3 评论 -
pytorch的求导函数backward和torch.autograd.grad()
pytorch中求导可以借助tensor.backward()和torch.autograd.grad()来完成,backward()函数应该很熟悉了,模型的的参数求导一般是使用这个函数来完成。backward()默认是标量对参数求导,如果是向量对参数求导,要传入一个维度和向量一样的tensor。torch.autograd.grad(outputs, inputs, grad_outputs, retain_graph, create_graph, only_inputs)也可用来对参数求导,这函数的参原创 2020-12-29 22:30:08 · 1333 阅读 · 0 评论 -
jupyter 远程服务器配置
激活你的环境,使用下面的命令安装jupyterpip install jupyter使用下面命令进入~/.jupyter/cd ~/.jupyter生成密码jupyter notebook password会在.jupyter这个目录下面生成文件jupyter_notebook_config.jsonvim jupyter_notebook_config.py,生成一个新的文件。填入下面的内容c.NotebookApp.ip='*' # 星号代表任意ip,这个跟mysql的权限设置一样.原创 2020-12-14 18:52:37 · 262 阅读 · 0 评论 -
pytorch训练过程中出现nan的排查思路
最常见的就是出现了除0或者log0这种,看看代码中在这种操作的时候有没有加一个很小的数,但是这个数数量级要和运算的数的数量级要差很多。一般是1e-8。在optim.step()之前裁剪梯度。optim.zero_grad()loss.backward()nn.utils.clip_grad_norm(model.parameters, max_norm, norm_type=2)optim.step()max_norm一般是1,3,5。前面两条还不能解决nan的话,就按照下面的流程来判.原创 2020-12-11 14:20:58 · 26435 阅读 · 24 评论 -
pytorch计算一个矩阵每一行分别与另一个矩阵的差值
import torchx = torch.randint(10, 20, (3,4)) # [3,1,4]y = torch.randint(0, 9, (2,4)) # [2,1,4]print(x)print(y)z = x.unsqueeze(1) - y.unsqueeze(0) # p[3, 2, 4]'''tensor([[10, 19, 14, 14], [17, 15, 16, 12], [15, 16, 12, 17]])ten原创 2020-09-15 17:02:38 · 1735 阅读 · 1 评论 -
pytorch scheduler学习速率衰减
很多博客都这样写optimizer = torch.optim.SGD(model.parameters(), lr=0.1)scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)def train(...): for i, data in enumerate(train_loader): ...... y_ = model(x) loss原创 2020-09-07 14:52:20 · 576 阅读 · 0 评论 -
pytorch单机多GPU训练方式(微调bert)
本来是用Dataparallel来微调,但是发现gpu0上负载太大了,后来上面一看,pytorch官网推荐使用DistributedDataParallel,这个方法可以用于多机多卡或者单机多卡,速度和各方面都比Dataparallel要好很多。我主要看了下面两个博客:【分布式训练】单机多卡的正确打开方式(三):PyTorchpytorch(分布式)数据并行个人实践总结——DataParallel/DistributedDataParallel这里说一下Dataparallel和Distribute原创 2020-08-26 14:43:32 · 4230 阅读 · 2 评论 -
pytorch 构建one-hot向量
pytorch使用scatter构建onehot向量,scatter不仅可以用来构建one-hot向量,也可以用来对矩阵进行修改。原创 2020-08-12 14:58:59 · 1491 阅读 · 1 评论 -
BERT等语言模型的BertForMaskedLM避的坑
在用transformers中的BertForMaskedLM来预测被mask掉的单词时一定要加特殊字符[CLS]和[SEP][CLS]和[SEP][CLS]和[SEP]。不然效果很差很差!!!from transformers import AlbertTokenizer, AlbertForMaskedLMimport torchtokenizer = AlbertTokenizer.from_pretrained('albert-base-v2', cache_dir='E:/Projects原创 2020-08-11 18:36:03 · 9823 阅读 · 6 评论 -
解决pytorch官网安装慢的办法
以下方法win平台和linux平台应该都可以。第一步:替换源激活conda虚拟环境,并输入以下命令。conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/conda config --set show_channel原创 2020-06-14 00:28:33 · 1695 阅读 · 0 评论 -
pytorch 逻辑回归
import torchfrom torch import nnimport matplotlib.pyplot as pltimport numpy as npdot_num = 100x_p = np.random.normal(3., 1, dot_num)y_p = np.random.normal(6., 1, dot_num)label_p = np.ones(dot_num)C1 = np.array([x_p, y_p, label_p]).T # 标签为1的数原创 2020-05-09 18:10:31 · 281 阅读 · 0 评论 -
Pytorch model中的遍历模型的参数
model.named_parameters()return : 返回model的所有参数的(name, tensor)的键值对。可以修改参数的requires_grad属性。用法 : 常用于对网络的参数进行一些特殊的处理(比如 fine-tuning)。no_decay = ['bias', 'LayerNorm.weight']optimizer_grouped_parameters = [ {'params': [p for n, p in model.named_parame原创 2020-05-09 11:37:18 · 6380 阅读 · 0 评论 -
finetuning Bert时的权重衰减
权重衰减L2正则化的目的就是为了让权重衰减到更小的值,在一定程度上减少模型过拟合的问题,所以权重衰减也叫L2正则化。Bert中的权重衰减并不是所有的权重参数都需要衰减,比如bias,和LayerNorm.weight就不需要衰减。from transformers import BertConfig, BertForSequenceClassification, AdamWimport...原创 2020-05-08 13:36:00 · 2741 阅读 · 4 评论 -
Transformers库简单使用
Transformers库也叫(pytorch-transformers and pytorch-pretrained-bert),提供了很多SOTA的预训练模型,比如BERT, GPT-2, RoBERTa, XLM, DistilBert, XLNet, CTRL…这个库比上一篇博客中讲的 pytorch-pretrained-bert库更完整,bert的使用方法略有不同,不需要自己手动去下...原创 2020-04-17 18:02:40 · 5493 阅读 · 0 评论 -
pytorch-pretrained-bert简单使用
转载自:9012年,该用bert打比赛了从下载模型权重开始# 切换到你的anaconda gpu 环境# source activate 你的conda环境名称# 安装加载预训练模型&权重的包pip install pytorch-pretrained-bert接着就是下载模型权重文件了,pytorch-pretrained-bert官方下载地址太慢了…,推荐去kaggle下载L...转载 2020-04-15 16:41:12 · 24131 阅读 · 15 评论 -
torch.stack()解析
torch.stack()是将原来的几个tensor按照一定方式进行堆叠,然后在按照堆叠后的维度进行切分。有a,b,c三个tensor.dim=0dim=1dim=2参考:torch.stack(), torch.cat()用法详解...原创 2020-04-06 10:59:14 · 2994 阅读 · 0 评论 -
如何将torch.tensor数据类型转化为python的内置类型?
在tensor后面加.item()即可。import torcha = torch.LongTensor([10])b = a.data # 还是tensorc = a.item() # int类型,而且只有单个元素才可以用.item()转化print(b, type(b))print(c, type(c))'''输出tensor([10]) <class...原创 2020-03-30 17:07:30 · 1342 阅读 · 0 评论 -
Pytorch详解NLLLoss和CrossEntropyLoss
Pytorch详解NLLLoss和CrossEntropyLoss原创 2020-03-30 13:32:29 · 865 阅读 · 0 评论 -
rnn_utils.pack_padded_sequence的作用
Pytorch中的RNN之pack_padded_sequence()和pad_packed_sequence()原创 2020-03-29 23:47:35 · 1443 阅读 · 0 评论 -
pytorch的模型保存与读取(state_dict)
pytorch的状态字典 state_dict原创 2020-02-25 16:58:01 · 9141 阅读 · 0 评论 -
pytorch的自动求导
PyTorch简明笔记[2]-Tensor的自动求导(AoutoGrad)原创 2019-12-10 14:19:30 · 139 阅读 · 0 评论 -
pytorch常用函数
torch.cat()torch.squeeze()torch.unsqueeze()torch.stack()torch.sum()torch.sum(input, dim, out=None) → Tensor#input (Tensor) – 输入张量#dim (int) – 缩减的维度#out (Tensor, optional) – 结果张量...原创 2019-12-10 13:31:19 · 356 阅读 · 0 评论 -
pytorch基本数据类型
PyTorch基础入门一:PyTorch基本数据类型原创 2019-12-09 16:34:48 · 138 阅读 · 0 评论 -
conda安装pytorch-gpu版本下载出错的问题解决
换了清华的源之后,官网的命令是下面的:conda install pytorch=1.1.0 torchvision=0.3.0 cudatoolkit=9.0 -c pytorch但是经常会报HTTP error的错误,将-c pytorch删除即可conda install pytorch=1.1.0 torchvision=0.3.0 cudatoolkit=9.0...原创 2019-12-09 13:08:28 · 1198 阅读 · 1 评论 -
pytorch nn.LSTM(),nn.GRU()参数详解
函数class torch.nn.LSTM(*args, **kwargs)参数列表input_size:x的特征维度hidden_size:隐藏层的特征维度num_layers:lstm隐层的层数,默认为1bias:False则bih=0和bhh=0. 默认为Truebatch_first:True则输入输出的数据格式为 (batch, seq, feature)dropou...原创 2019-11-29 16:09:19 · 20435 阅读 · 0 评论 -
pytorch中一些函数的讲解
pytorch中的ModuleList 和 Sequential: 区别和使用场景PyTorch 中,nn 与 nn.functional 有什么区别原创 2019-11-29 15:01:33 · 168 阅读 · 0 评论 -
PyTorch中的nn.Conv1d与nn.Conv2d
一维卷积nn.Conv1d一般来说,一维卷积nn.Conv1d用于文本数据,只对宽度进行卷积,对高度不卷积。通常,输入大小为word_embedding_dim * max_length,其中,word_embedding_dim为词向量的维度,max_length为句子的最大长度。卷积核窗口在句子长度的方向上滑动,进行卷积操作。定义class torch.nn.Conv1d(in_chan...原创 2019-11-29 14:35:21 · 1806 阅读 · 0 评论 -
pytorch如何读取词向量(nn.Embedding)
如何从已经训练好的词向量矩阵中读取词向量呢?假设embeddings是我们训练好的词向量矩阵,我们要从中每次读取batch_size个句子的词向量。# 首先使用nn,Embedding定义一个词向量矩阵,称作embedembed = nn.Embedding(embeddings.shape[0], embeddings.shape[1])# 接下来将embeddings中的值拷贝到emb...原创 2019-10-11 13:24:22 · 3554 阅读 · 0 评论