嘿,你能搜索到这个问题,说明你说一个认真学习的同学,这个问题的细节值得思考。
欢迎收藏,会持续更新。请仔细看后面的调试界面。
三维维度很好理解,就是只管的认为是 长 宽 高,你能看出下面的计算结果吗?
import torch
dim_3 = torch.randn(1,2,3)
dim_2 = torch.randn(1,2)
dim_1 = torch.randn(1)
dim_0 = torch.randn(0)
print(dim_3.size())
print(dim_2.size())
print(dim_1.size())
print(dim_0.size())
print(dim_3)
print(dim_2)
print(dim_1)
print(dim_0)
运行结果,特别主要黄色部分
torch.Size([1, 2, 3])
torch.Size([1, 2])
torch.Size([1])
torch.Size([0])
tensor([[[-0.1314, 0.1718, -1.0469],
[-1.2821, 0.4009, -0.6350]]])
tensor([[0.9778, 1.2986]])
tensor([0.8059])
tensor([])
我们先来分析下
之前有同学跟我讨论,说不存在torch.randn(0)的情况,通过上面的运行,得出是存在0维度的,
那么上面显示0维度是tensor([]),是不是说0维度是空呢?
我可以肯定的说,0维度不是空,0维度代表一个数值,0维度在我们计算loss的时候需要用到。
因为loss只有是一个具体的0维度数值,那么神经网络才能知道应该从整体上优化,
那么如果loss是1维度,或者2维度,会怎么样?一个可能是沿着某个维度对神经网络深度学习进行梯度下降优化,但是能不能形成整体的优化结果呢?估计这个有点难,也会导致优化不够全面均衡,所以,在计算loss的时候,我们需要0维度,如果你算出的loss不是0维度,那么就需要转换为0维度,才能实现整体的优化,尔不是沿着某个维度优化,导致整个深度学习网络发生偏差。
下面我们再看一个例子
import torch
dim_1 = torch.tensor([1])
dim_0 = torch.tensor(0)
print(dim_1.size())
print(dim_0.size())
print(dim_1)
print(dim_0)
if __name__ == '__main__':
print("r如果你学到东西了,记得点资收藏,分享不易")
输出:
torch.Size([1])
torch.Size([])
tensor([1])
tensor(0)
编辑
编辑
这两个tensor的变量,ndim是不同的,ndim就是维度。
0维度的shape是torch.Size([]),输出的结果是没有****中括号的,****这点务必记住,这样在调试bug的时候,能够避雷。
欢迎关注收藏,会持续更新,如果你遇到什么疑问,也可以评论和留言,大家共同进步。
标签:loss,tensor,dim,torch,print,pytorch,维度,Size From: https://blog.csdn.net/2301_76776887/article/details/142392952