错误处理:IndexError: index out of range in self

这个问题解决了一天,最后都要退学了,问了问师兄,原来是这个原因啊~

首先最初的问题是在cuda模式下运行代码出现的,报错如下:

 然后这样是看不出来什么问题的,我们转换到cpu设备上运行,报错如下:

IndexError:index out of range in self。

请记住这个报错, IndexError:index out of range in self。再精确的定位到哪句话报错的,一般是torch的embedding出问题了。张量的输入超出了embedding的合法范围,应该在[0, num_embeddings -1 ]之内。否则会报错。

那么如何解决这个问题呢,首先你要找到什么时候定义嵌入层的,一般是model内部,我采用的方法是在定义嵌入层的时候将num_embeddings开大一点。就比如:

我是这里报错:输入张量src_quadkey里边的值有的大于num_embeddings,所以会报错。

#这里报错!!!!  
src_quadkey_emb = self.emb_quadkey(src_quadkey)

这是我定义嵌入层的地方,n_quadkey就是上边的num_embeddings,这里我们调大一些,应该不会有啥影响吧,反正我就这么干的,你可以试试,运行一下就好了!

  self.emb_loc = Embedding(n_loc, features, True, True)#地点id
  self.emb_quadkey = Embedding(n_quadkey+1000, features, True, True)#quadkey的id

按理论来说,这里的只需要扩大一些num_embeddings就好了,但是我觉得根本原因在于你输入的张量为什么会比num_embeddings大,你可以试着debug一下。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值