本文介绍了损失函数的正确方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试在 keras 中实现一个损失函数.但是我无法找到一种方法来传递超过 2 个参数而不是 loss(y_true, y_predict) 所以我想使用 lambda 层作为最后一层并在 lambda 层本身中进行计算并简单地返回 y_predict 的值在这样的损失函数中

Hi I have been trying to implement a loss function in keras. But i was not able to figure a way to pass more than 2 arguments other than loss(y_true, y_predict) so I thought of using a lambda layer as the last layer and doing my computation in lambda layer itslef and simply returning the value of y_predict in loss function like this

def loss_function(x):
    loss = some calculations
    return loss

def dummy_loss(y_true, y_pred):
    return y_pred

def primary_network():
    global prim_binary_tensor
    x = VGG16(weights='imagenet', include_top=True, input_shape=image_shape)
    last_layer = Dense(k_bit, activation='tanh', name='Dense11')(x.layers[-1].output)
    last_layer, x = basic_model()
    lambda_layer = Lambda(loss_function)([last_layer, prim_binary_tensor])
    model = Model(inputs=[x.input, prim_binary_tensor], outputs=[lambda_layer])
    model.compile(optimizer="adam", loss=dummy_loss,metrics=['accuracy'])
    return model

所以我的问题是:

1) 我计算损失的方法正确吗?是否保证为每个图像(输入数据)调用 lambda 层函数?

1) Am I doing it the right way to calculate the loss? Is it guranteed that the lambda layer function is called for each and every image(input_data)?

2) 有人可以建议我如何将多个参数传递给损失函数吗?

2) Can someone suggest me how to pass multiple arguments to a loss function?

3) 损失函数的最终结果可以是标量还是必须是向量或矩阵?

3) Can the final outcome of a loss function be a scalar or it has to be a vector or matrix?

推荐答案

回答您的问题:

  1. 我不知道您的方法是否有效,但有一个更简单的解决方案.

  1. I don't know whether your approach works, but there is an easier solution.

您可以通过定义偏函数来传递多个参数.

You can pass multiple arguments by defining a partial function.

损失函数的输出是一个标量.

The output of a loss function is a scalar.

这是一个演示如何将多个参数传递给损失函数的示例:

Here is an example that demonstrates how to pass multiple arguments to a loss function:

from keras.layers import Input, Dense
from keras.models import Model
import keras.backend as K


def custom_loss(arg1, arg2):
    def loss(y_true, y_pred):
        # Use arg1 and arg2 here as you wish and return loss
        # For example:
        return K.mean(y_true - y_pred) + arg1 + arg2
    return loss

x = Input(shape=(1,))
arg1 = Input(shape=(1,))
arg2 = Input(shape=(1,))
out = Dense(1)(x)
model = Model([x, arg1, arg2], out)
model.compile('sgd', custom_loss(arg1, arg2))

这篇关于损失函数的正确方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-29 14:29