嗨,我一直试图在喀拉拉邦实现损失功能。但是我无法找到一种方法来传递除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)损失函数的最终结果可以是标量还是必须是向量或矩阵?

最佳答案

您的问题的答案:


我不知道您的方法是否可行,但是有一个更简单的解决方案。
您可以通过定义部分函数来传递多个参数。
损失函数的输出是标量。


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

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

关于python - 正确的损失函数方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50295689/

10-09 16:17
查看更多