У меня есть вопрос относительно реализации пользовательской функции потерь для моей нейронной сети.
В настоящее время я пытаюсь сегментировать ячейки для проекта, и я решил использовать unet, поскольку он, кажется, работает достаточно хорошо.Чтобы улучшить мою текущую модель, я решил следовать идее оригинальной статьи о unet (https://arxiv.org/abs/1505.04597), где они реализовали карту весов, назначая таким образом больший вес пикселям, расположенным между ячейками, которые тесно связаны между собой.связанные, как вы можете видеть на этой картинке: Пример карты весов .
В настоящее время я использую Keras для моего unet, и моя проблема в том, что я не знаю, как определить свои весадля моей модели без каких-либо проблем. Моя идея состояла в том, чтобы создать генератор с изображениями и двухканальным массивом, содержащим метки в первом канале и веса во втором канале, чтобы я мог легко извлекать свои веса и меткив моей пользовательской функции потерь.
Мой код выглядит так:
train_generator = zip(image_generator, label_generator, weight_generator)
for (img, label, weight) in train_generator:
img, label = adjustData(img, True, label)
label_weights = np.concatenate((label, weight),axis=3)
# This is the final generator
yield (img, label_weights)
Как вы можете видеть, я создаю train_generator с тремя ранее созданными генераторами, я настраиваю некоторые вещи, а затем получаюмои изображения и комбинированные метки и веса.
Затем, когда я пытаюсь подогнать свою модель под fit_generator, я получаю эту ошибку: ValueError: Ошибка при проверке ввода модели: список массивов Numpy, передаваемых в вашу модель, не соответствует размеру, ожидаемому моделью.Ожидается увидеть 2 массива (ов), но вместо этого я получил следующий список из 1 массива.
Я действительно не знаю, что делать и как правильно реализовать то, что я хочу сделать.
Заранее благодарю за ответы.