定义Tensor与tensor
# 大写Tensor里面的参数可以定义Tensor的形状
>>> a = torch.Tensor(5)
>>> a
tensor([2.0700e-19, 4.4667e+33, 7.0065e-45, 0.0000e+00, 1.4013e-45])
# 小写的tensor里面的参数就是具体值
>>> a = torch.tensor(5)
>>> a
tensor(5)
# 返回跟input的tensor一样size的0-1随机数
>>> a = torch.rand_like(input)
与numpy.array的转换
# torch.tensor转numpy.array
>>> type(a)
<class 'torch.Tensor'>
>>> type(a.numpy())
<class 'numpy.ndarray'>
# numpy.array转torch.tensor
>>> type(b)
<class 'numpy.ndarray'>
>>> type(torch.tensor(b))
<class 'torch.Tensor'>
view
改变张量的形状,相当于numpy的reshape。
>>> a.shape
torch.Size([3, 2, 2])
>>> a.view(3,4).shape
torch.Size([3, 4])
permute
给张量的维度换位置,期中的参数就是原来的维度的编号。
>>> a.shape
torch.Size([3, 2, 2])
>>> a.permute(2,1,0).shape
torch.Size([2, 2, 3])
# 可以用-1代替未知的维度参数,但是只能有一个位置使用-1
>>> a.view(-1,4).shape
torch.Size([3, 4])
>>> a.view(3,-1).shape
torch.Size([3, 4])
>>> a.view(-1,).shape
torch.Size([12])
mul
张量对应位置相乘
>>> a
tensor([0., 1., 2., 3., 4.])
>>> c
tensor([1., 2., 3., 4., 5.])
>>> a.mul(c)
tensor([ 0., 2., 6., 12., 20.])
torch.mm 和 torch.matmul
张量相乘 mm(m x n, n x p) = (m x p)
# 当张量维度符合要求的时候
>>> b = torch.Tensor(3,5)
>>> a = torch.Tensor(5,2)
>>> torch.mm(b,a).shape
torch.Size([3, 2])
>>> torch.matmul(b,a).shape
torch.Size([3, 2])
# 两者无区别
# 当张量是一维的时候
>>> a = torch.tensor([5])
>>> torch.matmul(a,a)
tensor(25)
>>> torch.mm(a,a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
# 当张量既不符合要求也不是一维的时候,两个函数皆不能使用。