1 Прошлое и настоящее CNN
1.1 Мозг
Как люди, мы постоянно наблюдаем и анализируем мир вокруг нас своими глазами, и мы можем делать прогнозы обо всем, что видим, и действовать в соответствии с ними, не преднамеренно «усердно работая» над мышлением. Когда мы что-то видим, мы маркируем каждый объект на основе того, что мы узнали в прошлом. Чтобы проиллюстрировать эти ситуации, взгляните на изображение ниже:
Вы можете подумать: «Вот счастливый маленький мальчик, стоящий на стуле». Или, может быть, вы думаете, что он выглядит так, как будто он кричит, собираясь напасть на торт перед ним.Это то, что мы делаем подсознательно в течение дня. Мы видим вещи, маркируем их, делаем прогнозы и распознаем действия. Но как мы это делаем? Как мы можем объяснить все, что видим?
Природе потребовалось более 500 миллионов лет, чтобы создать такую систему. Взаимодействие между глазом и мозгом, называемое первичным зрительным путем, позволяет нам понимать окружающий мир.
В то время как зрение начинается в глазах, фактическая интерпретация того, что мы видим, происходит в мозгу.первичная зрительная кора.Когда вы видите объект, фоторецепторы вашего глаза посылают сигналы через зрительный нерв в первичную зрительную кору, которая обрабатывает входные данные. существуетпервичная зрительная кора, чтобы глаза чувствовали то, что видят.
Все это приходит к нам естественным путем. Мало ли мы задумывались об особенностях нашей способности распознавать все предметы и людей, которых мы видим в своей жизни. нейроны, связанные с мозгомглубокие сложные иерархииОн играет важную роль в процессе запоминания и обозначения объектов.
Подумайте о том, как мы узнаем, например, что такое зонтик. Или уточки, лампы, свечи или книги. Вначале наши родители или члены семьи сообщали нам названия предметов в нашем непосредственном окружении. Мы учимся на приведенных нам примерах. Медленно, но мы начали узнавать определенные вещи все больше и больше в нашем окружении. Они стали настолько обычными, что в следующий раз, когда мы их увидим, мы сразу же узнаем, как называется этот объект. они становятся нашим миромМодельчасть.
1.2 История сверточных нейронных сетей
Подобно тому, как дети учатся распознавать объекты, нам нужны алгоритмы, которым показывают миллионы изображений, прежде чем они смогут обобщать вводимые данные и делать прогнозы на изображениях, которые они никогда раньше не видели.
Компьютеры «видят» вещи иначе, чем мы. Их мир состоит только из чисел. Каждое изображение может быть представлено в виде двумерного массива чисел, называемых пикселями.
Но тот факт, что они воспринимают изображения по-разному, не означает, что мы не можем научить их распознавать закономерности так же, как мы распознаем изображения. Нам просто нужно по-другому думать о том, что такое образ.
Чтобы «научить» алгоритм распознавать объекты на изображении, мы используем определенный типИскусственные нейронные сети: сверточная нейронная сеть (CNN). Их название происходит от одной из самых важных операций в сети:свертка.Сверточные нейронные сети вдохновлены мозгом. Исследования мозга млекопитающих, проведенные Д. Х. Хьюбелем и Т. Н. Визелем в 1950-х и 1960-х годах, предложили новые модели того, как млекопитающие воспринимают мир визуально. Они показывают, что зрительная кора кошек и обезьян включает нейроны, которые специфически реагируют на нейроны в их непосредственном окружении.
в ихв газете, они описывают два основных типа клеток зрительных нейронов в мозгу, каждый из которых функционирует по-своему: простые клетки (S-клетки) и составные ячейки (С-клетки).
Например, простые клетки активируются, когда они распознают основные формы как линии с фиксированными площадями и определенными углами. Сложные клетки имеют большие рецептивные поля, и их продукция нечувствительна к определенным участкам поля.
Сложная клетка продолжает реагировать на раздражитель, даже если онасетчаткаАбсолютная позиция на . Сложный в данном контексте означает более гибкий.
существуетв видении, один сенсорный нейронЧувствоватьОбласть — это определенная область сетчатки, где что-то повлияет на возбуждение этого нейрона (т. е. активирует нейрон). Каждая клетка сенсорного нейрона имеет сходные рецептивные поля, и их поля покрыты.
также,ИерархияКонцепция играет важную роль в мозге. Информация хранится последовательно в последовательности шаблонов. изнеокортекс, который является самым внешним слоем мозга и хранит информацию в иерархическом порядке. Он хранится в корковых колонках или группах нейронов, которые единообразно организованы в неокортексе.
В 1980 году исследователь по имени Фукусима предложилИерархическая модель нейронной сети. он назвал новыйпознание. Эта модель основана на концепции простых и сложных ячеек. Неокогнитрон способен распознавать закономерности, зная форму объекта.
Позже, в 1998 году, Бенжио, Ле Кун, Ботту и Хаффнер представили сверточные нейронные сети. Их первая сверточная нейронная сеть была названаLeNet-5, способный классифицировать цифры в рукописных цифрах.
2. Сверточные нейронные сети
Сверточная нейронная сеть (CNN) сокращенно CNN. CNN — это модель, которую необходимо преподавать во всех курсах и книгах по глубокому обучению. CNN особенно эффективна в распознавании изображений. Многие модели распознавания изображений также основаны на архитектуре CNN. расширение. Также стоит отметить, что модель CNN также является моделью глубокого обучения, созданной на основе визуальной организации человеческого мозга. После изучения CNN она также очень полезна для изучения других моделей глубокого обучения. В этой статье в основном описывается принцип CNN и использование CNN для обучения Распознавание рукописных шрифтов с точностью 99%. Концептуальная схема CNN выглядит следующим образом:
Из приведенных выше трех изображений мы можем видеть, что архитектура CNN проста: изображение проходит два этапа свертки, объединения в пул, полного подключения, что является архитектурой CNN, поэтому, если вы понимаете содержание трех частей Свертка, объединение и полное подключение Вы можете полностью освоить CNN!2.1 Сверточный слой
Операция свертки заключается в объединении исходного изображения с определеннымFeature Detector(filter)
Выполните операцию свертки (символ⊗
), операция свертки состоит в объединении двух3x3
Матрицы перемножаются, а затем складываются.На следующем рисунке приведен пример0 *0 + 0*0 + 0*1+ 0*1 + 1 *0 + 0*0 + 0*0 + 0*1 + 0*1 =0
Детектор признаков (фильтр) в середине будет случайным образом генерировать несколько типов (например, 16 видов). Цель детектора признаков — помочь нам выделить некоторые признаки (например, форму) на изображении, точно так же, как это делает человеческий мозг. является ли картина Что также следует из формы
Используйте Feature Detector для извлечения границ объектовИспользуйте функцию Relu для удаления отрицательных значений, которые могут лучше уточнить форму объекта.Мы выполняем несколько сверток на входе, где каждая операция использует другой фильтр. Это приводит к различным картам функций. Наконец, мы собираем все эти карты объектов вместе в качестве окончательного результата сверточного слоя.
Как и любая другая нейронная сеть, мы используемфункция активацииСделайте вывод нелинейным. В случае сверточной нейронной сети выходные данные свертки будут проходить через функцию активации. это может бытьReLUфункция активации
тут другая концепцияразмер шага,Strideразмер шага для каждого перемещения фильтра свертки. Размер шага обычно равен 1, что означает, что фильтр скользит по пикселям. Увеличивая размер шага, ваш фильтр скользит по входным данным на большем расстоянии друг от друга, поэтому между ячейками меньше перекрытия.
На анимации ниже показан размер шага 1.
Поскольку размер карты объектов всегда меньше, чем входные данные, мы должны что-то сделать, чтобы предотвратить сжатие нашей карты объектов. Здесь мы используем отступы.Добавьте слой пикселей с нулевым значением, чтобы обернуть ввод нулями, чтобы наша карта объектов не сжималась. В дополнение к сохранению постоянного пространственного размера после выполнения свертки заполнение улучшает производительность и гарантирует, что ядро и размер шага соответствуют входным данным.
Хороший способ визуализации сверточных слоев заключается в следующем, и, наконец, мы объясним, что сверточные слои делают с движущимся изображением.
2.2 Уровень пула Уровень пула
После сверточных слоев, обычно добавляемых между слоями CNN.объединяющий слой. Функция объединения заключается в постоянном уменьшении размерности для уменьшения количества параметров и вычислений в сети. Это сокращает время обучения и контроляпереоснащение.
Наиболее распространенные типы бассейнов:max pooling, который занимает максимальное значение в каждом окне. Эти размеры окон должны быть указаны заранее. Это уменьшает размер карт объектов, сохраняя при этом важную информацию.
Основное преимущество Max Pooling заключается в том, что когда изображение смещается на несколько пикселей, это никак не повлияет на оценку, и у него есть хорошая функция подавления шума.
2.3 Полностью подключенный уровень
По сути, часть полносвязного слоя состоит в том, чтобы сгладить предыдущие результаты, а затем соединить их с самой простой нейронной сетью.
3 Использование CNN для идентификации рукописных шрифтов MNIST
Следующая часть в основном посвящена тому, как использовать tensorflow для реализации CNN и применения распознавания рукописного шрифта.
# CNN 代码
def convolutional(x,keep_prob):
def conv2d(x,W):
return tf.nn.conv2d(x,W,[1,1,1,1],padding='SAME')
def max_pool_2x2(x):
return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
def weight_variable(shape):
initial=tf.truncated_normal(shape,stddev=0.1)
return tf.Variable(initial)
def bias_variable(shape):
initial=tf.constant(0.1,shape=shape)
return tf.Variable(initial)
x_image=tf.reshape(x,[-1,28,28,1])
W_conv1=weight_variable([5,5,1,32])
b_conv1=bias_variable([32])
h_conv1=tf.nn.relu(conv2d(x_image,W_conv1)+b_conv1)
h_pool1=max_pool_2x2(h_conv1)
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)
# full_connetion
W_fc1=weight_variable([7*7*64,1024])
b_fc1=bias_variable([1024])
h_pool2_flat=tf.reshape(h_pool2,[-1,7*7*64])
h_fc1=tf.nn.relu(tf.matmul(h_pool2_flat,W_fc1)+b_fc1)
# dropout 随机扔掉一些值,防止过拟合
h_fc1_drop=tf.nn.dropout(h_fc1,keep_prob)
W_fc2=weight_variable([1024,10])
b_fc2=bias_variable([10])
y=tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2)+b_fc2)
return y,[W_conv1,b_conv1,W_conv2,b_conv2,W_fc1,b_fc1,W_fc2,b_fc2]
У всех есть некоторые базовые знания кода тензорного потока, Понять приведенную выше часть в принципе несложно, и она в основном реализована в соответствии с логическим порядком на нашей предыдущей концептуальной диаграмме.
Наконец, согласно учебным материалам на МООК онлайнTensorFlow и Flask объединяются для распознавания рукописных цифр, реализовал CNN, более извилистым местом является интерфейс, и как интегрировать обученную модель с флягой, окончательный эффект проекта выглядит следующим образом:
Добро пожаловать на GitHub fork and star, портал проекта --->TensorFlow-MNIST-WEBAPP4 Резюме
Наконец, позвольте мне сказать две вещи о себе:
- CNN очень зрело используется в различных сценариях, и в Интернете есть много информации. Сначала я немного знал об этом, но я никогда не резюмировал это, и после прочтения я чувствую себя более непринужденно.
- Не забудьте добавить теорию и практику, и реализуйте это более практически.
5 ссылок
- [Анализ данных и машинное обучение] Лекция 5.1: Введение в сверточные нейронные сети
- Интуитивное объяснение сверточных нейронных сетей — блог о науке о данных
- Сверточная нейронная сеть (CNN) |
- Сверточные нейронные сети (LeNet) — документация DeepLearning 0.1
- Сверточные нейронные сети CS231n для визуального распознавания
- Примечания к изучению сверточной нейронной сети (CNN) 1: Основное введение |Джей Чжан
- Deep Learning (глубокое обучение), конспекты заключительных серий (семь) - Блог CSDN