【问题标题】:Correct way of loss function损失函数的正确方式
【发布时间】:2018-05-11 15:34:25
【问题描述】:

您好,我一直在尝试在 keras 中实现损失函数。但是我无法想出一种方法来传递除 loss(y_true, y_predict) 之外的超过 2 个参数,所以我想使用 lambda 层作为最后一层并在 lambda 层 itslef 中进行计算并简单地返回 y_predict 的值在这样的损失函数中

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) 我计算损失的方法是否正确?是否保证每张图片(input_data)都会调用lambda层函数?

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

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

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    回答您的问题:

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

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

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

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

    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))
    

    【讨论】:

      猜你喜欢
      • 2020-08-25
      • 2018-01-11
      • 2021-06-28
      • 2018-04-27
      • 2021-09-30
      • 2019-05-22
      • 2021-04-23
      • 2021-07-18
      • 1970-01-01
      相关资源
      最近更新 更多