首页 > 解决方案 > 如何使用 Keras 将输出的梯度与输入的输入合并到损失函数中?

问题描述

我已经设法将梯度合并到损失函数中,但问题是我似乎无法选择我需要的特定梯度。该模型有多个输入和一个输出,我目前不确定使用的是哪一个。模型定义如下:

input_shape = (5,)
input_tensor = Input(shape = input_shape)
l1 = Dense(400, activation = 'relu')(input_tensor)
l2 = Dense(400, activation = 'relu')(l1)
l3 = Dense(400, activation = 'relu')(l2)
l4 = Dense(400, activation = 'relu')(l3)
output_tensor = Dense(1, activation = 'relu')(l4)
model = Model(input_tensor, output_tensor)


def custom_loss(input_tensor, output_tensor):
    def newloss(y_true, y_pred):
        mse = K.mean(K.square(y_true - y_pred))
        gradients = K.gradients(output_tensor, input_tensor)[0][:,1]
        return mse + K.maximum(-1*gradients, 0)
    return newloss


sgd = keras.optimizers.Adam(lr = 0.001, beta_1 = 0.9, beta_2 = 0.999)
model.compile(loss = custom_loss(input_tensor, output_tensor),
              optimizer = 'sgd',
              metrics = ['mae'])

epochs = 10
batch_size = 100
# Fit the model weights.
history = model.fit(x_train_bs, y_train_bs,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test_bs, y_test_bs))

根据我的理解,K.gradients 函数应该产生 5 个导数(由于 5 个输入),但我无法索引它来选择我特别需要的那个。我对 Keras 非常缺乏经验,因此非常感谢任何帮助/直觉。

标签: pythontensorflowkeras

解决方案


推荐阅读