我如何构建这个自定进度的学习损失函数并在 keras 中使用它?

问题描述

我正在尝试在我的 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...