问题描述
具体信息如下:
Traceback (most recent call last):
File "/home/visionx/nickle/temp/SimCLR/", line 382, in <module>
main(0, args)
File "/home/visionx/nickle/temp/SimCLR/", line 336, in main
loss_epoch = train(args, train_loader, model, criterion, optimizer, writer)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/visionx/nickle/temp/SimCLR/", line 221, in train
loss = criterion(z_i, z_j,adj1)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/visionx/anaconda3/envs/simclr-pt/lib/python3.11/site-packages/torch/nn/modules/", line 1501, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/visionx/nickle/temp/SimCLR/simclr/modules/nt_xent.py", line 116, in forward
return _neighbor(z_i,z_j,tau=0.1,adj1=adj1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/visionx/nickle/temp/SimCLR/simclr/modules/nt_xent.py", line 60, in _neighbor
pos = () + (adj1).sum(1) + inter_view_sim.mul(adj1).sum(1)
^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: The size of tensor a (32) must match the size of tensor b (128) at non-singleton dimension 1
原因分析与解决办法
这个就是训练用到的维度和其中参与计算的维度是不一致的,拿我本身的来说
(adj1).sum(1) + (adj1).sum(1)
上述使用sim这个矩阵和adj1这个矩阵需要进行相乘,上面报错的原因就是因为对应维度不对,所以没有办法运算,那就把对应的改一下就可以了
adj1 = Matrix(x,max_iter,ratio)
发现了这个得到的维度不对,只需要改一下对应的就可以了
x = (128, -1)
这里边是128,也就是和上面问题是一致的,那改为32就可以了也即
x = (32, -1)
再次运行,就解决了
扩展阅读
解决办法1:
这个错误主要是因为,数据的数量不能整除batch size的数量,改正方法有两种
1. 将batch size改称可以被 数据量整除即可。
2. 将dataloader 中的 drop_last改称False也可。
推荐使用第二种方法更加简单。
RuntimeError: The size of tensor a (32) must match the size of tensor b (28) at non-singleton-****博客文章浏览阅读3w次,点赞14次,收藏27次。这个错误主要是因为,数据的数量不能整除batch size的数量,改正方法有两种1. 将batch size改称可以被 数据量整除即可。2. 将dataloader 中的 drop_last改称False也可。推荐使用第二种方法更加简单。.../qq_38284961/article/details/100144258
解决办法2:
使用view函数来进行改变,请注意,当使用 view 方法时,要确保变形后的张量的元素数量与原始张量的元素数量相同。
完美解决RuntimeError: The size of tensor a (25) must match the size of tensor b (5)-****博客文章浏览阅读1.6w次,点赞3次,收藏8次。换句话说,这两个张量的第一个维度的元素数量不同,因此无法执行所需的操作。我们需要查看您的代码,并检查这两个张量的形状是否正确,或者使用适当的方法来处理它们的形状以满足需求。请注意,当使用 view 方法时,要确保变形后的张量的元素数量与原始张量的元素数量相同。在这个例子中,变形后的张量的元素数量也是 5 x 5 = 25,与原始张量的元素数量相同。经过我的分析,我原始数据的形状是([5, 1, 5]),但是我实际上需要一个([5, 5]),因此我需要改变形状。/qlkaicx/article/details/130981374
完结撒花
我不是不想落叶归根,而是生如浮萍,不知道根在哪里