问题描述

        具体信息如下:

Traceback (most recent call last):
  File "/home/visionx/nickle/temp/SimCLR/main.py", line 382, in <module>
    main(0, args)
  File "/home/visionx/nickle/temp/SimCLR/main.py", line 336, in main
    loss_epoch = train(args, train_loader, model, criterion, optimizer, writer)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/visionx/nickle/temp/SimCLR/main.py", 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/module.py", 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 = sim.diag() + isim.mul(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

原因分析与解决办法

        这个就是训练用到的维度和其中参与计算的维度是不一致的,拿我本身的来说

sim.mul(adj1).sum(1) + sim.mul(adj1).sum(1)

        上述使用sim这个矩阵和adj1这个矩阵需要进行相乘,上面报错的原因就是因为对应维度不对,所以没有办法运算,那就把对应的改一下就可以了

adj1 = Matrix(x,max_iter,ratio)

        发现了这个得到的维度不对,只需要改一下对应的就可以了 

x = x.reshape(128, -1)

        这里边是128,也就是和上面问题是一致的,那改为32就可以了也即

x = x.reshape(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-CSDN博客文章浏览阅读3w次,点赞14次,收藏27次。这个错误主要是因为,数据的数量不能整除batch size的数量,改正方法有两种1. 将batch size改称可以被 数据量整除即可。2. 将dataloader 中的 drop_last改称False也可。推荐使用第二种方法更加简单。...https://blog.csdn.net/qq_38284961/article/details/100144258

        解决办法2:

使用view函数来进行改变,请注意,当使用 view 方法时,要确保变形后的张量的元素数量与原始张量的元素数量相同。

完美解决RuntimeError: The size of tensor a (25) must match the size of tensor b (5)-CSDN博客文章浏览阅读1.6w次,点赞3次,收藏8次。换句话说,这两个张量的第一个维度的元素数量不同,因此无法执行所需的操作。我们需要查看您的代码,并检查这两个张量的形状是否正确,或者使用适当的方法来处理它们的形状以满足需求。请注意,当使用 view 方法时,要确保变形后的张量的元素数量与原始张量的元素数量相同。在这个例子中,变形后的张量的元素数量也是 5 x 5 = 25,与原始张量的元素数量相同。经过我的分析,我原始数据的形状是torch.Size([5, 1, 5]),但是我实际上需要一个torch.Size([5, 5]),因此我需要改变形状。https://blog.csdn.net/qlkaicx/article/details/130981374 

完结撒花

        我不是不想落叶归根,而是生如浮萍,不知道根在哪里

         

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