宁波市余姚建设局网站,建设网站要钱么,老薛主机wordpress慢,店铺销售系统软件哪个好经常会在编程中遇到理解矩阵行和列的事情。
1、要明确无论这个张量有多少维度#xff0c;它的矩阵乘法都只能作用于最后两个维度。
例如#xff1a;
import torcha torch.rand([64, 32, 3, 4])
b torch.rand([64, 32, 3, 4])c torch.matmul(a, b.transpose(2, 3)) # 交…经常会在编程中遇到理解矩阵行和列的事情。
1、要明确无论这个张量有多少维度它的矩阵乘法都只能作用于最后两个维度。
例如
import torcha torch.rand([64, 32, 3, 4])
b torch.rand([64, 32, 3, 4])c torch.matmul(a, b.transpose(2, 3)) # 交换b的23两个维度print(c.shape)
# torch.Size([64, 32, 3, 3])注意.dot方法只适用于两个向量的点积运算 torch.matmul是矩阵乘法运算。
2、对于张量的数学含义的理解
首先一维张量不区分行向量和列向量比如:
import torch
a torch.rand([2, 3, 4]).view(-1)
print((a a.T).all())
# tensor(True)按照点积关系去理解一维张量的数学含义是列向量
import torch
a torch.rand([2, 3]).view(-1)
b torch.rand([6, 3])
print(torch.matmul(a, b)) # 1x6 dot 6x3
# tensor([0.8973, 1.0441, 1.3425])
print(torch.matmul(b, a)) # 6x3 dot 1x6
# RuntimeError: size mismatch, get 6, 6x3,6但是如果不是一维变成二维那么最底层向量的含义又变成了行向量
import torch
a torch.rand([1, 3])
b torch.rand([3, 2])
print(torch.matmul(a, b))
# tensor([[0.8463, 0.9703]])3、对于二维tensor索引的理解
和list一样依然可以按照向下x向右y的角度理解tensor的索引关系 4、axis和dim的理解
首先说结论axis和dim的含义是一致的只不过axis来自numpy dim来自torch。调用torch.sum()方法时可以发现axis和dim参数都一样。
接着解释dim/axis的含义为针对变量延着哪一个轴进行操作。 假设我们取张量的第一个元素进行操作 如果dim0意思是让这个元素沿着x轴进行操作向下 如果dim1意思是让这个元素沿着y轴进行操作向右 如果dim2意思是让这个元素沿着z轴进行操作向屏幕外 。。。
import torch
a torch.rand([2, 3, 4])
# 沿着哪个轴哪个轴就会消失
print(a.sum(dim0).shape)
print(a.sum(dim1).shape)
print(a.sum(dim2).shape)# torch.Size([3, 4])
# torch.Size([2, 4])
# torch.Size([2, 3])常用的两个维度的操作分别是layer维度和batch维度
layer维度也可以简单这么理解假设一个张量一共m维那么当dimm-1时就表示把张量最里层的向量进行操作然后逐步向外扩展。此时也可以写作dim-1。
比如想要对张量进行batch维度的操作那么就让dimbatch_size所在的维度即可。
注意这里的dim和axis只面向一个维度的处理第一个元素只能沿着一个轴操作如果想对图像等对两个维度同时处理需要区分开。