Keras in_top_k потеря - PullRequest
       4

Keras in_top_k потеря

0 голосов
/ 29 марта 2020

Я использую Keras (бэкэнд Tensorflow) для построения модели, которая с помощью входных данных предсказывает один класс (из 64 классов), модель мультикласса. Учитывая довольно большое количество классов, я не хочу использовать функции потери categorical_crossentropy или sparse_categorical_crossentropy, поскольку они основаны на одном предсказанном классе.

Например: пусть y_true=0 (разреженный), y_pred1=[0.4, 0.5, 0.01, 0.02, 0.01, ...] и y_pred2=[0.04, 0.05, 0.5, 0.4, 0.01, ...] (где y_pred1 и y_pred2 - прогнозируемые векторы с одним горячим током). Потери выше приведут к той же потере - поскольку золотая метка 0 не является самой высокой меткой, которая была предсказана. В моем случае я хочу разделить прогнозы и получить потери на y_pred1 намного ниже, поскольку золотая метка была в топ-5 прогнозируемых классов.

Я пытался использовать функцию потери костюма, но безуспешно - произошло неясное исключение ValueError: None values not supported..

def in_top_k(y_true, y_pred):
    return keras.backend.in_top_k(y_pred, math_ops.argmax(y_true, axis=-1), k=5)

model.compile(loss=in_top_k,
              optimizer='adam',
              metrics=['accuracy'])

, где y_pred и y_true - [n, 64] тензоры.

  • Что может быть эта ошибка?
  • Является ли моя потеря костюма импл. правильно?
  • Правильно ли мое мышление?

Спасибо!

...