meshgrid 生成坐标网格
无论是 np.meshgrid 还是 torch.meshgrid 都是一样的,这里就用 torch.meshgrid 举例。
torch.meshgrid(*tensors, indexing='ij')
无论是 np.meshgrid 还是 torch.meshgrid 都是一样的,这里就用 torch.meshgrid 举例。
torch.meshgrid(*tensors, indexing='ij')
要搞清楚 reshape 和 view 的区别首先需要了解 tensor 在 PyTorch 中是怎么存储的。
Tensor 是头信息区(Tensor)和数据区(storage)分开存储的,Tensor 的形状 size、步长 stride、数据的索引等信息都存储在头信息区,而数据是存放在数据区。可能多个 Tensor 是共用一个 storage 的,类似于多个头节点指向同一片数据区。
在 PyTorch 中要自己定义一个模型的时候,总会在初始化函数中遇到类似super(net, self).__init__()
的代码,比如:
class net(nn.Module):
def __init__(self):
super(net, self).__init__()
def forward(self):
pass
当两个 shape 不同的矩阵进行运算,当满足广播机制的条件时,就会把小的矩阵扩张成相同 shape 的矩阵,然后对两个矩阵相同的位置进行运算
x = torch.empty(5, 3, 4, 1)
y = torch.empty( 3, 1, 1)
# 对于 x 和 y 从右往左看
# 第 4 维满足 a
# 第 3 维满足 c
# 第 2 维满足 a
# 第 1 维满足 b
这里就简单讨论一下二维和三维,对于更高维的情况,比较难以想象