问题描述
我正在尝试在我的 keras 模型中实现自定进度学习 (SPL)。我专注于 this work,其中自定进度学习也应用于深度学习模型,但实现是使用 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,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,index)
loss.backward()
optimizer.step()
criterion.increase_threshold()
return model
1. 我如何相应地定义我的损失函数(SPL_loss)? 2. 由于我使用 this data generator 加载数据,因此如何使用 model.fit() 并增加 keras 中列车之间的阈值?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)