Я проектирую нейронную сеть в керасе для задачи классификации. Мои метки - это точки на плоскости, расположение которых (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?