torch小笔记(1)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- torch小笔记(1)
- 前言
- 一、torch.sum()
- 二、torch.mm()
- 1.torch.mm()
- 2.torch.mul()
- 3.torch.bmm() 和 torch.matmul()
- 三、torch.squeeze()和unsqueeze()
- 1.queeze()
- 2.unsqueeze()
前言
提示:刚开始学习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:输入一个tensor
dim:要求和的维度,可以是一个列表
keepdim:求和之后这个dim的元素个数为1,所以要被去掉,如果要保留这个维度,则应当keepdim=True
#If keepdim is True, the output tensor is of the same size as input except in the dimension(s) dim where it is of size 1.
例子:
a = torch.ones((2, 3))
print(a):
tensor([[1, 1, 1],
[1, 1, 1]])
a1 = torch.sum(a)
a2 = torch.sum(a, dim=0)
a3 = torch.sum(a, dim=1)
print(a) #tensor(6.)
print(a1) #tensor([2., 2., 2.])
print(a2) #tensor([3., 3.])
如果加上keepdim=True, 则会保持dim的维度不被squeeze
a1 = torch.sum(a, dim=(0, 1), keepdim=True) #tensor([[6.]])
a2 = torch.sum(a, dim=(0, ), keepdim=True) #tensor([[2., 2., 2.]])
a3 = torch.sum(a, dim=(1, ), keepdim=True) #tensor([[3., 3.]])
原文链接:
二、torch.mm()
1.torch.mm()
torch.mm(mat1, mat2, out=None) → Tensor
对矩阵mat1和mat2进行相乘。 如果mat1 是一个n×m张量,mat2 是一个 m×p 张量,将会输出一个 n×p 张量out。
参数 :
mat1 (Tensor) – 第一个相乘矩阵
mat2 (Tensor) – 第二个相乘矩阵
out (Tensor, optional) – 输出张量
原文链接:
2.torch.mul()
torch.mul(a, b)是矩阵a和b对应位相乘,a和b的维度必须相等,比如a的维度是(1, 2),b的维度是(1, 2),返回的仍是(1, 2)的矩阵。
例子:
a = torch.tensor([[1, 3, 1],[1, 3, 1]])
b = torch.tensor([[1, 2, 1],[1, 4, 1]])
print(torch.mul(a, b, out=None)) #tensor([[ 1, 6, 1],[ 1, 12, 1]])
3.torch.bmm() 和 torch.matmul()
torch.bmm()强制规定维度和大小相同
torch.matmul()没有强制规定维度和大小,可以用利用广播机制进行不同维度的相乘操作
当进行操作的两个tensor都是3D时,两者等同。
torch.bmm(input, mat2, out=None) → Tensor
torch.bmm()是tensor中的一个相乘操作,类似于矩阵中的A*B。
例子:
a = torch.tensor([[[1, 3, 1], [2, 3, 1]]]) #a.size torch.Size([1, 2, 3])
b = torch.tensor([[[1, 2], [2, 1], [3, 1]]]) #b.size torch.Size([1, 3, 2])
torch.bmm(a, b, out=None) #tensor([[[10, 6], [11, 8]]])
input,mat2:两个要进行相乘的tensor结构,两者必须是3D维度的,每个维度中的大小是相同的。
并且相乘的两个矩阵,要满足一定的维度要求:input(p,m,n) * mat2(p,n,a) ->output(p,m,a) 这个要求,可以类比于矩阵相乘。前一个矩阵的列等于后面矩阵的行才可以相乘。
torch.matmul(input, other, out=None) → Tensor
torch.matmul()也是一种类似于矩阵相乘操作的tensor联乘操作。但是它可以利用python 中的广播机制,处理一些维度不同的tensor结构进行相乘操作。这也是该函数与torch.bmm()区别所在。
具体(略)
原文链接:
三、torch.squeeze()和unsqueeze()
1.queeze()
函数功能:去除size为1的维度,包括行和列。当维度大于等于2时,squeeze()无作用。
其中squeeze(0)代表若第一维度值为1则去除第一维度,squeeze(1)代表若第二维度值为1则去除第二维度。
例子1:
a = torch.Tensor(1,3) #tensor([[-1.37,4.56,-3.57]])
print a.squeeze(0) #tensor([-1.37,4.56,-3.57])
print a.squeeze(1) #tensor(tensor([[-1.37,4.56,-3.57]]))
例子2:
b = torch.Tensor(3,1) #tensor([[-3.54],[3.09],[0.00]])
print b.squeeze(0) #tensor([[-3.54],[3.09],[0.00]])
print b.squeeze(1) #tensor([-3.54,3.09,0.00])
2.unsqueeze()
函数功能:与squeeze()函数功能相反,用于添加维度。
例子1:
g = torch.Tensor(3) #tensor([3.27,4.56,-4.84])
print g.unsqueeze(0) #tensor([[3.27,4.56,-4.84]])
print g.unsqueeze(1) #tensor([[3.27],[4.56],[-4.84]])
print g.unsqueeze() 必须指明维度