pytorch部分函数学习笔记

[TOC]

torch.squeeze()和torch.unsqueeze

squeeze用法主要是对数据的维度进行压缩和解压。

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的维度

如下面这段代码

"""
name: squeezeTest.py
author: lonelyisland
"""
import torch

a = torch.randn(1,3)
print(a)
print(a.shape)

b = torch.unsqueeze(a,1)
c = a.unsqueeze(0)

print(b)
print(b.shape)
print(c.shape)

f = torch.randn(3)
print(f)
print(f.shape)

g = f.unsqueeze(0)
print(g.shape)

输出是:

tensor([[-1.8026, -0.3206,  1.0510]]) #有多少个[[]]就说明是几维,比如这里是2维的,这里虽然只有3个数,但是他是表示一个2维的矩阵的第一行有三列
torch.Size([1, 3])
tensor([[[-1.8026, -0.3206,  1.0510]]])
torch.Size([1, 1, 3])
torch.Size([1, 1, 3])
tensor([ 0.0402, -0.6615, -0.9040]) #这里只有1维
torch.Size([3])
torch.Size([1, 3])

torch.manual_seed()

这个函数是指定随机数种子的函数,之前不太理解这个函数的用法, 主要作用是产生“固定”的随机数,如何理解固定的随机数呢?这个函数设定随机数种子,并且会成为一个全局变量,也就是说这个函数在一个实例中只存在一处就可以了,否则后面声明的会覆盖掉前面声明的:

"""
name: manual_seed.py
author: lonelyisland
"""
import torch

#part 1 Set manual_seed(1)
torch.manual_seed(1)
print(torch.rand(2))
print("=================")

#part 2 Set manual_seed(2)
torch.manual_seed(2)
print(torch.randn(2))
print("=================")

#part 3 Set manual_seed(1)
torch.manual_seed(1)
print(torch.randn(2))
print(torch.randn(2))

输出:

tensor([0.7576, 0.2793])
=================
tensor([ 0.3923, -0.2236])
=================
tensor([0.6614, 0.2669])
tensor([0.0617, 0.6213])

这个种子主要是为了使多次运行这段代码时得到同样的一组随机数(便于固定一组随机的模型参数,使得结果可以复现),注释掉part1 part2,运行2次,结果均为:

tensor([0.6614, 0.2669])
tensor([0.0617, 0.6213])

可以看到第一二次运行的结果,输出是一样的,达到了固定的目的,但是同一个实例中多次随机是不一样的,达到了随机的目的。