您可以将损失函数包装为内部函数,并将输入张量传递给它(如将其他参数传递给损失函数时通常这样做)。
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_lossinput_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.1974642X *= 1000model.test_on_batch(X, y) # => 511.15466



