def forward(self, predicted_tokens, target_tokens): # 设置允许梯度计算 #predicted_tokens = predicted_tokens.requires_grad_() #target_tokens = target_tokens.requires_grad_() scores = torch.zeros_like(target_tokens, dtype=torch.float32) for i in range(target_tokens.size(1)): target_token = target_tokens[:, i] max_score = torch.max(torch.eq(predicted_tokens, target_token.unsqueeze(dim=1)).float(), dim=1)[0] scores[:, i] = max_score loss = 1 - torch.mean(scores) return loss
时间: 2024-04-13 15:28:48 浏览: 88
predicted.rar_ad hoc matlab_aodv_aodv matlab_aodv neural_matlab
5星 · 资源好评率100%
在您提供的代码中,您试图使用`requires_grad_()`方法设置`predicted_tokens`和`target_tokens`的`requires_grad`属性为`True`。然而,这是不正确的用法,因为`requires_grad_()`方法返回的是原张量本身,并不会改变原张量的`requires_grad`属性。
要正确设置`predicted_tokens`和`target_tokens`的`requires_grad`属性为`True`,您可以使用以下代码:
```python
predicted_tokens.requires_grad = True
target_tokens.requires_grad = True
```
将这两行代码添加到您的代码中,以确保这两个张量在计算梯度时被跟踪。
请注意,只有在需要计算梯度的张量上调用`requires_grad_()`方法才会更改其属性。对于不需要计算梯度的张量(例如输入数据),您可以将其保持为不可训练状态。
如果您还有其他问题,请随时提问。
阅读全文