Как использовать пользовательские потери тензорного потока для модели keras? - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь реализовать функцию потерь, используя представления промежуточных слоев. Насколько мне известно, пользовательская функция потерь бэкэнда Keras принимает только два входных аргумента (y_ture и y-pred). Как я могу определить функцию потерь с помощью @ tf.function и использовать ее для модели, определенной через Keras? любая помощь будет оценена.

1 Ответ

1 голос
/ 18 июня 2020

это простой обходной путь для передачи дополнительных переменных в вашу функцию потерь. в нашем случае мы передаем скрытый вывод одного из наших слоев (x1). этот вывод можно использовать для выполнения каких-либо действий внутри функции потерь (я выполняю фиктивную операцию)

def mse(y_true, y_pred, hidden):

    error = y_true-y_pred
    return K.mean(K.sqrt(error)) + K.mean(hidden)


X = np.random.uniform(0,1, (1000,10))
y = np.random.uniform(0,1, 1000)

inp = Input((10,))
true = Input((1,))
x1 = Dense(32, activation='relu')(inp)
x2 = Dense(16, activation='relu')(x1)
out = Dense(1)(x2)

m = Model([inp,true], out)
m.add_loss( mse( true, out, x1 ) )
m.compile(loss=None, optimizer='adam')
m.summary()

history = m.fit([X, y], y, epochs=10)

## final fitted model to compute predictions
final_m = Model(inp, out)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...