
Pytorch函数
Jeanshoe
这个作者很懒,什么都没留下…
展开
-
[Pytorch函数]CrossEntropyLoss()
引言在使用pytorch深度学习框架,计算损失函数的时候经常会遇到这么一个函数:nn.CrossEntropyLoss() 该损失函数结合了nn.LogSoftmax()和nn.NLLLoss()两个函数。它在做分类(具体几类)训练的时候是非常有用的。在训练过程中,对于每个类分配权值,可选的参数权值应该是一个1D张量。当你有一个不平衡的训练集时,这是是非常有用的。那么针对这个函数,下面将做详细的介绍。什么是交叉熵?交叉熵主要是用来判定实际的输出与期望的输出的接近程度,为什么这么说呢,举个例子:在转载 2020-07-20 10:40:08 · 336 阅读 · 0 评论 -
[Pytorch函数].requires_grad固定部分参数进行网络训练
1. 只训练部分层class RESNET_attention(nn.Module): def __init__(self, model, pretrained): super(RESNET_attetnion, self).__init__() self.resnet = model(pretrained) for p in self.parameters(): p.requires_grad = False转载 2020-07-20 10:13:24 · 10986 阅读 · 0 评论 -
[Pytorch函数]loss,loss.cpu().data 及 loss.cpu().detach().numpy()等辨析
print('1111',loss)print('2222',loss.data)#tensor且GPUprint('3333',loss.cpu())print('4444',loss.cpu().data)#tensor且CPU# print('5555',loss.cpu().data[0])#报错 IndexError: invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Pyth转载 2020-07-20 10:04:43 · 4778 阅读 · 1 评论 -
[Pytorch函数]torch.sum
torch.sum()对输入的tensor数据的某一维度求和,一共两种用法1.torch.sum(input, dtype=None)2.torch.sum(input, list: dim, bool: keepdim=False, dtype=None) → Tensor input:输入一个tensordim:要求和的维度,可以是一个列表keepdim:求和之后这个dim的元素个数为1,所以要被去掉,如果要保留这个维度,则应当keepdim=True#If keepdim is True转载 2020-07-20 09:28:46 · 3433 阅读 · 0 评论 -
[Pytorch函数]torch.cat
cat是concatnate的意思:拼接,联系在一起。先说cat( )的普通用法如果我们有两个tensor是A和B,想把他们拼接在一起,需要如下操作:C = torch.cat( (A,B),0 ) #按维数0拼接(竖着拼)C = torch.cat( (A,B),1 ) #按维数1拼接(横着拼)>>> import torch>>> A=torch.ones(2,3) #2x3的张量(矩阵)转载 2020-07-20 09:20:38 · 238 阅读 · 0 评论 -
[Pytorch函数]torch.max、F.softmax
在利用torch.max函数和F.Ssoftmax函数时,对应该设置什么维度,总是有点懵,遂总结一下:首先看看二维tensor的函数的例子:import torchimport torch.nn.functional as F input = torch.randn(3,4)print(input)tensor([[-0.5526, -0.0194, 2.1469, -0.2567], [-0.3337, -0.9229, 0.0376, -0.0801],转载 2020-07-20 09:16:17 · 1493 阅读 · 0 评论 -
[Pytorch函数]DataLoader()
torch.utils.data.DataLoader中的参数:dataset (Dataset) – dataset from which to load the data.batch_size (int, optional) – how many samples per batch to load (default: 1).shuffle (bool, optional) – set to True to have the data reshuffled at every epoch (defa转载 2020-07-14 12:05:33 · 1421 阅读 · 0 评论 -
[Pytorch函数]常用的normalization函数
归一化层,目前主要有这几个方法,Batch Normalization(2015年)、Layer Normalization(2016年)、Instance Normalization(2017年)、Group Normalization(2018年)、Switchable Normalization(2019年);将输入的图像shape记为[N, C, H, W],这几个方法主要的区别就是在,batchNorm是在batch上,对NHW做归一化,对小batchsize效果不好;layerNorm在转载 2020-07-11 12:02:02 · 1286 阅读 · 0 评论 -
[Pytorch函数]nn.Embedding.weight
一、nn.Embedding.weight初始化分布nn.Embedding.weight随机初始化方式是标准正态分布 [公式] ,即均值μ=0\mu=0μ=0,方差σ=1\sigma=1σ=1的正态分布。import torch.nn as nn# dim越大,均值、方差越接近0和1dim = 800000# 定义了一个(5, dim)的二维embdding# 对于NLP来说,相当于是5个词,每个词的词向量维数是dim# 每个词向量初始化为正态分布 N(0,1)(待验证)embd = n转载 2020-07-11 11:38:52 · 8693 阅读 · 0 评论 -
[Pytorch函数]squeeze()和unsqueeze()
一、unsqueeze()函数首先初始化一个a可以看出a的维度为(2,3)在第二维增加一个维度,使其维度变为(2,1,3)可以看出a的维度已经变为(2,1,3)了,同样如果需要在倒数第二个维度上增加一个维度,那么使用b.unsqueeze(-2)二、squeeze()函数介绍首先得到一个维度为(1,2,3)的tensor(张量)由图中可以看出c的维度为(1,2,3)2.下面使用squeeze()函数将第一维去掉可见,维度已经变为(2,3)3.另外可以看出维度并没有转载 2020-07-11 11:08:59 · 255 阅读 · 0 评论 -
[Pytorch函数]nn.Linear()
PyTorch的nn.Linear()是用于设置网络中的全连接层的,需要注意的是全连接层的输入与输出都是二维张量,一般形状为[batch_size, size],不同于卷积层要求输入输出是四维张量。其用法与形参说明如下: in_features指的是输入的二维张量的大小,即输入的[batch_size, size]中的size。 out_features指的是输出的二维张量的大小,即输出的二维张量的形状为[batch_size,output_size],当然,它也代表了该全连接层的神经元个数。 从转载 2020-07-11 11:03:04 · 1217 阅读 · 0 评论 -
[Pytorch函数] .masked_fill_()
masked_fill_(mask, value)掩码操作用value填充tensor中与mask中值为1位置相对应的元素。mask的形状必须与要填充的tensor形状一致。a = torch.randn(5,6)x = [5,4,3,2,1]mask = torch.zeros(5,6,dtype=torch.float)for e_id, src_len in enumerate(x): mask[e_id, src_len:] = 1mask = mask.to(device转载 2020-07-11 10:57:25 · 28936 阅读 · 5 评论 -
[Pytorch函数].contiguous()
contiguous:view只能用在contiguous的variable上。如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。一种可能的解释是:有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguous()这个函数,把tensor变成在内存中连续分布的形式。判断是否contiguous用torch.Tensor.is_cont转载 2020-07-10 14:51:15 · 374 阅读 · 0 评论 -
[Pytorch函数]torch.nn.dropout和torch.nn.dropout2d
# -*- coding: utf-8 -*-import torchimport torch.nn as nnimport torch.autograd as autogradm = nn.Dropout(p=0.5)n = nn.Dropout2d(p=0.5)input = autograd.Variable(torch.randn(2, 6, 3)) ## 对dim=1维进行随机置为0print(m(input))print('**************************转载 2020-07-10 14:48:28 · 2599 阅读 · 1 评论 -
[Pytorch函数].repeat()
import torchx = torch.tensor([1, 2, 3])print(x.repeat(4))print("###################################")print(x.repeat(4, 1))运行结果如下:import torchx = torch.tensor([1, 2, 3])print(x.repeat(4, 1))print("###################################")print(x.re转载 2020-07-10 14:41:46 · 4828 阅读 · 0 评论 -
[Pytorch函数].mul() .mm() .matmul()
一、点乘点乘都是broadcast的,可以用torch.mul(a, b)实现,也可以直接用*实现。>>> a = torch.ones(3,4)>>> atensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]])>>> b = torch.Tensor([1,2,3]).reshape((3,1))>>> btensor([转载 2020-07-10 14:36:56 · 1627 阅读 · 0 评论 -
[Pytorch函数].view()
相当于numpy中resize()的功能,但是用法可能不太一样。我的理解是:把原先tensor中的数据按照行优先的顺序排成一个一维的数据(这里应该是因为要求地址是连续存储的),然后按照参数组合成其他维度的tensor。比如说是不管你原先的数据是[[[1,2,3],[4,5,6]]]还是[1,2,3,4,5,6],因为它们排成一维向量都是6个元素,所以只要view后面的参数一致,得到的结果都是一样的。比如,a=torch.Tensor([[[1,2,3],[4,5,6]]])b=torch.Tenso转载 2020-07-10 12:23:11 · 4458 阅读 · 0 评论 -
[pytorch函数] .expand() .gt() .t()
1 .expand()1.返回tensor的一个新视图,单个维度扩大为更大的尺寸。tensor也可以扩大为更高维,新增加的维度将附在前面。 扩大tensor不需要分配新内存,只是仅仅新建一个tensor的视图,其中通过将stride设为0,一维将会扩展位更高维。任何一个一维的在不分配新内存情况下可扩展为任意的数值。 x = torch.Tensor([[1], [2], [3]]) print "x.size():",x.size() y=x.expand( 3,4 )转载 2020-07-10 12:21:10 · 271 阅读 · 0 评论