File "/home/wlzhang/UW_depth-main - ??/solver.py", line 157, in train self.losses.append(g_loss.item()) File "/home/wlzhang/anaconda3/envs/pytorch/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1185, in __getattr__ raise AttributeError("'{}' object has no attribute '{}'".format( AttributeError: 'VGGLoss1' object has no attribute 'item'
时间: 2023-12-07 17:05:22 浏览: 71
这个错误是因为 `g_loss` 是一个自定义的 `VGGLoss1` 类型的对象,这个类不支持 `.item()` 方法。在 PyTorch 中,只有标量张量(scalar tensor)才支持 `.item()` 方法,而 `VGGLoss1` 返回的是一个张量,因此不能用 `.item()` 方法获取它的值。
如果你想将 `g_loss` 的值添加到 `self.losses` 列表中,你可以使用 `.detach().cpu()` 方法将其从计算图中分离,转换为一个在 CPU 上的张量,并用 `.numpy()` 方法将其转换为一个 NumPy 数组,从而将其添加到列表中。
```python
g_loss = VGGLoss1()
# ...
self.losses.append(g_loss.detach().cpu().numpy())
```
这样,`self.losses` 列表中将会包含每个迭代步骤的 `g_loss` 的张量值。注意,这里的 `detach()` 方法是为了将张量从计算图中分离,以避免梯度计算的影响。
阅读全文