Я довольно плохо знаком с нейронными сетями, но я достаточно хорошо понимаю линейную алгебру и математику свертки.
Я пытаюсь понять пример кода, который я нахожу в различных местах сети для обучения сверточного NN Keras с данными MNIST для распознавания цифр. Я ожидаю, что когда я создаю сверточный слой, мне нужно будет указать фильтр или набор фильтров для применения к входным данным. Но все три образца, которые я нашел, создают сверточный слой, подобный этому:
model.add(Convolution2D(nb_filter = 32, nb_row = 3, nb_col = 3,
border_mode='valid',
input_shape=input_shape))
Это, кажется, применяет в общей сложности 32 фильтра 3х3 к изображениям, обработанным CNN. Но что это за фильтры? Как бы я описал их математически? Документация keras не поможет.
Заранее спасибо,
Ответы:
По умолчанию фильтрыW инициализируются случайным образом с использованием W∼ U( 6Nя н+ nо у т, - 6Nя н+ nо у т) ,
glorot_uniform
метода, который извлекает значения из равномерного распределения с положительными и отрицательными границами, описанными так:Когда вы используете сеть для прогнозирования, эти фильтры применяются на каждом уровне сети. Таким образом, дискретная свертка выполняется для каждого фильтра на каждом входном изображении, и результаты этих сверток поступают на следующий слой сверток (или полностью связанный слой, или что-либо еще, что у вас может быть).
Во время обучения значения в фильтрах оптимизируются с обратным распространением относительно функции потерь. Для задач классификации, таких как распознавание цифр, обычно используется кросс-энтропийная потеря. Вот визуализация некоторых фильтров, изученных на первом уровне (вверху) и фильтров, изученных на втором уровне (внизу) сверточной сети:
Как вы можете видеть, фильтры первого слоя в основном действуют как простые детекторы краев, тогда как фильтры второго слоя являются более сложными. По мере углубления в сеть фильтры способны обнаруживать более сложные формы. Хотя это немного сложно визуализировать, поскольку эти фильтры воздействуют на изображения, которые уже были свернуты много раз, и, вероятно, не очень похожи на исходное естественное изображение.
источник
glorot_uniform
не использует нормальное распределение. Я думаю, что вы описываетеglorot_normal
. Я не думаю, что это имеет большое значение для ответа - ключевые моменты - это случайная инициализация, за которой следуют эффекты обучения. Возможно, стоит объяснить, как обученные фильтры в конечном итоге выглядят как краевые / угловые фильтры и т. Д. (Возможно, с одним из классических изображений фильтров первого слоя до / после обучения).glorot_normal
иglorot_uniform
обновил ответ, чтобы отразить это. Я также добавил немного дополнительной информации о том, как фильтры заканчиваются, как вы предложили.Транзитная модель будет обучать ядра в соответствии с вашей функцией стоимости, и, в конце концов, эти ядра являются фильтрами вашей модели.
источник