如何在 Keras 中实现自适应损失?

2023-12-26

我正在尝试使用 Keras 来实现中完成的工作通用的自适应鲁棒损失函数 https://arxiv.org/abs/1701.03077。作者提供了处理困难细节的张量流代码。我只是想在 Keras 中使用他的预构建函数。

他的自定义损失函数正在学习控制损失函数形状的参数“alpha”。除了训练期间的损失之外,我还想跟踪“alpha”。

我对 Keras 自定义损失函数和使用包装器有些熟悉,但我不完全确定如何使用回调来跟踪“alpha”。下面是我选择如何在 Keras 中简单地构建损失函数。但是我不确定如何访问“alpha”进行跟踪。

从提供的张量流代码 https://github.com/google-research/google-research/blob/master/robust_loss/adaptive.py,函数lossfun(x)返回一个元组。

def lossfun(x,
            alpha_lo=0.001,
            alpha_hi=1.999,
            alpha_init=None,
            scale_lo=1e-5,
            scale_init=1.,
            **kwargs):
    """
    Returns:
        A tuple of the form (`loss`, `alpha`, `scale`).
    """
def customAdaptiveLoss(): 
    def wrappedloss(y_true,y_pred):
        loss, alpha, scale = lossfun((y_true-y_pred))  #Author's function
        return loss
    return wrappedloss

Model.compile(optimizer = optimizers.Adam(0.001),
                        loss = customAdaptiveLoss,)

同样,我希望做的是在训练期间跟踪变量“alpha”。


以下示例将 alpha 显示为指标。在 Colab 中测试。

%%
!git clone https://github.com/google-research/google-research.git

%%
import sys
sys.path.append('google-research')
from robust_loss.adaptive import lossfun

# the robust_loss impl depends on the current workdir to load a data file.
import os
os.chdir('google-research')

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import *
from tensorflow.keras.models import Model
from tensorflow.keras import backend as K

class RobustAdaptativeLoss(object):
  def __init__(self):
    z = np.array([[0]])
    self.v_alpha = K.variable(z)

  def loss(self, y_true, y_pred, **kwargs):
    x = y_true - y_pred
    x = K.reshape(x, shape=(-1, 1))
    with tf.variable_scope("lossfun", reuse=True):
      loss, alpha, scale = lossfun(x)
    op = K.update(self.v_alpha, alpha)
    # The alpha update must be part of the graph but it should
    # not influence the result.
    return loss + 0 * op

  def alpha(self, y_true, y_pred):
    return self.v_alpha

def make_model():
  inp = Input(shape=(3,))
  out = Dense(1, use_bias=False)(inp)
  model = Model(inp, out)
  loss = RobustAdaptativeLoss()
  model.compile('adam', loss.loss, metrics=[loss.alpha])
  return model

model = make_model()
model.summary()

init_op = tf.global_variables_initializer()
K.get_session().run(init_op)

import numpy as np

FACTORS = np.array([0.5, 2.0, 5.0])
def target_fn(x):
  return np.dot(x, FACTORS.T)

N_SAMPLES=100
X = np.random.rand(N_SAMPLES, 3)
Y = np.apply_along_axis(target_fn, 1, X)

history = model.fit(X, Y, epochs=2, verbose=True)
print('final loss:', history.history['loss'][-1])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Keras 中实现自适应损失? 的相关文章

