网站顶部公告代码,潍坊淘宝网站建设,北京 手机网站建设,优秀网站建设在Pytorch中涉及张量的操作都会涉及“dim”的设置#xff0c;虽然也理解个大差不差#xff0c;但是偶尔还是有点犯迷糊#xff0c;究其原因还是没有形象化的理解。
首先#xff0c;张量的维度排序是有固定顺序的#xff0c;0#xff0c;1#xff0c;2#xff0c;.....…在Pytorch中涉及张量的操作都会涉及“dim”的设置虽然也理解个大差不差但是偶尔还是有点犯迷糊究其原因还是没有形象化的理解。
首先张量的维度排序是有固定顺序的012......是遵循一个从外到内的索引顺序张量本身的维度越高往内延伸的维度数越高。
“dim define what operation elements is”——这是我自己的形象化理解。
看一组代码 ones torch.ones(3,4)ones
tensor([[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]])zeros torch.zeros(3,4)zeros
tensor([[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]])ra torch.arange(12).view(3,4)ra
tensor([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]]) torch.stack((ra,zeros),dim0)
tensor([[[ 0., 1., 2., 3.],[ 4., 5., 6., 7.],[ 8., 9., 10., 11.]],[[ 0., 0., 0., 0.],[ 0., 0., 0., 0.],[ 0., 0., 0., 0.]]])torch.stack((ones,zeros),dim0)
tensor([[[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]],[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]]])torch.stack((ones,zeros),dim-1)
tensor([[[1., 0.],[1., 0.],[1., 0.],[1., 0.]],[[1., 0.],[1., 0.],[1., 0.],[1., 0.]],[[1., 0.],[1., 0.],[1., 0.],[1., 0.]]])torch.stack((ra,zeros),dim-1)
tensor([[[ 0., 0.],[ 1., 0.],[ 2., 0.],[ 3., 0.]],[[ 4., 0.],[ 5., 0.],[ 6., 0.],[ 7., 0.]],[[ 8., 0.],[ 9., 0.],[10., 0.],[11., 0.]]])torch.stack((ra,zeros),dim1)
tensor([[[ 0., 1., 2., 3.],[ 0., 0., 0., 0.]],[[ 4., 5., 6., 7.],[ 0., 0., 0., 0.]],[[ 8., 9., 10., 11.],[ 0., 0., 0., 0.]]])print(dim define what operation elements is)
dim define what operation elements is看完代码你应该会比较形象化的理解最后一句话dim其实定义了参与操作的元素是什么样的。对于一个batch的数据来说dim0上定义的是一个个样本dim1定义了第二个维度即每个样本的特征维度...... dim-1代表了从最底层的逐个数值操作。