Как запустить model.predict() для 5-мерного массива в Keras?

#python #numpy #tensorflow #keras #scikit-image

#python #numpy #тензорный поток #keras #scikit-изображение

Вопрос:

Я обучил модель двоичной классификации, которая принимает изображение (128x128x3), а затем выдает двоичное значение 0 или 1. Затем я хочу увеличить изображение, скажем (nxmx3), и применить оконную функцию, чтобы модель выполняла прогнозирование в каждом окне.

Я использовал skimage.util.view_as_windows для преобразования изображения (1024x1024x3) в (897,897,128,128,3) массив numpy. Теперь я хочу запустить каждое окно (i, j, 128,128,3) в моей модели, а затем поместить его в то же место. В конце концов, я хотел бы получить массив (897 897), содержащий вероятность существования этого класса.

То, как я делаю это сейчас, требует выполнения цикла for, выполнение которого занимает почти 1-2 минуты, при этом замедляется по мере увеличения списка, содержащего прогнозы модели.

Есть ли способ векторизовать этот процесс? Возможно, сгладить массив numpy, запустить на нем model.predict(), а затем создать 2d-массив с теми же предыдущими размерами?

Ответ №1:

Вы можете использовать полностью сверточные сети, которые используют скользящее окно для прогнозирования выходных данных и не зависят от формы ввода. замените ваши полностью связанные слои сверточными слоями с тем же output_shape и обучите его наборам данных (128x128x3).

если вы прогнозируете на входном изображении 1024×1024, сеть прогнозирует одну метку для каждых регионов 128×128.

Комментарии:

1. Можно ли это сделать с помощью предварительно обученной сети? Возможно, использовать его как ввод -> Пользовательский слой CNN с моделью -> вывод?

2. конечно. просто помните, что вы должны удалить все полностью связанные слои, иначе вы получите ошибку для другой формы ввода

3. Ах, я понимаю, какую ошибку вы имеете в виду. Вы случайно не знаете, где я мог бы посмотреть пример того, о чем вы говорите? Я бы очень хотел избежать повторного обучения моей модели, если это возможно.

4. datascience.stackexchange.com/questions/55212/…