Python报错:IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in
Python报错如下:
E:anacondaenvspytorch_gpupython.exe D:/project/graphsage/graphsage/model.py
D:projectgraphsagegraphsageencoders.py:31: UserWarning: nn.init.xavier_uniform is now deprecated in favor of nn.init.xavier_uniform_.
init.xavier_uniform(self.weight)
D:/project/graphsage/graphsage/model.py:28: UserWarning: nn.init.xavier_uniform is now deprecated in favor of nn.init.xavier_uniform_.
init.xavier_uniform(self.weight)
Traceback (most recent call last):
File "D:/project/graphsage/graphsage/model.py", line 181, in <module>
run_cora()
File "D:/project/graphsage/graphsage/model.py", line 102, in run_cora
print(batch, loss.data[0])
IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in Python or `tensor.item<T>()` in C++ to convert a 0-dim tensor to a number
Process finished with exit code 1
这是一个Python程序的运行错误信息,提示了以下问题:
NO.1 UserWarning: nn.init.xavier_uniform is now deprecated in favor of nn.init.xavier_uniform_.
:这是一个警告提示,提醒你在使用nn.init.xavier_uniform
时应改为使用nn.init.xavier_uniform_
。
NO.2 Traceback (most recent call last):...
:这部分是一个错误追踪,显示了程序运行过程中出现错误的调用堆栈。
NO.3 IndexError: invalid index of a 0-dim tensor. Use tensor.item() in Python or tensor.item<T>() in C++ to convert a 0-dim tensor to a number
:这是一个IndexError
错误,说明在代码中尝试使用了一个0维张量的索引,而0维张量不支持这种操作。它提供了解决方案,可以使用tensor.item()
方法将0维张量转换为数值。
为了解决这些问题,你可以按照以下步骤进行处理:
1将代码中使用的nn.init.xavier_uniform
替换为nn.init.xavier_uniform_
,以消除警告。
2在出现IndexError
的地方,使用tensor.item()
方法来获取0维张量的数值。
例如,对于init.xavier_uniform(self.weight)
,你可以将其修改为init.xavier_uniform_(self.weight)
,并在第102行的loss.data[0]
改为loss.item()
。
注意:loss.data[0]
的操作在较新版本的PyTorch中可能已被弃用,建议使用loss.item()
来获取损失值。
本人本地修改如下:
import torch.nn.init as init
# ... 在代码其他部分 ...
# 在encoders.py中的第31行和第28行
init.xavier_uniform_(self.weight)
# 在model.py中的第102行
print(batch, loss.item())
这样修改后,再次运行程序,能解决这些问题。