PyTorch打印未初始化张量报Overflow when unpacking long错误的原因与解决
解决Ubuntu CPU模式下PyTorch打印空张量时的"Overflow when unpacking long"错误
我来帮你分析这个问题并给出解决办法:
首先,你运行的代码是这样的:
from __future__ import print_function import torch x = torch.empty(5, 3) print(x)
触发了RuntimeError: Overflow when unpacking long的错误,报错栈信息你已经贴出来了。
错误原因
这个问题的根源在于两点:
torch.empty()创建的是未初始化的张量,它的数值是内存里遗留的垃圾数据,这些数据可能是极大的整数,超出了Python整数的安全处理范围;- 你使用的PyTorch版本和Python 3.6存在兼容性问题——旧版PyTorch在打印这类未初始化张量时,尝试把内存里的超大值转换为Python整数,导致解包时发生溢出。
解决办法
这里有几个可行的方案,你可以根据自己的情况选择:
优先推荐:初始化张量后再打印
既然未初始化的张量值是不可控的垃圾数据,那我们直接创建初始化后的张量就可以了,比如:# 用0填充张量 x = torch.zeros(5, 3) # 或者生成0-1之间的随机张量 x = torch.rand(5, 3) # 或者用1填充张量 x = torch.ones(5, 3) print(x)这样打印出来的都是合法的数值,不会触发溢出错误。
升级PyTorch到兼容版本
如果你确实需要使用未初始化的张量,那建议你升级PyTorch到支持Python 3.6的稳定版本(比如1.8.x及以上)。执行下面的命令升级CPU版本的PyTorch:pip install --upgrade torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu新版PyTorch优化了未初始化张量的打印逻辑,会避免这种溢出问题。
检查Python版本兼容性
如果升级PyTorch后问题还存在,可以确认你的Python 3.6是否和当前PyTorch版本兼容。如果条件允许,也可以考虑把Python升级到3.7及以上版本,配合更新的PyTorch,兼容性会更好。
内容的提问来源于stack exchange,提问作者Jibin Mathew
相关产品推荐
相关产品推荐

