select tokens.id,tokens.handsel_rule,tokens.`name`,tokens.resource_type,tokens.build_task_id,e_secondary_market_product.`status` from tokens, e_secondary_market_product where tokens.id = e_secondary_market_product.token_id AND tokens.contract_id = 306 AND e_secondary_market_product.`status` = 3
时间: 2023-12-12 21:04:43 浏览: 65
这似乎是一个 SQL 查询语句,根据指定的条件从两个表中检索数据。它返回了 tokens 表中 id、handsel_rule、name、resource_type 和 build_task_id 列,以及 e_secondary_market_product 表中 status 列,这两个表之间通过 token_id 进行关联,并且 tokens 表中的 contract_id 等于 306,同时 e_secondary_market_product 表中的 status 等于 3。
相关问题
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
在您提供的代码中,您试图使用`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_()`方法才会更改其属性。对于不需要计算梯度的张量(例如输入数据),您可以将其保持为不可训练状态。
如果您还有其他问题,请随时提问。
Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn : class CustomLoss(nn.Module): def __init__(self): super(CustomLoss, self).__init__() def forward(self, predicted_tokens, target_tokens): # 设置允许梯度计算 predicted_tokens.requires_grad = True target_tokens.requires_grad = True 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
这个错误通常是因为在计算损失函数时,某个张量没有设置梯度计算,但在反向传播时却尝试计算其梯度。为了解决这个问题,您可以将张量的`requires_grad`属性设置为`True`,以确保其梯度可以被计算。
请修改您的代码如下:
```python
class CustomLoss(nn.Module):
def __init__(self):
super(CustomLoss, self).__init__()
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
```
在上述代码中,我们使用了`.requires_grad_()`方法来将`predicted_tokens`和`target_tokens`的`requires_grad`属性设置为`True`,以确保它们的梯度可以被计算。这样,在反向传播时就不会出现上述错误。
希望这个修改能够解决您遇到的问题!如果还有其他问题,请随时提问。
阅读全文