Функция внешних потерь в Tensorflow - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть простой двухслойный плотный NN, который я хочу использовать регрессионную модель, чтобы вычислить 4 числа заданных ~ 700 признаков изображения. К сожалению, у меня нет наземных элементов правды, поэтому я использую пользовательскую функцию потерь. Вот источник функции:

def loss_function(logits, img, g, compare_img):

    final_img = img_pipeline(vga_8b=img, g=g%external color gamma function%)

    with tf.name_scope('Loss'):
        loss = score(gt_image=compare_img, curr_img=final_img)
        return loss

Где logits - это текущие оцененные 4 числа, g - это просто интерполированная функция, используемая в качестве цветовой гаммы для изображения, img - это внешнее изображение в градациях серого, используемое для генерации конечного результирующего изображения, используемого для функции score. compare_img не является изображением истинной земли, но некоторые статистические значения (kept in python dict) используются в функции оценки для оценки текущего полученного изображения. К сожалению, я не могу кормить g и compare_img, так как они представляют собой функцию python и словарь python, которые нельзя преобразовать в тензоры.

Есть ли способ как-нибудь взломать его и добиться желаемого результата?

Заранее спасибо!

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете использовать внешние функции с tenorflow с tf.map, но я боюсь сказать, что они не способны вычислять градиенты через него. но ваши функции потери должны быть выводимыми в каждом случае. Поэтому вы должны написать функцию в tenorflow.

Для ваших значений dict вы можете создать lookuptable с помощью

table = tf.contrib.lookup.HashTable( tf.contrib.lookup.KeyValueTensorInitializer(keys, values), -1)

...