#machine-learning #deep-learning #keras
#машинное обучение #глубокое обучение #keras
Вопрос:
Может ли Keras обрабатывать входные изображения разного размера? Например, в полностью сверточной нейронной сети входные изображения могут иметь любой размер. Однако нам нужно указать форму ввода, когда мы создаем сеть с помощью Keras. Поэтому, как мы можем использовать Keras для работы с различными размерами входных данных, не изменяя размер входных изображений до одинакового размера? Спасибо за любую помощь.
Ответ №1:
ДА. Просто измените форму ввода на shape=(n_channels, None, None). Где n_channels — количество каналов во входном изображении.
Я использую серверную часть Theano, поэтому, если вы используете tensorflow, вам, возможно, придется изменить его на (None, None, n_channels)
Вы должны использовать:
input_shape=(1, Нет, Нет)
Ни один в форме не обозначает переменный размер. Обратите внимание, что не все слои будут работать с такими переменными размерами, поскольку для некоторых слоев требуется информация о форме (например, сглаживание). https://github.com/fchollet/keras/issues/1920
Например, используя функциональный API keras, ваш входной слой будет:
Для набора данных RGB
inp = Input(shape=(3,None,None))
Для набора данных серого цвета
inp = Input(shape=(1,None,None))
Комментарии:
1. Привет, маз, у меня точно такая же проблема. Согласно вашим предложениям, означает ли это, что я могу использовать изображения разных размеров для обучения, и аналогичным образом я могу прогнозировать сегментирование для изображений разного размера.
2. Никогда не пробовал тренироваться с разными размерами изображений, но в идеале это должно работать. Однако при прогнозировании я попробовал это, и это работает (ymmv, конечно). В худшем случае вам придется загружать пакеты изображений одинакового размера.
3. Указание
input_shape = c(None, None, 3)
не сработало в keras. Это привело к ошибке:Error in normalize_shape(input_shape) : object 'None' not found
4. Я получаю следующую ошибку:
ValueError: The channel dimension of the inputs should be defined. Found `None`.
что вы рекомендуете?5. На самом деле, обратите внимание на параметр data_format вашего слоя. Если ‘channels_first’, то используйте (n_channels, None, None), или если ‘channels_last’, то используйте (None, None, n_channels)
Ответ №2:
Реализация входных массивов произвольного размера с одинаковыми вычислительными ядрами может создать много проблем — например, на графическом процессоре вам нужно знать, какие большие буферы резервировать, и, в меньшей степени, сколько разворачивать ваши циклы и т. Д. Это основная причина, по которой Keras требует постоянных входных форм, с входными данными переменного размера слишком сложно иметь дело.
Это чаще всего происходит при обработке последовательностей переменной длины, таких как предложения в NLP. Общий подход заключается в установлении верхней границы размера (и обрезке более длинных последовательностей), а затем дополнении последовательностей нулями до этого размера.
(Вы также можете включить маскировку нулевых значений, чтобы пропустить вычисления в дополненных областях, за исключением того, что сверточные слои в Keras могут по-прежнему не поддерживать маскированные входные данные …)
Я не уверен, что для 3D-структур данных накладные расходы на заполнение не являются чрезмерно высокими — если вы начнете получать ошибки памяти, самый простой обходной путь — уменьшить размер пакета. Расскажите нам о своем опыте применения этого трюка к изображениям!
Комментарии:
1. : Какой наиболее эффективный с точки зрения вычислений способ заполнения моих данных?
Ответ №3:
Просто используйте None
при указании формы ввода. Но я до сих пор не знаю, как передавать изображения разной формы в fit
функцию.
Комментарии:
1. Я думаю, это уже объяснено в самом популярном ответе
2. @aaossa да, это так.