torch小笔记

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.]])

原文链接:https://blog.csdn.net/qq_39463274/article/details/105145029



二、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) – 输出张量

原文链接:https://blog.csdn.net/u013230189/article/details/82627077
 


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()区别所在。
具体(略)
原文链接:https://blog.csdn.net/foneone/article/details/103876519



三、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() 必须指明维度

原文链接:https://blog.csdn.net/u013444215/article/details/81941366




你可能感兴趣的:(pytorch,自然语言处理)