Как нарезать массивы в пользовательской функции потерь keras - PullRequest
0 голосов
/ 13 мая 2019

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

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

def custom_loss(distance_matrix):
    def loss(y_true, y_pred):
        return distance_matrix[tf.keras.backend.argmax(y_true, axis=-1),
                               tf.keras.backend.argmax(y_pred, axis=-1)]
    return loss

Моя идея состоит в том, чтобы установить значение потерь для элемента [pred, true] матрицы расстояний, где pred - это прогнозируемый класс, поэтому argmax прогнозируемых вероятностей класса y_pred.

Есть ли способ преобразовать тензор tf.keras.backend.argmax(y_true, axis=-1) в массив numpy, чтобы разрешить нарезку, или, альтернативно, есть ли способ использовать тензоры для нарезки?

Я попробовал идеи из этой темы, но безуспешно: Как я могу преобразовать тензор в массив Numpy в TensorFlow?

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