Доступ к элементу по индексу в тензоре - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь создать собственную функцию потерь в Керасе. Моя модель - это CNN для окраски изображений, и идея состоит в том, чтобы оштрафовать каждый предсказанный пиксель на основе его редкости в ранее измеренном распределении цвета пикселя по моему набору данных. Функция потери получает предварительно вычисленные отношения каждого значения цвета к общему количеству пикселей из распределения. Таким образом, я должен получить коэффициент для каждого истинного пикселя, который должен быть доступен в массиве отношений по индексу текущего значения пикселя.

Я построил «тупую» версию с потерями в NumPy, и она работает как положено. Поскольку я пытаюсь преобразовать его в Tensorflow с помощью tf.map_fn , я не вижу способа реализовать это. Мои попытки запустить сеанс или оценить тензор не удаются.

Ниже представлена ​​моя функция потерь.

def color_rebalancing_loss(ratios):

    def loss(y_true, y_pred):
        err = np.absolute(np.subtract(y_true, y_pred))
        pixel_weight = tf.map_fn(lambda x: coefficient(x), y_true)
        return err * pixel_weight

    def coefficient(x):
        x = tf.to_int32(x)
        x = x.eval(session = tf.Session())
        return 1/ratios[x]

    return loss

Ошибка в этой строке

    x = x.eval(session = tf.Session())

С этой ошибкой:

    ValueError: Operation 'loss/activation_1_loss/map/while/TensorArrayReadV3' has been marked as not fetchable.

Мой поиск по Интернету не выявил каких-либо потенциальных исправлений, люди предлагают не выполнять итерации по массиву, использовать встроенную функцию тензорного потока, но получить доступ к

   ratios[x] 

является обязательным в этом случае. Любые предложения будут оценены.

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