问题:module 'torch' has no attribute '_six'
原因:我们下载使用的一般是版本较新的pytorch,而我们在复现一些代码,或是使用一些教程时,他们使用的pytorch版本可能老于我们的版本,故由于版本兼容性导致该问题的发生。在较新的pytorch中,torch._six模块已被移除,但是我们的代码仍然使用该模块(与环境不匹配),所以报错。
解决方法:
在导入torchvision之前添加如下代码模拟torch._six:
# 临时添加torch._six支持
if not hasattr(torch, '_six'):
import six
torch._six = six
这个方法能在使用旧版本pytorch编写代码的源码/教程中,适配新版本pytorch的环境。
自己编写代码时不建议这么做,而是使用较新版本的pytorch,并避免使用旧版本的模块。
问题:AttributeError: module 'six' has no attribute 'string_classes'
原因:six库版本与torchvision不兼容,旧版本的torchvision依赖six.string_classed判断字符串类型,但是新版的six库已经移除了string_classed属性。
解决方法:
在代码开头手动定义six.string_classed,之后再导入torchvision相关模块:
import six
# 手动添加 six.string_classes 定义(模拟旧版本 six 的行为)
if not hasattr(six, 'string_classes'):
six.string_classes = (str,)
或是把six库版本降级到1.16.0。