Можно ли использовать выходные данные модели Tensorflow как часть пользовательской функции потерь Keras? - PullRequest
0 голосов
/ 29 марта 2019

Я хочу использовать расстояние извлеченных признаков модели как часть функции потерь, аналогично тому, что описано в этой статье о потерях восприятия.

Я в основном использую Keras с Tensorflow в качестве бэкэнда. Если бы у меня была предварительно обученная модель Keras, я мог бы использовать ее вывод как часть пользовательской потери, например: (пример взят из кода GAN, но я не думаю, что это потеря универсальности)

discriminator = DiscriminatorCNN(...) #returns Keras Model
discriminator.compile(...)

def adversary_loss_factory(discriminator):

    def adversary_loss(y_true, y_pred):
        prediction = discriminator(y_pred)
        prediction = -1 * K.log(prediction)
        return prediction

    return adversary_loss

И тогда adversary_loss может быть использован как потеря другой модели.

Моя проблема в том, что конкретная предварительно обученная модель, которую я использую, доступна только как модель Tensorflow. Я подумал, что это можно сделать, так как это тот же самый бэкэнд, но я не уверен, с чего начать.

Я использую код в этом хранилище , и кажется, что вы можете получить слой внедрения через этот код после правильной загрузки модели:

embeddings = tf.get_default_graph().get_tensor_by_name("embeddings:0")

Я знаю, что вы можете затем использовать sess.run, чтобы получить вложения для определенного пакета, но это не кажется дифференцируемым, так как это приводит к пользовательской потере. Есть ли способ превратить эти вложения в функцию, подобную модели Кераса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...