![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pytorch
关于pytorch
Muasci
keep open
keep real
keep smiling
不要忘记命运掌握在自己的手里,确保做的每一件事,都是自己选择去做的,成为时间这敌人的主宰,成为自己的存在。记得常怀愤怒,并把它转化成热情,选择一切、拥抱一切、坚持一切、把一切视作敌人、战胜一切。<----曾经的发言( ╯□╰ )
展开
-
[pytorch]——torch.gather(以BERT中的MLM为例)
前言都知道BERT中有MLM的任务,假设此时ENCODER的输出output的大小为: batch_size x max_len x d_model,而对于每一个句子,都有对应的数个被mask掉的单词,所以假设被mask掉的单词下标矩阵大小为:batch_size x mask_num。那么,我们要做的,就是在output的每一个句子中,按照下标,选择mask_num个单词,从而组成:batch_size x mask_num x d_model大小的矩阵,再通过线性层,进行分类。具体代码如下:mas原创 2021-05-17 22:16:56 · 1323 阅读 · 0 评论 -
[pytorch]——用flatten和index_select实现embedding look_up
代码batch_size, n_features = w.shapeemb_out = self.embeddings.index_select(0, w.flatten())x = emb_out.view(batch_size, -1) # -1 means: n_features * embed_size也就是x = self.embeddings(w)原创 2021-04-18 16:16:09 · 400 阅读 · 0 评论 -
TypeError: can‘t pickle _thread.RLock object解决
问题我的代码长这样:但是报错了:我要保存的四个东西,分别是三个dataloader,和一个模型。问题解决我尝试着单独保存那个模型,没有问题,所以问题出在了dataloader,进一步想,问题应该出在了dataset上。果然,在使用pickle时遇到TypeError: can’t pickle _thread.RLock object中,我看见这位博主在对象中加入了Logger对象,其实我也加了:然后我把它去掉了就好了。同样的,我也知道了为什么我的模型保存不了了。。。参考pickl原创 2021-01-01 15:25:55 · 7350 阅读 · 3 评论 -
pytorch&numpy矩阵运算指南
前言写代码会遇到各种矩阵(张量)运算,这篇博客会从记录最基础的加减乘除,也会记录一些遇见过的"骚操作"。删除某一行背景描述:feats: batch_size, max_sentence_length, tag_numlengths: 记录了每一篇文章的实际句子数max_sentence_length:最大句子长度想要删除feats中每一篇文章的最后一个句子实操:import torchfeats = torch.tensor( # 2, 3, 3 [ [[1原创 2020-12-05 22:32:13 · 766 阅读 · 0 评论 -
手把手教你使用torchtext
文章目录前言import自定义Dataset(写在__ init __ function)初始化Field初始化examples用Field和example构建Dataset产生迭代器(写在iters function)数据划分splits(实例化Dataset)实例化迭代器建立词表扯点别的——数据增强参考前言本文记录torchtext的简单使用,大致流程如下import需要的包自定义Dataset(__ init __ function)产生迭代器(iters function)impor原创 2020-11-27 22:34:40 · 877 阅读 · 0 评论 -
DistributedDataParallel的简单使用/常见问题/一些原理
importfrom torch.utils.data.distributed import DistributedSamplerimport torch.distributed as distargments在参数中添加local_rankparser.add_argument("--local_rank",type = int,default=-1)主函数local_rank = parser.local_rankdevice = local_rank if local_rank !原创 2020-11-25 10:52:08 · 6861 阅读 · 1 评论 -
tensor.scatter_(dim,index,src)理解
前言看到这样一行代码label = torch.zeros_like(pred_label)label.scatter_(1, batch_data.label.cuda().unsqueeze(dim=1), 1)解释我们先来看看pred_label的大小我们再来看看batch_data.label的大小tensor.scatter_(dim,index,src)这三个参数在这里设置为dim=1:...原创 2020-11-23 11:39:18 · 435 阅读 · 0 评论 -
自定义dataloader里的batch_sampler,你就不需要再做padding了!
前言今天看代码,居然已经水了三篇…这是第四篇。在说batch_sampler之前,这里不要脸的放一下之前关于dataset和dataloader的博客正文我在下面的代码中第一次看到了batch_sampler,于是好奇去看看这个FixedLengthBatchSampler到底在干嘛。iter(self)首先它放到dataloader里,肯定是要迭代生成一些东西,所以先去看它的__iter__()然后发现它做了两件事情...原创 2020-11-17 07:42:25 · 6458 阅读 · 9 评论 -
pytorch处理padding变长后的RNN输入
文章目录为什么要处理变长输入?pytorch如何处理变长?具体如何使用?记得标签要对应总结为什么要处理变长输入?一般的,在通过embedding层转换为词向量之前,我们的输入形式如下:batch_size * max_len,每一个句子都是一个列表,其中的元素是单词对应的下标。如果一个句子原来的长度<max_len,我们需要进行padding操作,即在这个列表里填0,0下标表示< pad >这一个单词,它的词向量表示一般是随机初始化的。在这里,max_len就是6,那么对于第二个句原创 2020-07-10 23:19:36 · 796 阅读 · 0 评论 -
torch.repeat()
在写transformer代码的时候见到了torch.repeat()这个函数,关于它的输入输出规格,想到了一个很好记的方法。下面的三段代码就可以帮助理解了。a = torch.arange(512)b = a.repeat(1,32)print(b.shape)# b:(1,32*512)a = torch.ones(32,100)b = a.repeat(1,2,3)# b:(1,2*32,3*100)a = torch.ones(32,100)b = a.repeat(10)# R原创 2020-06-13 18:18:06 · 5425 阅读 · 3 评论 -
lstm&bilstm输入输出格式(附代码)
Lstmself.lstm = nn.LSTM(input_size=self.input_size, hidden_size=self.hidden_size, num_layers = self.num_layers, batch_first=True, bidirectional=False, drop原创 2020-06-10 20:14:57 · 9951 阅读 · 3 评论 -
如何将自己的数据集包装成dataloader? 4种方法包你会!
前言我们经常会遇到这样的情况:使用的数据并不是库自带的,这样的话,不管是训练还是测试,都需要我们来自行实现索引我们的data,并且是每一次按照一个batch_size的规格来索引。我刚开始想的是(假设我有100个样本),自己建一个index表,如idx = np.arange(1,100,1),先将它shuffle(idx)一下,然后每一次取batch_size个下标进行索引,但总觉得有一丢丢不自然。方法一:Dataset & Dataloaderfrom torch.utils.data i原创 2020-06-02 22:30:38 · 5632 阅读 · 0 评论 -
PyTorch的十八个损失函数
转载自:https://blog.csdn.net/u011995719/article/details/85107524转载请注明出处 本文截取自《PyTorch 模型训练实用教程》,获取全文pdf请点击:https://github.com转载 2020-05-31 21:29:29 · 217 阅读 · 0 评论 -
torch之torch.flatten()
input: 输入,类型为Tensor。start_dim: 推平的起始维度。end_dim: 推平的结束维度。import torcha = torch.ones(2,3,4,5)b = torch.flatten(a,start_dim=0,end_dim=2)# 从0维开始往后推,推到第2维。所以最后应该是:(2*3*4,5)print(b.shape)b = to...原创 2020-05-07 11:26:34 · 1166 阅读 · 0 评论 -
word-embedding(skip-gram)(pytorch入门3)
第二课 词向量第二课学习目标学习词向量的概念用Skip-thought模型训练词向量学习使用PyTorch dataset和dataloader学习定义PyTorch模型学习torch.nn中常见的ModuleEmbedding学习常见的PyTorch operationsbmmlogsigmoid保存和读取PyTorch模型第二课使用的训练数据可以从以下链...原创 2020-05-02 14:58:23 · 1117 阅读 · 0 评论 -
torch.multinomial()
先看一下定义(没上官网,在外,热点上不去)def multinomial(self: Tensor, num_samples: _int, replacement: _bool=False, *, generator: Generator=None, out: Optional[Tensor]=None) -> Tensor: ...参数:input:我也不知道为何上面的函数参数中没...原创 2020-05-02 10:22:27 · 757 阅读 · 0 评论 -
FizzBuzz神经网络实现(pytorch入门2)
FizzBuzzFizzBuzz是一个简单的小游戏。游戏规则如下:从1开始往上数数,当遇到3的倍数的时候,说fizz,当遇到5的倍数,说buzz,当遇到15的倍数,就说fizzbuzz,其他情况下则正常数数。我们可以写一个简单的小程序来决定要返回正常数值还是fizz, buzz 或者 fizzbuzz。# One-hot encode the desired outputs: [number...原创 2020-05-01 10:32:12 · 768 阅读 · 0 评论 -
两层线性神经网络的多种实现方法(pytorch入门1)
Numpy实现完全用numpy写,第一层线性层,第二层relu激活层,第三层线性层# 用numpy实现两层神经网络import numpy as npN,D_in,H,D_out = 64,1000,100,10x = np.random.randn(N,D_in)y = np.random.randn(N,D_out)# w1 = np.random.rand(D_in,H)#...原创 2020-04-29 19:37:09 · 997 阅读 · 0 评论 -
torch.nn定义简单的线性神经网络
官网实践:定义了两个线性层,中间夹一个relu激活层,100维的输入可以得到1维的输出import torch.nn as nnimport torchN,D_in,H,D_out = 10,100,10,1model = nn.Sequential( nn.Linear(D_in,H), nn.ReLU(), nn.Linear(H,D_out),)x =...原创 2020-04-29 16:55:33 · 415 阅读 · 0 评论 -
手写relu激活函数(numpy、torch)
Numpy:import numpy as npx = np.random.randn(100)x_relu = np.maximum(x,0)Pytorch:import torchx = torch.randn(100)x_relu = torch.clamp(x,min = 0)关于torch.clamp:examples:a = torch.randn(4)a&g...原创 2020-04-29 16:08:42 · 925 阅读 · 0 评论 -
torch的cuda
当然,我没有GPU原创 2020-04-29 15:01:10 · 174 阅读 · 0 评论 -
numpy与torch转换
torch转numpyimport numpy as npimport torcha = torch.ones(5)b = a.numpy()b:array([1., 1., 1., 1., 1.], dtype=float32)此时,两者共享一个内存空间:b[1] = 2b:array([1., 2., 1., 1., 1.], dtype=float32)a:Out[1...原创 2020-04-29 14:51:07 · 1803 阅读 · 0 评论 -
torch.transport
z.transport(0,1)交换了z的0、1两个维度相当于做了转置(z.t() or z.view(8,-1))同时,也支持in-place操作,即用transport_来改变z自身原创 2020-04-29 14:38:23 · 368 阅读 · 0 评论 -
torch.randn与torch.rand
torch.randn:正态分布随机生成torch.rand:0-1随机生成原创 2020-04-29 14:27:56 · 402 阅读 · 0 评论