Разделение типов данных в функции потерь keras (эквивалентно операторам if в функциях потерь?)

Можно ли написать пользовательскую функцию потерь в keras, которая гласит: «Для всех данных из набора данных A: рассчитайте потери таким образом ... И для всех данных из набора данных B: вместо этого рассчитайте потерю, как это»

Моя текущая реализация имеет 2 отдельные модели со своими собственными функциями потерь, а затем 2 потока данных даны в отдельных вызовах train_on_batch.

Что касается контекста, моя система представляет собой сеть GAN, которой поручено создать неразличимое представление домена между двумя наборами данных, а также выполнить классификацию. Однако с моим текущим методом кажется, что задача «неразличимости предметной области» становится приоритетной, и моя точность классификации не поднимается выше случайной. (тогда как если я отключу задачу домена, точность классификации возрастет примерно до 80%). И одна проблема, которую я хотел бы исключить, - это множественные вызовы train_on_batch с неперемешанными данными на цикл обучения.


person GuyCoop    schedule 15.06.2020    source источник


Ответы (1)


Для любого, кто может позже натолкнуться на этот вопрос, теперь я понимаю, что сформулировал вопрос плохо с точки зрения фактического ответа. На самом деле ответ на вопрос заключается в том, как вычислять градиенты и применять их как отдельные операции в keras.

Мое решение - перезаписать класс Model, создать новый метод train_on_batch, который принимает более одного набора данных. Затем примените столько вычислений и функций потерь, сколько хотите, внутри gradientTape. Затем, наконец, используйте optimizer.apply_gradient (), чтобы фактически применить градиенты к модели.

person GuyCoop    schedule 13.07.2020