Ind*_*der 5 artificial-intelligence machine-learning cross-entropy pytorch
我已经完成了pytorch交叉熵损失函数的自定义实现(因为我需要更多的灵活性稍后介绍)。我打算用这个训练的模型需要相当长的时间来训练,而且可用的资源不能仅仅用来测试函数是否正确实现。我已经实现了矢量化实现,因为它运行起来会更快。
以下是我的代码:
def custom_cross(my_pred,true,batch_size=BATCH_SIZE):
loss= -torch.mean(torch.sum(true.view(batch_size, -1) * torch.log(my_pred.view(batch_size, -1)), dim=1))
return loss
Run Code Online (Sandbox Code Playgroud)
如果您能建议更优化的实现,或者我在当前的实现中犯了错误,我将非常感激。该模型将使用 Nvidia Tesla K-80 进行训练。
如果您只需要交叉熵,您可以利用 PyTorch 定义的优势。
import torch.nn.functional as F
loss_func = F.cross_entropy
Run Code Online (Sandbox Code Playgroud)
建议更优化的实施
PyTorch 具有F.损失函数,但您可以使用纯 Python 轻松编写自己的损失函数。PyTorch 将自动为您的函数创建快速 GPU 或矢量化 CPU 代码。
所以,你可以检查 PyTorch 的原始实现,但我认为是这样的:
def log_softmax(x):
return x - x.exp().sum(-1).log().unsqueeze(-1)
Run Code Online (Sandbox Code Playgroud)
这是交叉熵损失的原始实现,现在您可以更改:
nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)
Run Code Online (Sandbox Code Playgroud)
对于你需要的东西,你就拥有了。
| 归档时间: |
|
| 查看次数: |
2894 次 |
| 最近记录: |