Я пытаюсь лучше понять сверточные нейронные сети, написав код Python, который не зависит от библиотек (например, Convnet или TensorFlow), и я застрял в литературе о том, как выбирать значения для матрицы ядра, когда выполнение свертки на изображении.
Я пытаюсь понять детали реализации в шаге между картами объектов на изображении ниже, показывающем слои CNN.
Согласно этой схеме:
Ядро матрицы ядра «шагает» по изображению, создавая карту объектов, где каждый пиксель является суммой всех поэлементных произведений между каждым весом ядра (или матрицы фильтра) и соответствующим значением пикселя входного изображения.
Мой вопрос: как мы инициализируем вес матрицы ядра (или фильтра)?
В демонстрации выше это просто 1 и 0, но я предполагаю, что это упрощено с точки зрения диаграммы.
Обучены ли эти веса на некотором этапе предварительной обработки? Или выбрано явно пользователем?
Я не могу комментировать из-за низкой репутации, и поэтому я пишу это в ответ на вопрос Фелипе Алмейды. После идеального ответа Инди-AI добавить особо нечего. Если вы хотите обнаружить определенные формы (например, X), вы можете предварительно определить определенный фильтр, как в случае с обнаружением кромок. Но в этом и заключается прелесть глубокого обучения: в нем так много слоев, так много фильтров и так много итераций, что фильтры изучают почти каждую форму объекта, необходимую для него самого. Таким образом, теоретически, если есть X, который будет обнаружен, один из фильтров научится обнаруживать X (как желтый фильтр)
источник