У меня есть функция генератора, которая бесконечно циклически перебирает некоторые каталоги изображений и выводит 3-х кортежи пакетов в форме
[img1, img2], label, weight
где img1
и img2
- это batch_size x M x N x 3
тензоры, а label
и weight
- каждый batch_size
x 1 тензоры.
Я предоставляю этот генератор функции fit_generator
при обучении модели с помощью Keras.
Для этой модели у меня есть настраиваемая функция косинусных контрастных потерь,
def cosine_constrastive_loss(y_true, y_pred):
cosine_distance = 1 - y_pred
margin = 0.9
cdist = y_true * y_pred + (1 - y_true) * keras.backend.maximum(margin - y_pred, 0.0)
return keras.backend.mean(cdist)
Конструктивно с моей моделью все работает нормально. Ошибок нет, и он, как и ожидалось, использует входные данные и метки от генератора.
Но теперь я пытаюсь напрямую использовать параметр весов для каждой партии и выполнять некоторую настраиваемую логику внутри cosine_contrastive_loss
на основе веса конкретного образца.
Как мне получить доступ к этому параметру из структуры пакета образцов в момент выполнения функции потерь?
Обратите внимание, что, поскольку это генератор с бесконечным циклом, невозможно предварительно вычислить веса или вычислить их на лету, чтобы преобразовать веса в функцию потерь или сгенерировать их.
Они должны генерироваться синхронно с генерируемыми образцами, и действительно, в моем генераторе данных есть настраиваемая логика, которая определяет веса динамически из свойств img1
, img2
и label
в момент их создания для пакета.