有时候在跑代码是会出现下面这个错误
/root/miniconda3/lib/python3.8/site-packages/torch/functional.py:568: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:2228.)
这个UserWarning警告是关于torch.meshgrid函数的改动提示。
在PyTorch的新版本中,torch.meshgrid函数需要增加一个indexing参数来指定索引模式。
目前torch.meshgrid默认的索引模式是'ij',新版本中需要显式指定:
根据报错的提示点击上述报错提示内容,然后跳转到相应的functional[.py文件]
kwargs = {} if indexing is None else {'indexing': indexing}
return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]
改为
# 新版本中需要指定indexing模式
kwargs = {} if indexing is None else {'indexing': indexing}
return _VF.meshgrid(tensors, **kwargs, indexing='ij') # type: ignore[attr-defined]
x = torch.arange(4)
y = torch.arange(3)
xx, yy = torch.meshgrid(x, y) # 默认'ij'模式
# 新版本中需要指定indexing模式
xx, yy = torch.meshgrid(x, y, indexing='ij')
这个indexing参数有两种模式:
'ij'模式: 返回的第一个矩阵索引是i,第二个矩阵索引是j,这是默认的传统矩阵索引法则。
'xy'模式: 返回的第一个矩阵索引是x,第二个矩阵索引是y。
所以为了兼容新版本PyTorch,使用torch.meshgrid时需要显式添加indexing='ij'参数。
这个UserWarning提醒我们新版本的改动,需要注意传入索引模式,以避免默认模式改变后代码出错。