cpu运行下报错:IndexError: index out of range in self;GPU上运行时报错:CUDA error: CUBLAS_STATUS_NOT_INITIALIZED

 前提:代码中包含nn.Embedding()语句,且发生如下情况:

1.cpu运行下报错:IndexError: index out of range in self

 2.GPU运行下报错:RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublasCreate(handle)

 究其原因:全是nn.Embedding(num_embeddings ,embedding_dim)层的问题。num_embeddings代表编码库中一共有多少个选项,而其中的每一个选项都是长度为embedding_dim的向量表示的。

 nn.Embedding就是先生成一些嵌入向量,然后调用它对自己的输入进行编码时,通过索引来取值编码。

解决方法:

增大num_embedding的取值。

实例:

a=torch.tensor([[2,3,9],[5,6,8],[8,8,11]]

self.emd=nn.Embedding(10,16)

此时,如果直接使用:self.emd(x)会报上述错误,原因就是编码库中只包含索引值为0,1,2,3,4,5,6,7,8,9对应的编码向量,而a中前面八个在其中,唯有最后一个11不在,故报错“index out of range in self”

解决办法:增大num_embedding的取值。

将self.emd换为:self.emd=nn.EMbedding(12,16)即可,其实只要num_embeddings>11即可(万一不行,继续增大)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值