pytorch
文章平均质量分 54
m0_46483236
这个作者很懒,什么都没留下…
展开
-
pytorch中 nn.utils.rnn.pack_padded_sequence和nn.utils.rnn.pad_packed_sequence
1. 官方文档:torch.nn — PyTorch 1.11.0 documentation2. 应用背景:在使用pytorch处理数据时,一般是采用batch的形式同时处理多个样本序列,而每个batch中的样本序列是不等长的,导致rnn无法处理。所以,通常的做法是先将每个batch按照最长的序列进行padding处理等长的形式。但padding操作会带来一个问题,那就是对于多数进行padding过的序列,会导致rnn对它的表示多了很多无用的字符,我们希望的是在最后一个有用的字符后就.原创 2022-04-12 23:27:33 · 6097 阅读 · 2 评论 -
pytorch 中注意cuda版本和gpu算力匹配
在安装torch时,一定要注意显卡的cuda版本问题。比如,在 RTX2080上 同样的环境中 程序可以正常运行,而换到A100中,就会报错如下:NVIDIA A100-PCIE-40GB with CUDA capability sm_80 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60原创 2022-04-11 23:41:47 · 22073 阅读 · 1 评论 -
pytorch 中 torch.nn.Parameter()
一、官方教程:网址:torch.nn.parameter — PyTorch 1.11.0 documentation二、代码解读:torch.nn.Parameter(torch.Tensor) 是一个类,继承了torch.Tensor这个类,有两个参数:data(Tensor): 给定一个tensor; requires_grad: 指定是否需要梯度,默认为True;通俗的解释:首先可以把这个函数理解为类型转换函数,将一个不可训练的类型Tensor转换成可以训练的类型pa原创 2022-04-07 17:18:13 · 2152 阅读 · 0 评论 -
pytorch 中 区分 torch.tensor() 和 torch.Tensor()
torch.tensor()torch.tensor()仅仅是python函数:https://pytorch.org/docs/stable/torch.html#torch.tensor,将数据的数据类型转化为tensor: data:(其中data可以是:list, tuple, NumPy ndarray, scalar和其他类型。) dtype: 可以使用参数dtype来指定张量的数据类型, requires_grad: 使用参数requires_grad来指定张量是否需要计算梯.原创 2022-04-07 16:41:49 · 1941 阅读 · 0 评论 -
pytorch 中 多头注意力机制 MultiHeadAttention的代码实现及应用
本文将对Scaled Dot-Product Attention,Multi-head attention,Self-attention,Transformer等概念做一个简要介绍和区分。最后对通用的 Multi-head attention 进行代码实现和应用。一、概念:1. Scaled Dot-Product Attention在实际应用中,经常会用到 Attention 机制,其中最常用的是Scaled Dot-Product Attention,它是通过计算query和key之间的点.原创 2022-04-07 15:12:34 · 29218 阅读 · 7 评论 -
pytorch 中 利用自定义函数 get_mask_from_lengths(lengths, max_len)获取每个batch的mask
在pytorch中,经常会需要通过batch进行批量处理数据,由于每个batch中各个样本之间存在差异,经常会需要进行先padding后mask的操作。尤其是在自然语言处理任务中,每个batch中的每个句子是不等长的。一般都是先通过填充0的方式将每个batch中每一句padding成和最长的句子等长的形式;再模型中或者计算loss的时候,再将padding成0的部分mask掉,从而避免padding带来的影响。所以,每个batch在读取数据时,需要保存下该batch中每个句子的长度(以及最长的句子长原创 2022-04-06 23:47:42 · 1181 阅读 · 0 评论 -
pytorch 中 x.masked_fill(mask, value)用value填充x中对应mask位置处为True的元素
函数讲解:pytorch 中 x.masked_fill(mask, value)用value填充张量x中对应mask位置处为True的元素。其中,mask的形状要和需要填充的张量x的形状一致。示例:import torchimport numpy as npx = torch.randn(5, 6)mask = torch.tensor([[False, False, True, True, True, True], [False,.原创 2022-04-06 23:01:49 · 923 阅读 · 1 评论 -
pytorch 中判断和指定模型和数据在GPU或CPU上
有时候,需要查看模型和数据是在GPU上,还是在CPU上;或者需要将模型和数据放在指定的GPU或者CPU上,那该怎么做呢?1. 判断模型是在GPU上还是CPU上model = nn.LSTM(input_size=10, hidden_size=4, num_layers=1, batch_first=True)print(next(model.parameters()).device) 2.判断数据是在GPU上还是CPU上data = torch.ones([2, 3])print(d原创 2022-04-03 19:15:27 · 17644 阅读 · 0 评论 -
python中的padding操作代码实现
pad_1D:例如:每个batch中的音素的padding,每个音素先用一个一维int编号表示,每句话的音素序列是不等长的,需要将每个batch中的所有句子的音素序列按照最长的padding成等长的形式。代码及输入输出格式:import numpy as npdef pad_1D(inputs, PAD=0): def pad_data(x, length, PAD): x_padded = np.pad( x, (0, length - x原创 2022-04-02 23:51:53 · 2931 阅读 · 0 评论 -
pytorch中如何使用预训练好的BERT当作embedding
1. 安装相应的包pip install pytorch_pretrained_bert==0.6.2 -i https://pypi.tuna.tsinghua.edu.cn/simple2. 下载相应的预训练模型 bert-base-chinese。3. 代码示例:import torchfrom pytorch_pretrained_bert import BertTokenizer, BertModeltokenizer = BertTokenizer.from_.原创 2022-04-02 19:03:50 · 11736 阅读 · 2 评论 -
pytorch 中 torch.linspace()在某区间生成均匀的N个点
函数详解:torch.linspace(start, end, steps, out)功能:在区间【start,end】上生成均匀的N个点。 参数: start(float):区间的起点; end(float):区间的终点; steps(int):生成的点数; out(Tensor,optional):结果张量。 注意:start 可以比 end 小,也可以比 end 大,也可以和 end 相等。示例:import torcha = torch.linspace(0原创 2022-03-30 23:28:18 · 612 阅读 · 0 评论 -
pytorch中判断某一个Tensor的维度数是几
1. 正常情况下,判断一个Tensor的维度是通过tensor.shape进行判断,例如:import torchx = torch.randint(low=-10,high=10,size=(3,6))print(x)print(x.shape)由此可以判断是2维(第1维有3个元素,第2维有6个元素)。2. 但有时候,需要在代码中判断某一个Tensor到底是1维还是2维还是3维等,该如何判断呢?可以通过 len(tensor.shape) 判断,例如:import tor...原创 2022-03-24 22:12:18 · 16587 阅读 · 2 评论 -
pytorch中 torch.bucketize(input, boundaries)根据boundaries返回input中每个元素的区间索引
在pytorch中,函数torch.bucketize(input, boundaries)可以根据boundaries序列返回input中每个元素的区间索引。详细介绍如下:函数详解:torch.bucketize(input, boundaries, out_int32=False, right=False, out=None) --> Tensor功能:返回input中每个元素的所属的桶的索引,桶的边界由boundaries设置。返回的是和input相同大小的新的Tensor。 参原创 2022-03-23 23:07:28 · 2054 阅读 · 0 评论 -
pytorch中的 torch.round()函数
函数详解:torch.round(input, out=None)说明:返回一个新张量,将输入input张量的每个元素舍入到最近的整数。参数:input(Tensor):输入张量 out(Tensor,可选):输出张量import torcha = torch.randn(4)print(a) ## tensor([-0.8229, -0.6338, -1.3387, -0.0584])print(torch.round(a)) ## tens原创 2022-03-19 23:42:51 · 10971 阅读 · 0 评论 -
pytorch中tensor前面加~
详解:经常会见到,在tensor的前面加~,那具体是什么意思呢?其实,就是对tensor的每一个值取反,True变为False,False变为True,具体如下:import torcha = torch.tensor(True)b = torch.tensor([True, False])c = torch.tensor([[True, True], [False, False]])print(~a)print(~b)print(~c)结果如下:代码实例:比如在常原创 2022-03-14 18:26:14 · 2593 阅读 · 0 评论 -
深拷贝copy.deepcopy()拷贝多个深度学习(对象实例化)模型
在深度学习的训练和测试过程中,可能会涉及到对同一个模型进行多次拷贝,分别进行不同的训练或者加载不同的checkpoint参数,这时候不能使用等号进行简单的拷贝,而是需要使用copy.deepcopy()进行深拷贝。例如:采用同样的模型分别训练了三个不同的任务,当然也就保存了三个不同的模型参数。在测试的时候,需要同时加载这三个不同的模型,那该如何做呢?import copy## ...## 模型的对象实例化model = prosody(参数)model = model.cuda()原创 2022-01-16 16:35:23 · 4063 阅读 · 0 评论 -
区分 nn.ModuleList() 和 nn.Sequential()
nn.ModuleList()nn.ModuleList,它是一个储存不同 module,并自动将每个 module 的 parameters 添加到网络之中的容器。你可以把任意 nn.Module 的子类 (比如 nn.Conv2d, nn.Linear 之类的) 加到这个 list 里面,方法和 Python 自带的 list 一样,无非是 extend,append 等操作。但不同于一般的 list,加入到 nn.ModuleList 里面的 module 是会自动注册到整个网络上的,同时 mod原创 2021-12-31 11:22:58 · 2035 阅读 · 0 评论 -
device = next(self.parameters()).device
释义:该句代码的意思是指定 和参数相同的设备。具体解释:首先,需要理解 next() 函数它用于返回迭代器的下一个项目在这里的device =next(self.parameters()).devicenext(self.parameters()) 用于返回第一个参数整句代码就是指定 使用和参数相同的设备参考示例: def parse_data_batch(self, batch): """Parse data batch to fo..原创 2021-12-23 17:23:49 · 6025 阅读 · 0 评论 -
常见函数——view()
参考:https://www.pythonf.cn/read/89029原创 2021-12-18 23:09:52 · 353 阅读 · 0 评论 -
pytorch出现ModuleNotFoundError: No module named ‘tensorboard‘
在遇到如下错误:原创 2021-06-19 17:18:21 · 3229 阅读 · 6 评论 -
Softmax层与LogSoftmax层的对比
1. Softmax 作用:将网络输出值的每一维映射成(0,1)之间的概率值,且所有维的概率值之和等于1。具体理解:神经网络解决多分类(N分类)问题,最后一层输出会是N个神经元,所以对于每一个输入样本,都对应输出一个N维的向量,如[-2.3 , 1.9 , 3.4 , -5.6],此时每一维的值有正有负有大有小。一般会将此时网络的输出再通过一个softmax层,每一维都变成了一个[0,1]之间的概率值,并且所有维的概率值之和等于1,将概率值最大的一维规定为该输入样本对应的标签类,如[0...原创 2021-04-07 18:00:06 · 2780 阅读 · 0 评论 -
pytorch中常用的损失函数
1. pytorch中常用的损失函数列举: pytorch中的nn模块提供了很多可以直接使用的loss函数, 比如MSELoss(), CrossEntropyLoss(), NLLLoss() 等官方链接:https://pytorch.org/docs/stable/_modules/torch/nn/modules/loss.htmlpytorch中常用的损失函数 损失函数 名称 适用场景 torch.nn.MSELoss() 均方误差损失 回归 t...原创 2021-03-30 20:26:26 · 2152 阅读 · 2 评论 -
pytorch中torch.masked_select()总结
官方文档:实例原创 2021-03-29 22:05:08 · 5224 阅读 · 0 评论 -
pytorch中tensor的数据类型及相互转化
1. 数据类型: 在torch中CPU和GPU张量分别有8种数据类型, GPU tensor比CPU tensor多了.cuda张量数据类型 数据类型 dtype CPU tensor GPU tensor 32位浮点型 torch.float32 或 torch.float torch.FloatTensor torch.cuda.FloatTensor 64位浮点型 torch.float64 或 torch.double torch..原创 2021-03-29 20:06:19 · 6445 阅读 · 1 评论 -
PyTorch中tensor的维度变换
1. 增加维度: 可以使用 unsqueeze(index) 给tensor增加某一个指定位置的维度,tensor的维度从0开始。若index>=0,则表示在第index维插入一个新的维度;若index<0,则表示在倒数第index维插入一个新的维度。实例:import torch a = torch.randn(8,4,9)b = a.unsqueeze(0)c = a.unsqueeze(1)d = a.unsqueeze(-1)e = a.unsqueeze(..原创 2021-03-29 15:23:47 · 6767 阅读 · 0 评论