当前位置:   article > 正文

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

indexerror: index out of range in self

 前提:代码中包含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即可(万一不行,继续增大)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/89074
推荐阅读
相关标签
  

闽ICP备14008679号