ME.cat()报错

前言

最近在使用MinkowskiEngine时,遇到了一些报错,具体报错为:AssertionError: SparseTensors must have the same coordinate_map_key.coordinate map key:[32, 32, 32]:fa37J != coordinate map key:[32, 32, 32]。
在网上找答案的时候发现没有人对这个问题有过回答,很是苦恼,心里有点不明白为什么对之前的代码进行了一点小小的改动就报错了,于是开始了我的debug+猜测的路程,最后给我找出来了原因。

解决方法

1、将代码中的 ME.MinkowskiGenerativeConvolutionTranspose 函数换为 ME.MinkowskiConvolutionTranspose函数,由于上一段代码我用的时ME.MinkowskiConvolutionTranspose这个函数,但是后面觉得改成ME.MinkowskiGenerativeConvolutionTranspose这个函数应该也没有问题,但是确实是这个函数引起的问题。
2、还有之前我也加过一些代码,将坐标管理器设置成全局的,根据官方的使用规则设置,
ME.cat()报错_第1张图片
如果不是由于ME.MinkowskiGenerativeConvolutionTranspose这个函数引起的问题,不妨试试按照上面的方法来设置一下坐标管理器,官方的网址为:MinkowskiEngine官网
使用方法就是在导入包之后设置一下坐标管理器为全局,然后在你的网络中的forward函数记得使用最后一句代码清除缓存,记得一定要清除缓存,本人实测,不清除缓存会越积累越多,最后原本使用5G的显存,大到24G都不够用。

具体原因

根据字面意思,AssertionError: SparseTensors must have the same coordinate_map_key.coordinate map key:** [32, 32, 32]:fa37J != coordinate map key:[32, 32, 32] **,就是这两个从坐标图关键字不一样,很明显前面的比后面的多了几个字,就是“:fa37J”。根据我的经验来看,这跟数据不在同一张卡上的情况很类似,就比如你的一个数据在0卡,另一个数据在1卡,然后再进行操作,那就会报错的类似情况。上面所说的两种情况的原因,我个人猜测了一下,不一定对。
第一种原因,两个函数返回的数据类型不一样,这个得去看官方的文档对比一下:
ME.cat()报错_第2张图片
ME.cat()报错_第3张图片
可以看到两句话有点不一样,后面的这个函数如果不指定的话,会生成新的坐标,虽然坐标管理器设置了全局但是坐标的关键字还是会不一样,因此,按理来说也可以通过设置坐标的关键字来解决这个问题,具体的我还没探索出来。
第二种原因,就是个人的主观想法了,看了官方文档之后,觉得设置共享的坐标管理器应该会好一些,所以就设置了,做一下尝试,无意中就成功了。

结束语

这篇文章用来记录踩过的坑,仅此而已,希望对读者有所帮助,望不喜勿喷。

你可能感兴趣的:(Debug之旅,深度学习)