Я хотел попрактиковать свои навыки обратного распространения в сверточной нейронной сети. И я хотел реализовать свою собственную сеть VGG (из оригинальной статьи Очень глубокие сверточные сети для распознавания крупномасштабных изображений) на некоторое время, поэтому сегодня я решил объединить эти две потребности.

Если вам неизвестен процесс обратного распространения в сверточной нейронной сети, просмотрите мой учебник по обратному распространению в сверточных нейронных сетях, здесь или здесь.

Softmax Layer и его производные

Сейчас есть ТОННА хороших статей, в которых говорится о функции softmax и ее производной. Поэтому я не буду здесь вдаваться в подробности. Однако я свяжу несколько здесь, здесь, здесь и здесь.

Сетевая архитектура (схема)

Таким образом, у нас есть только 7 уровней, отсюда и название - VGG 7, а не VGG 16 или 19. Также есть два основных различия между исходной реализацией.

1. Мы собираемся использовать средний пул, а не максимальный пул. Если вам интересно, почему, пожалуйста, проверьте эту ссылку.
2. Количество каналов в нашей сети будет значительно меньше, чем в исходной сети. Для удобства сравнения, пожалуйста, просмотрите исходную архитектуру сети ниже или здесь.

Подготовка данных и объявление гиперпараметров

Как видно выше, теперь нам не нужно отфильтровывать изображения, содержащие только 0 или 1. Мы можем выполнять классификацию для всех изображений от 0 до 9 благодаря SoftMax Layer.

Операция прямой подачи

Это стандартная операция прямой подачи с функцией активации ReLU () для сверточных слоев и tanh () и arctan () для полносвязных слоев.

Обратное распространение

Поскольку мы используем средний пул, а не максимальный пул, обратное распространение довольно легко и просто. Следует отметить, что я установил разные скорости обучения для сверточных и полносвязных слоев. (Области в зеленой рамке).

Обновление: обратите внимание, что в коде допущена опечатка. Я назову выше обратное распространение как «Прерванное обратное распространение», поскольку мы обновляем w2 с помощью w1, а не w2.

Обучение и результаты (правильное обратное распространение)

Ян Завадски указал на сделанную мной опечатку, поэтому я изменил ее и переобучил сеть. Как видно справа, это изменение стоимости с течением времени.

Сеть также показала лучшие результаты на тестовом изображении с точностью 84%.

Обучение и результаты (прерывание обратного распространения)

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

Способен правильно классифицировать только 39 чисел из 50, что дает точность около 78%.

Интерактивный код

Я перешел на Google Colab для интерактивных кодов! Таким образом, вам понадобится учетная запись Google для просмотра кодов, а также вы не можете запускать сценарии только для чтения в Google Colab, поэтому сделайте копию на своей игровой площадке. Наконец, я никогда не буду спрашивать разрешения на доступ к вашим файлам на Google Диске, просто к сведению. Удачного кодирования!

Чтобы получить доступ к интерактивному коду, щелкните по этой ссылке.

Заключительные слова

Сети VGG - очень хорошие сети для практики, как для операций прямой подачи, так и для обратного распространения, поскольку все они прямолинейны.

Если будут обнаружены какие-либо ошибки, напишите мне по адресу [email protected].

Тем временем подпишитесь на меня в моем твиттере здесь и посетите мой веб-сайт или мой канал Youtube для получения дополнительной информации. Я также сделал сравнение Decoupled Neural Network здесь, если вам интересно.

Ссылка

  1. Симонян К., Зиссерман А. (2014). Очень глубокие сверточные сети для распознавания крупномасштабных изображений. Препринт arXiv arXiv: 1409.1556.
  2. Рулантс, П. (нет данных). Как реализовать нейронную сеть Intermezzo 2. Получено 7 февраля 2018 г. с сайта http://peterroelants.github.io/posts/neural_network_implementation_intermezzo02/.
  3. Р. (нет данных). Rasbt / python-machine-learning-book. Получено 7 февраля 2018 г. с сайта https://github.com/rasbt/python-machine-learning-book/blob/master/faq/softmax_regression.md.
  4. Нежное введение в функцию потери кросс-энтропии. (2018, 07 января). Получено 7 февраля 2018 г. с сайта https://sefiks.com/2017/12/17/a-gentle-introduction-to-cross-entropy-loss-function/comment-page-1/#comment-600.
  5. Vgg16. (2016, 26 февраля). Получено 7 февраля 2018 г. с сайта https://blog.heuritech.com/2016/02/29/a-brief-report-of-the-heuritech-deep-learning-meetup-5/vgg16/.
  6. 2018. [Онлайн]. Доступно: https://www.quora.com/What-is-the-benefit-of-using-average-pooling-rather-than-max-pooling [дата обращения: 7 февраля 2018 г.].