pytorch基础知识点(一)

1、torch.linspace(start, end, steps=100)用法

torch.linspace(start, end, steps=100, out=None, dtype=None,\
             layout=torch.strided, device=None, requires_grad=False) → Tensor

例如
torch.linspace(-1, 1, 100)

表示从-1开始,到1结束,取100个数字。
输出结果

tensor([-1.0000, -0.9798, -0.9596, -0.9394, -0.9192, -0.8990, -0.8788, -0.8586,
        -0.8384, -0.8182, -0.7980, -0.7778, -0.7576, -0.7374, -0.7172, -0.6970,
        -0.6768, -0.6566, -0.6364, -0.6162, -0.5960, -0.5758, -0.5556, -0.5354,
        -0.5152, -0.4949, -0.4747, -0.4545, -0.4343, -0.4141, -0.3939, -0.3737,
        -0.3535, -0.3333, -0.3131, -0.2929, -0.2727, -0.2525, -0.2323, -0.2121,
        -0.1919, -0.1717, -0.1515, -0.1313, -0.1111, -0.0909, -0.0707, -0.0505,
        -0.0303, -0.0101,  0.0101,  0.0303,  0.0505,  0.0707,  0.0909,  0.1111,
         0.1313,  0.1515,  0.1717,  0.1919,  0.2121,  0.2323,  0.2525,  0.2727,
         0.2929,  0.3131,  0.3333,  0.3535,  0.3737,  0.3939,  0.4141,  0.4343,
         0.4545,  0.4747,  0.4949,  0.5152,  0.5354,  0.5556,  0.5758,  0.5960,
         0.6162,  0.6364,  0.6566,  0.6768,  0.6970,  0.7172,  0.7374,  0.7576,
         0.7778,  0.7980,  0.8182,  0.8384,  0.8586,  0.8788,  0.8990,  0.9192,
         0.9394,  0.9596,  0.9798,  1.0000])

2、torch.suqeeze()与torch.unsqueeze()
torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。squeeze(a)就是将a中所有为1的维度删掉。不为1的维度没有影响。a.squeeze(N) 就是去掉a中指定的维数为一的维度。还有一种形式就是b=torch.squeeze(a,N) a中去掉指定的定的维数为一的维度。

torch.unsqueeze()这个函数主要是对数据维度进行扩充。给指定位置加上维数为一的维度,比如原本有个三行的数据(3),在0的位置加了一维就变成一行三列(1,3)。a.squeeze(N) 就是在a中指定位置N加上一个维数为1的维度。还有一种形式就是b=torch.squeeze(a,N) a就是在a中指定位置N加上一个维数为1的维度
例如:

import torch
d = torch.randn(3)
print('out_d:\n',d)
print("d_shape:\n",d.shape)

e = torch.unsqueeze(d,1)
print('out_e:\n',e)
print('e_shape:\n',e.shape)

输出结果:

out_d:
 tensor([ 1.0019, -0.5108,  0.7973])
d_shape:
 torch.Size([3])
out_e:
 tensor([[ 1.0019],
        [-0.5108],
        [ 0.7973]])
e_shape:
 torch.Size([3, 1])

对于二维的情况下:

import torch

a = torch.randn(2,3)
print('out_a:\n',a)
print('a_shape:\n',a.shape)

输出结果:生成一个两行三列的数据

out_a:
 tensor([[-0.1760, -0.9538, -0.0040],
        [ 0.2490, -1.2058,  0.1976]])
a_shape:
 torch.Size([2, 3])

对数据a在1的位置增加一维,在0的地方增加一维

b = torch.unsqueeze(a,1)
c = a.unsqueeze(0)
f = torch.unsqueeze(a,0)
print('out_b:\n',b)
print('b_shape:\n',b.shape)
print('out_c:\n',c)
print('c_shape:\n',c.shape)
print('out_f:\n',f)
print('out_f:\n',f.shape)

输出结果

   out_b:
     tensor([[[ 0.6487, -0.3548,  0.4499]],
        [[-1.8756, -0.8990,  0.7497]]])
b_shape:
 torch.Size([2, 1, 3])
out_c:
 tensor([[[ 0.6487, -0.3548,  0.4499],
         [-1.8756, -0.8990,  0.7497]]])
c_shape:
 torch.Size([1, 2, 3])
out_f:
 tensor([[[ 0.6487, -0.3548,  0.4499],
         [-1.8756, -0.8990,  0.7497]]])
out_f:
 torch.Size([1, 2, 3])


3、x = x.view(x.size(0), -1)

x.view(3,4)把x变成一个[3,4]的矩阵,

x = x.view(x.size(0), -1)这句话一般出现在model类的forward函数中,具体位置一般都是在调用分类器之前。分类器是一个简单的nn.Linear()结构,输入输出都是维度为一的值,x = x.view(x.size(0), -1)  这句话的出现就是为了将前面多维度的tensor展平成一维。下面是个简单的例子,我将会根据例子来对该语句进行解析。
class NET(nn.Module):
    def __init__(self,batch_size):
        super(NET,self).__init__()
        self.conv = nn.Conv2d(outchannels=3,in_channels=64,kernel_size=3,stride=1)
        self.fc = nn.Linear(64*batch_size,10)
 
    def forward(self,x):
        x = self.conv(x)
        x = x.view(x.size(0), -1)  
        out = self.fc(x)

上面是个简单的网络结构,包含一个卷积层和一个分类层。forward()函数中,input首先经过卷积层,此时的输出x是包含batchsize维度为4的tensor,即(batchsize,channels,x,y),x.size(0)指batchsize的值。x = x.view(x.size(0), -1)简化x = x.view(batchsize, -1)。
view()函数的功能与reshape类似,用来转换size大小。x = x.view(batchsize, -1)中batchsize指转换后有几行,而-1指在不告诉函数有多少列的情况下,根据原tensor数据和batchsize自动分配列数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值