Pytorch使用permute后再reshape会修改张量的值,维度虽然对齐但仍需小心

楼主最近阅读一篇论文的代码,在修改的时候发现loss下降正常但评测指标怎么都上不去,经过两天的排查找到原因。
这篇论文的代码在模型预测之后使用了permute和reshape,导致我模型的预测和预想的完全不一样,示例如下:

predict=model(train).permute(0,1,3,2).reshape(-1,n,66)

虽然表面上看用不用permute最后经过reshape得到的维度都是一样的,也能对其,后续工作也能展开,但问题就在这里,使用了permute后再reshape里面的值会完全不一样,导致虽然没有bug但后续工作受阻

举个例子:
先创建一个[2,3,3]的张量:

在这里插入图片描述
然后一个使用permute一个不用,最后都使用reshape得到一样的维度
在这里插入图片描述
可以看到,虽然a和b都是3✖6的张量,但内容却完全不一样了,所以有时候维度虽然对齐了也是有问题的

导致这种情况的原因是permute会直接修改矩阵的维度,permute(1,0,2)相当于交换0,1两个维度,即将[2,3,3]改变为[3,2,3],原来是2块,每块里面3行3列,现在是3块,每块里面2行3列,之前两块里面的每两行组成了新的一块,而reshape则是将一块一块拆开后重新排列组合,最终导致了值的不同:
在这里插入图片描述
所以如果在模型预测之后你的代码依然有permute函数和reshape函数,需要注意后续的评测标准,因为模型预测的值可能已经被修改了,最后你可能会因为精确度太差而怀疑是不是模型写错了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锌a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值