本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

1.使用 conda 安装PyTorch后同时在Jupyter导入失败No module named ‘torch’

通过Conda安装PyTorch,同时在Jupyter中导入PyTorch,会报错No module named 'torch'。

分析:

原因就是在使用Jupyter Notebook的时候,加载的仍然是默认的Python Kernel。

解决:

(1)在Conda中切换到安装PyTorch的虚拟环境,然后执行conda install nb_conda_kernels安装Jupyter内核切换工具。

安装完成后,再重启Jupyter Notebook,在新建脚本时就能选择Kernal:


2345_image_file_copy_86.jpg


也可以对建好的文件切换Kernal:


2345_image_file_copy_88.jpg

2.PyTorch使用张量时报错expected scalar type Double but found Float

有时候,使用张量Tensor会报错:

RuntimeError: expected scalar type Double but found Float

分析:

这是因为张量的数据类型不正确。

解决:

此时需要先进行类型转换,将数据类型转为float32,再进行操作,如下:

tensor = tensor.to(torch.float32)

3.PyTorch创建Embedding时报错IndexError: index out of range in self

PyTorch中很多时候都会用到Embedding嵌入,特别是在NLP任务中,用于存储一个简单的存储固定大小的词典的嵌入向量的查找表,按时在创建EMbedding时有时候会出错,如下:

  File "E:\Anaconda3\envs\pytorchbase\Lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl
    return forward_call(*input, **kwargs)
  File "E:\Anaconda3\envs\pytorchbase\Lib\site-packages\torch\nn\modules\sparse.py", line 158, in forward
    return F.embedding(
  File "E:\Anaconda3\envs\pytorchbase\Lib\site-packages\torch\nn\functional.py", line 2044, in embedding
    return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
IndexError: index out of range in self

分析:

这是因为num_embeddings(词典的词个数)不够大,进行词嵌入的时候字典从1, …, n,映射所有的词(或者字)num_embeddings =n是够用的,但是会考虑pad,pad默认一般是0,所以我们会重新处理一下映射字典0, 1, 2, …, n一共n+1个值,此时num_embeddings=n+1才够映射。

解决:

修改参数num_embeddings的值为实际词个数+1即可解决这个问题。

Python 的语法错误或者称之为解析错,是初学者经常碰到的 语法分析器会指出错的一行,并且在最先找到的错误的位置标记一个小小的箭头。 即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。 大多数的异常都不会被程序处理,都以错误信息的形式展现 dahezhiquan