keras - 如何构建这个自定进度的学习损失函数并在 keras 中使用它?
问题描述
我正在尝试在我的 keras 模型中实现自定进度学习 (SPL)。我专注于这项工作,其中自定进度学习也应用于深度学习模型,但实现是使用 pytorch 完成的。我在将以下 pythoch 代码转换为 keras 时遇到了一些麻烦。
创建损失函数
import torch
from torch import Tensor
import torch.nn as nn
class SPLLoss(nn.NLLLoss):
def __init__(self, *args, n_samples=0, **kwargs):
super(SPLLoss, self).__init__(*args, **kwargs)
self.threshold = 0.1
self.growing_factor = 1.3
self.v = torch.zeros(n_samples).int()
def forward(self, input: Tensor, target: Tensor, index: Tensor) -> Tensor:
super_loss = nn.functional.nll_loss(input, target, reduction="none")
v = self.spl_loss(super_loss)
self.v[index] = v
return (super_loss * v).mean()
def increase_threshold(self):
self.threshold *= self.growing_factor
def spl_loss(self, super_loss):
v = super_loss < self.threshold
return v.int()
将损失函数应用于训练
import torch.optim as optim
from model import Model
from dataset import get_dataloader
from loss import SPLLoss
def train():
model = Model(2, 2, 2, 0)
dataloader = get_dataloader()
criterion = SPLLoss(n_samples=len(dataloader.dataset))
optimizer = optim.Adam(model.parameters())
for epoch in range(10):
for index, data, target in dataloader:
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target, index)
loss.backward()
optimizer.step()
criterion.increase_threshold()
return model
1.我怎样才能相应地定义我的损失函数(SPL_loss)? 2.由于我正在使用此数据生成器加载数据,如何使用 model.fit() 并增加 keras 中火车之间的阈值?
解决方案
推荐阅读
- excel - 将word文档问卷中的数据抓取到Excel中
- android - 在Android中将两个按钮放在ActionBar的左侧
- gradle - IntelliJ 和 Gradle 出错,无法使用 main
- python - 如何在 tkinter 上使输入文本区域更大?
- sql - 通过查询 Windows 搜索索引获取文件的全部内容
- mysql - MATCH AGAINST 全文 MariaDB 中的连字符
- javascript - 如何将 React faq 组件与来自 API 的数据一起使用
- javascript - 使用磁盘上的文件夹的项目
- swift - 多点触控操作的多线程 Coregraphics 绘图,Swift
- java - 如何使用 CloudFileClient 从 azure 文件存储中获取文件内容(字节数组)?