Как я понимаю, все CNN очень похожи. Все они имеют сверточные слои, за которыми следуют пулы и слои relu. У некоторых есть специализированные слои, такие как FlowNet и Segnet. Мое сомнение заключается в том, как мы должны решить, сколько слоев использовать и как мы устанавливаем размер ядра для каждого уровня в сети. Я искал ответ на этот вопрос, но я не нашел конкретного ответа. Является ли сеть разработанной с использованием проб и ошибок или некоторыми конкретными правилами, о которых я не знаю? Если бы вы могли прояснить это, я был бы вам очень признателен.
Как создать глубокие сверточные нейронные сети?
Ответ 1
Короткий ответ: если есть правила проектирования, мы еще не обнаружили их.
Обратите внимание, что в вычислениях есть сопоставимые вопросы. Например, обратите внимание, что есть только несколько основных электронных логических блоков, которые управляют вашей технологией производства. Все вычислительные устройства используют одну и ту же логическую логику; некоторые из них имеют специальные дополнения, такие как фотоэлектрический вход или механический выход.
Как вы решаете, как проектировать ваше вычислительное устройство?
Дизайн зависит от цели CNN. Входные характеристики, точность, скорость обучения, скорость подсчета очков, адаптация, вычислительные ресурсы... все это влияет на дизайн. Не существует обобщенного решения даже для данной задачи (пока).
Например, рассмотрим проблему классификации ImageNet. Обратите внимание на структурные различия между победителями и претендентами: AlexNet, GoogleNet, ResNet, VGG и т.д. Если вы измените ввод (например, MNIST), то это будет излишним. Если вы измените парадигму, они могут оказаться бесполезными. GoogleNet может быть принцем обработки изображений, но он ужасен для перевода устного французского языка на письменный английский. Если вы хотите отслеживать хоккейную шайбу в реальном времени на вашем видеоэкране, полностью забывайте об этих реализациях.
До сих пор мы делаем это эмпирически: многие люди пытаются много чего посмотреть, чтобы увидеть, что работает. Мы испытываем чувства к тому, что улучшит точность, или время тренировки, или какой-то фактор, который мы хотим настроить. Мы находим, что хорошо работает с общим временем процессора, или что мы можем делать параллельно. Мы меняем алгоритмы, чтобы использовать векторную математику в длинах, обладающих степенями 2. Мы слегка меняем проблемы и видим, как обучение адаптируется в другом месте. Мы меняем домены (скажем, обработку изображений на письменный текст) и начинаем все заново, но с неопределенным чувством того, что может настроить конкретное узкое место, как только мы перейдем к рассмотрению некоторых типов слоев.
Помните, что CNN действительно не были популярны в течение этого долгого, всего 6 лет. По большей части мы все еще пытаемся узнать, какие могут быть важные вопросы. Добро пожаловать в исследовательскую группу.
Ответ 2
Проектирование архитектуры CNN для оптимальной производительности - это сложная и многократно эмпирическая работа, однако существуют определенные трюки и методы (для некоторых из них также существуют доказательства), которые используются для проектирования сети.
Прочтите приведенный здесь документ "Практическая теория для проектирования очень глубоких сверточных нейронных сетей" , созданная кагглером, которая достигает почти используя эти простые правила.