【发布时间】:2020-02-27 14:30:07
【问题描述】:
我有一个数据集,其中包含一个特征矩阵 X 和一个大小为 N 的标签矩阵 y,其中每个元素 y_i 属于 [0,1]。我有以下损失函数
其中g(.) 是一个依赖于输入矩阵 X 的函数。
我知道 Keras 自定义损失函数必须采用 customLoss(y_true,y_predicted) 的形式,但是,我在将术语 g(X) 合并到损失函数中时遇到了困难,因为这取决于输入矩阵。
对于我数据集中的每个数据点,我的输入格式为 X_i = (H, P),其中这两个参数是矩阵,函数 g 为每个数据点定义为 g(X_i) = H x P。我可以在损失函数中传递a = (H, P),因为这取决于每个示例,还是我需要通过连接它们来一次传递所有矩阵?
编辑(基于丹尼尔的回答):
original_model_inputs = keras.layers.Input(shape=X_train.shape[1])
y_true_inputs = keras.layers.Input(shape=y_train.shape[1])
hidden1 = keras.layers.Dense(256, activation="relu")(original_model_inputs)
hidden2 = keras.layers.Dense(128, activation="relu")(hidden1)
output = keras.layers.Dense(K)(hidden2)
def lambdaLoss(x):
yTrue, yPred, alpha = x
return (K.log(yTrue) - K.log(yPred))**2+alpha*yPred
loss = Lambda(lambdaLoss)(y_true_inputs, output, a)
model = Keras.Model(inputs=[original_model_inputs, y_true_inputs], outputs=[output], loss)
def dummyLoss(true, pred):
return pred
model.compile(loss = dummyLoss, optimizer=Adam())
train_model = model.fit([X_train, y_train], None, batch_size = 32,
epochs = 50,
validation_data = ([X_valid, y_valid], None),
callbacks=callbacks)
【问题讨论】:
-
你能具体谈谈你面临的困难吗?
-
@ravikt:我已经更新了关于您的问题的帖子。谢谢。
-
我已经更新了答案
-
在这里回答,
a将是g: stackoverflow.com/questions/58566096/… -
@DanielMöller:在你提到我的答案中,你写了
model.fit([x_train, y_train], anything_maybe_None_or_np_zeros ,....)。现在,我知道[x_train, y_train]被视为模型的输入,但我应该使用y_train而不是anything_maybe_None_or_np_zeros。我真的不明白你为什么说我们可以放anything_maybe_None_or_np_zeros。是否可以解释这一点?谢谢!
标签: python keras neural-network loss-function