gpt4 book ai didi

python - Keras 自定义损失函数 : Accessing current input pattern

转载 作者:太空狗 更新时间:2023-10-29 17:42:38 25 4
gpt4 key购买 nike

在 Keras(带有 Tensorflow 后端)中,当前输入模式是否可用于我的自定义损失函数?

当前输入模式定义为用于生成预测的输入向量。例如,考虑以下内容:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, shuffle=False)。然后当前输入模式是与 y_train 关联的当前 X_train 向量(在损失函数中称为 y_true)。

在设计自定义损失函数时,我打算优化/最小化需要访问当前输入模式的值,而不仅仅是当前预测。

我浏览了 https://github.com/fchollet/keras/blob/master/keras/losses.py

我也看过“Cost function that isn't just y_pred, y_true?

我也熟悉前面的示例来生成自定义损失函数:

import keras.backend as K

def customLoss(y_true,y_pred):
return K.sum(K.log(y_true) - K.log(y_pred))

大概 (y_true,y_pred) 是在别处定义的。我查看了源代码但没有成功,我想知道我是否需要自己定义当前输入模式,或者我的损失函数是否已经可以访问它。

最佳答案

您可以将损失函数包装为一个内部函数,并将您的输入张量传递给它(通常在将附加参数传递给损失函数时这样做)。

def custom_loss_wrapper(input_tensor):
def custom_loss(y_true, y_pred):
return K.binary_crossentropy(y_true, y_pred) + K.mean(input_tensor)
return custom_loss

input_tensor = Input(shape=(10,))
hidden = Dense(100, activation='relu')(input_tensor)
out = Dense(1, activation='sigmoid')(hidden)
model = Model(input_tensor, out)
model.compile(loss=custom_loss_wrapper(input_tensor), optimizer='adam')

您可以验证 input_tensor 和损失值(主要是 K.mean(input_tensor) 部分)将随着 X 的不同而变化传递给模型。

X = np.random.rand(1000, 10)
y = np.random.randint(2, size=1000)
model.test_on_batch(X, y) # => 1.1974642

X *= 1000
model.test_on_batch(X, y) # => 511.15466

关于python - Keras 自定义损失函数 : Accessing current input pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46464549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com