Пользовательская функция потерь Keras Python для определения максимального значения (абсолютной разности) тензора? - PullRequest
1 голос
/ 30 сентября 2019

В качестве выходных данных у меня есть 1-D массив из 5 элементов, в модели это выглядит так:

out_vector = Dense(out_count, activation='relu', name='out_vector')(network_layer_3)

, где out_count равно 5 (не то, чтобы это действительно имело значение). Когда я сравниваю его с true_out_vector, другим 5-мерным массивом, я хочу, чтобы потеря была «максимумом абсолютных разностей элементов».

Простой пример того, что я имею в виду:

v1 = [94, 1000, 50, 85, 23]

v2 = [100, 430, 88, 12, 90]

Я хочу, чтобы мои потери равнялись самой большой абсолютной разнице, которая, очевидно, равна |1000 - 430| = 570, поскольку элемент 2 имеет эту самую большую разницу. У меня проблемы с тем, чтобы это произошло в Керасе. Вот что я попробовал:

def customLoss(yTrue,yPred):
        return K.maximum(K.abs(yTrue - yPred))  

Но я получаю ошибку:

File "C:\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py", line 609, in ndim
    dims = x.get_shape()._dims
AttributeError: 'int' object has no attribute 'get_shape'

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

1 Ответ

1 голос
/ 30 сентября 2019

Как насчет этого:


from keras import backend as K
v1 = K.constant([94, 1000, 50, 85, 23])
v2 = K.constant([100, 430, 88, 12, 90])


def customLoss(yTrue, yPred):
    return K.max(K.abs(yTrue - yPred))

result = customLoss(v1, v2)

sess = K.get_session()
print(sess.run(result))

и вывод:

570.0

Примечание: метод K.maximum принимает два тензора, в то время как вы передаете только один

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