随机推荐

  • jaxb XmlAccessType: PROPERTY 示例

    我正在尝试使用 jaxb 并希望使用 XmlAccessType PROPERTY 让 jaxb 使用 getters setters 而不是直接使用变量 但是 get 不同的错误取决于我的尝试或变量 根本没有像我想要的那样设置 有什么好的
  • 仅显示垂直线的表格

    我需要一种方法来仅显示表格中的垂直线 我尝试将 border left 和 border right 添加到表格和单独的 td 中 两者都带有 1pxsolid red 但它不会添加边框颜色 所以我正在寻找一种创建这些垂直线的简单方法 Us
  • 如何在 SQL Server 中拆分字符串并将值插入到表中

    我有一个像这样的字符串 72594206916 2 1 2 08 Tacoma WA 72594221856 5 5 7 13 San Francisco CA 72594221871 99 12 30 12 Dallas TX 这基本上是
  • 用于创建应用程序注册的服务主体权限

    我使用服务主体作为 azure cli 的登录项 该服务主体的角色是 所有者 我正在尝试运行 az ad app list and az ad app create display name Test application 2 并出现错误
  • 如何触及 HABTM 关系

    如果您有 2 个模型 视频和类别 并且它们彼此之间具有 has and belongs to many 关系 那么当其中一个模型发生更改时 如何执行触摸以使缓存失效 您不能像处理一对多关系那样 触摸 它们 现在 当我更改类别名称时 属于该类
  • 删除sql SELECT中的所有非数字字符

    我想在 SQL 中调用查询时删除所有非数字字符 我有一个函数 在函数中 我这样做 Declare KeepValues as varchar 50 Set KeepValues 0 9 While PatIndex KeepValues T
  • Android Retrofit导致Socket超时异常

    我正在 Android Galaxy S3 Nexus 7 设备上使用改造库对运行 Struts2 的 tomcat 服务器进行 POST 调用 POST 调用失败 tomcat日志显示Socket超时异常 使用通过curl 完成的完全相同
  • Core Data有回调方法吗?

    我想知道当核心数据实体中发生某些情况时是否有任何特殊的方法可以采取行动 这就是我在本案中的意思 我有一个文件名作为属性存储在核心数据实体中 当应用程序运行时 可能会发生具有此文件名的项目从核心数据中删除的情况 在这种情况下 我想要发生的是将
  • 嵌套的 std::transform 效率低吗?

    如果我有一个std string std string s hello 以及一个就地修改它的循环 如下所示 for auto c s c std toupper c 我可以用同等的东西替换它transform std transform s
  • 使用反射查找具有自定义属性的方法

    我有一个自定义属性 public class MenuItemAttribute Attribute 和一个包含一些方法的类 public class HelloWorld MenuItemAttribute public void Sho
  • 蒙特卡洛模拟代码:在 R 中生成给定大小的样本

    我首先使用以下代码生成 500 个 0 到 1 之间均匀分布的随机数的样本 set seed 1234 X lt runif 500 min 0 max 1 现在 我需要编写一个伪代码 为 MC 模拟生成 N 500 的 10000 个样本
  • PackageInstaller 完成(自我)更新后启动应用程序

    PackageInstaller 成功 自行 更新应用程序后 应用程序将关闭并且不会再次启动 可能重复 Android PackageInstaller 更新后重新打开应用程序 https stackoverflow com questio
  • Erlang 节点的数量可能/实用吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 1 Erlang 网络中可以存在的最大理论节点数是多少 理论 可能意味着 语言允许或不允许的任何内容 2 Erlang 网络中实际可以
  • 用于从故事板实例化的 UIViewController 扩展

    我正在尝试用 Swift 编写一个小扩展来处理 a 的实例化UIViewController来自故事板 我的想法如下 既然UIStoryboard的方法instantiateViewControllerWithIdentifier需要一个标
  • 为什么我们需要主干js或任何JS MVC框架?

    如果我们已经使用后端 MVC 框架 例如 Django 或 ROR 为什么还需要使用 JS MVC 框架 主干 我无法理解两个 MVC 框架的概念以及它们如何组合在一起 我认为所有前端相关文件或逻辑 html css js 都位于后端框架的
  • 如何获取 docker 镜像的准确日期?

    I run docker images并得到这样的东西 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker io postgres latest a7d662bede59 2 weeks
  • 如何使用列标题引用 Google Apps 脚本电子表格中的单元格

    我有几个 Google 表格 可以连接并更新它们之间的单元格 现在我必须使用 R1C1 或 A1 类型引用来定义基于特定列的获取或设置单元格 如果添加新列 所有这些引用现在都会关闭 每个工作表的第一行都将列标题作为这些单元格中的值 我可以以
  • Solr 查询唯一整数字段

    我在 schema xml 中定义了一个字段
  • Django Forms clean() 方法 - 需要客户端的 IP 地址

    我正在重写 Django 表单上的 clean 方法 我想要访问客户端的 IP 地址 假设这是绑定表单 如果我有对请求对象的引用 我可以从 META REMOTE ADDR 轻松获取它 但是 我没有参考该请求 关于如何做到这一点有什么想法吗
  • 如何在 Keras 中实现自适应损失?

    我正在尝试使用 Keras 来实现中完成的工作通用的自适应鲁棒损失函数 https arxiv org abs 1701 03077 作者提供了处理困难细节的张量流代码 我只是想在 Keras 中使用他的预构建函数 他的自定义损失函数正在学