Мое первое знакомство с CNN для визуального распознавания с использованием набора данных Fashion MNIST. Блокноты Jupyter (разработанные с помощью Google Colaboratory), использованные для этого упражнения, можно найти в этомрепозитории GitHub.

First Notebook (FirstCNN.ipynb) использовал последовательную модель Keras из этой записи в блоге

https://colab.research.google.com/github/margaretmz/deep-learning/blob/master/fashion_mnist_keras.ipynb#scrollTo=aFe4wHGRFKle

Keras предоставляет структуру абстракции более высокого уровня для серверной части Tensorflow и упрощает создание модели NN. Проверьте вышеуказанный блог для более подробной информации. Подводя итог, модель CNN состоит из двух слоев свертки с ReLU в качестве функции активации и Adam в качестве используемого оптимизатора, а слой Dropout добавлен в качестве метода регуляризации. Слой объединения использует метод максимального объединения для уменьшения выборки. Точность модели составляет около 92 % в наборе обучающих данных и около 91 % в проверочном наборе данных. Чтобы проверить, действительно ли отсеваемый слой помогает избежать избыточной подгонки в этом случае, я удалил отсеваемый слой в своем следующем блокноте FirstCNN_NoRegularization.ipynb.

При удалении отсевающего слоя точность обучения увеличилась до 96 %, но при наборе проверочных данных она по-прежнему дает точность 91 %. Таким образом, похоже, что отсеваемый слой действительно помог сократить разрыв, но, глядя на результатыFirstCNN_NoRegularization.ipynb, похоже, что модель не пострадала от чрезмерной подгонки.

В моем третьем блокноте я только что поработал с оптимизатором, используемым для модели, от Адама до SGD (стохастический градиентный спуск), и результаты использования SGD ухудшились по сравнению с Адамом, и время для обучения набора данных также было чуть выше. Таким образом, использование оптимизатора и функций активации, рекомендованных отраслевыми экспертами, такими как Андрей Карпаты, действительно помогает (также опробую функции активации Sigmoid и Tanh просто для забавного сравнения и моего собственного обучения, чтобы увидеть, как модель сходится и насколько модель ухудшается из-за к проблеме исчезающего градиента).

Это мои первые детские шаги по распутыванию черного ящика глубокого обучения и нейронных сетей. Тем не менее необходимо понять, как эксперты выбирают гиперпараметры (например, количество конверсионных слоев, размер фильтра, шаг и т. д.) своих сетей для конкретного набора данных, или это метод проб и ошибок.

В приведенной выше модели CNN я использовал ReLU в качестве функции активации, которая страдает от проблемы «умирания ReLU», но не уверен, как я могу выяснить, активируются ли нейроны в сети и какой процент сети мертв при использовании активации ReLU. (приветствуются любые советы экспертов по глубокому обучению).

Ссылки:

https://colab.research.google.com/github/margaretmz/deep-learning/blob/master/fashion_mnist_keras.ipynb#scrollTo=aFe4wHGRFKle

http://colah.github.io/posts/2014-07-Understanding-Convolutions/

http://cs231n.github.io/