当前位置: 首页 > 知识库问答 >
问题:

Keras自定义损耗功能:访问当前输入模式

井唯
2023-03-14

在Keras(Tensorflow后端)中,当前输入模式是否可用于我的自定义损失函数?

当前输入模式定义为用于产生预测的输入向量。例如,考虑以下代码:<代码> xyStand、xyTest、yyStand、yyTest= TrimeTestSythRead(x,y,TestLySt= 0.33,RealthObjySt==42,Suffle=false)< /Cord>。然后,当前输入模式是与y_序列相关联的当前X_序列向量(在损失函数中称为y_真)。

在设计自定义损耗函数时,我打算优化/最小化需要访问当前输入模式的值,而不仅仅是当前预测。

我看了https://github.com/fchollet/keras/blob/master/keras/losses.py

我也看过“成本函数,它不仅仅是y_pred,y_true?”

我还熟悉前面生成自定义损失函数的示例:

import keras.backend as K

def customLoss(y_true,y_pred):
    return K.sum(K.log(y_true) - K.log(y_pred))

大概(y\u true,y\u pred)是在别处定义的。我已经浏览了源代码,但没有成功,我想知道我是否需要自己定义当前的输入模式,或者我的loss函数是否已经可以访问它。

共有2个答案

宁弘亮
2023-03-14

您可以使用add_loss将外部层传递给您的损失,在您的例子中是输入张量。

这里有一个例子:

def CustomLoss(y_true, y_pred, input_tensor):
    return K.binary_crossentropy(y_true, y_pred) + K.mean(input_tensor)

X = np.random.uniform(0,1, (1000,10))
y = np.random.randint(0,2, 1000)

inp = Input(shape=(10,))
hidden = Dense(100, activation='relu')(inp)
out = Dense(1, activation='sigmoid')(hidden)
target = Input((1,))
model = Model([inp,target], out)

model.add_loss( CustomLoss( target, out, inp ) )
model.compile(loss=None, optimizer='adam')
model.fit(x=[X,y], y=None, epochs=3)

在推理模式下使用模型(从输入中删除目标)

final_model = Model(model.input[0], model.output)
final_model.predict(X)
刘阳舒
2023-03-14

您可以将损失函数包装为一个内部函数,并将输入张量传递给它(在向损失函数传递附加参数时通常会这样做)。

def custom_loss_wrapper(input_tensor):
    def custom_loss(y_true, y_pred):
        return K.binary_crossentropy(y_true, y_pred) + K.mean(input_tensor)
    return custom_loss

input_tensor = Input(shape=(10,))
hidden = Dense(100, activation='relu')(input_tensor)
out = Dense(1, activation='sigmoid')(hidden)
model = Model(input_tensor, out)
model.compile(loss=custom_loss_wrapper(input_tensor), optimizer='adam')

您可以验证input\u tensor和损失值(主要是K.mean(input\u tensor)部分)将随着不同的X传递给模型而改变。

X = np.random.rand(1000, 10)
y = np.random.randint(2, size=1000)
model.test_on_batch(X, y)  # => 1.1974642

X *= 1000
model.test_on_batch(X, y)  # => 511.15466
 类似资料:
  • 问题内容: 在Keras(具有Tensorflow后端)中,当前输入模式可用于我的自定义损失函数吗? 当前输入模式定义为用于产生预测的输入向量。例如,考虑以下内容:。然后,当前输入模式是与y_train(在损失函数中称为y_true)关联的当前X_train向量。 在设计自定义损失函数时,我打算优化/最小化一个需要访问当前输入模式而不只是当前预测的值。 我已经看过https://github.co

  • 我正在尝试使用Keras创建自定义损失函数。我想根据输入计算损失函数并预测神经网络的输出。 我尝试在Keras中使用自定义loss函数。我认为y_true是我们为训练提供的输出,y_pred是神经网络的预测输出。下面的损失函数与 Keras 中的“mean_squared_error”损失相同。 我想使用神经网络的输入也计算自定义损失函数除了mean_squared_error损失。有没有办法将输

  • 问题内容: 在Keras中,如果您需要自定义损失以及其他参数,我们可以像https://datascience.stackexchange.com/questions/25029/custom- loss-function-with-additional-parameter-in- 凯拉斯 当我训练模型时,上述方法有效。但是,一旦训练了模型,我将很难加载模型。当我尝试在load_model中使用c

  • 我在Tensorflow后端使用Keras。我想创建一个自定义损失函数,它将获得两个直方图之间的欧几里德距离,但我得到了以下错误: TypeError:“Mul”Op的输入“y”的类型float32与参数“x”的类型int32不匹配。 因此,我不知道如何定义我的损失函数。 我试图修改代码,但我得到另一个错误。“h_true=tf.cast(h_true,dtype=tf.dtypes.float3

  • 问题内容: 使用我正在尝试在模板中使用自己的功能之一。不幸的是,我无法使用go模板的功能映射功能。我得到的只是以下错误: 简化的测试用例如下所示(): 我有以下简单模板(): 这是1.1.1。 问题答案: IIRC,必须在解析模板之前定义模板功能图。下面的代码似乎有效。

  • 本文向大家介绍Angular 输入框实现自定义验证功能,包括了Angular 输入框实现自定义验证功能的使用技巧和注意事项,需要的朋友参考一下 此插件使用angular.js、JQuery实现。(jQuery的引入需在angular 之前)   用户可以 在输入框输入数据后验证 必填项、整数型、浮点型验证。   如果在form 里面的输入框验证,可以点击 提交按钮后,实现 必填项验证。 效果图如下