python - 如何使用 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 非常缺乏经验,因此非常感谢任何帮助/直觉。
解决方案
推荐阅读
- python - 尽管安装了正确的依赖项,为什么 PyUSB 无法在 Windows 10 上运行?
- python - 如何解决调用 Python 对象时超出的最大递归深度
- python - 打印最后一行 Beautifulsoup
- javascript - 对对象数组中的参数值进行排序?
- azure - Azure Spring Cloud 和 JHipster
- c++ - 为接收字符数组编写 cin.get() 时出现问题
- c# - 从 WinForms 的组合框中附加文本值
- javascript - 使用 jQuery .detach() 通过解析从 DOM 中删除和重做 div
- python - 如何使用循环和索引从两个现有向量创建第三个向量?
- pandas - 按年龄组对 Pandas 数据框年龄列进行分组