Overview
Эта статья является первой из «SkySeraph AI Practice to Theory Series». На основе классического набора данных MNIST HelloWord в мире ИИ мы реализуем распознавание рукописных цифр CNN на основе TensorFlow на платформе Android.
Code~
Practice
Environment
- ТензорФлоу: 1.2.0
- Питон: 3.6
- IDE Python: PyCharm 2017.2
- IDE для Android: Android Studio 3.0
Обучение и оценка (Python+TensorFlow)
Основной целью части обучения и оценки является создание pb-файла для тестирования, который сохраняет топологию сети и информацию о параметрах после обучения с использованием API Python TensorFlow.Существует множество способов его реализации.Помимо cnn, вы также можете используйте rnn, fcnn и т. д.
Среди них также есть два набора функций на основе cnn, а именно tf.layers.conv2d и tf.nn.conv2d.tf.layers.conv2d использует tf.nn.conv2d в качестве внутренней обработки.Фильтры по параметрам являются целыми числами, а фильтр представляет собой 4-мерный лист количества. Прототип выглядит следующим образом:
файл свертки.py
def conv2d (входные данные, фильтры, размер ядра, шаги = (1, 1), заполнение = «действительно», data_format = «каналы_последние»,
dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer=None,
bias_initializer=init_ops.zeros_initializer(), kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None, kernel_constraint=None, bias_constraint=None, trainable=True, name=None,
reuse=None)
файл gen_nn_ops.py
def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True, data_format="NHWC", name=None)
Модуль слоев используется в официальном демонстрационном экземпляре и имеет следующую структуру:
- Сверточный слой №1: 32 фильтра 5×5 с функцией активации ReLU
- Слой объединения № 1: фильтр 2 × 2 для максимального объединения с размером шага 2.
- Сверточный слой № 2: 64 фильтра 5 × 5 с функцией активации ReLU.
- Слой объединения № 2: фильтр 2 × 2 для максимального объединения с шагом 2.
- Плотный слой № 1: 1024 нейрона с использованием функции активации ReLU, коэффициент отсева 0,4 (во избежание переобучения 40% нейронов будут случайным образом удалены во время обучения).
- Плотный слой № 2 (логит-слой): 10 нейронов, каждый из которых соответствует категории (0–9).
Основной код находится в функции cnn_model_fn(features, labels, mode) для завершения полного определения структуры свертки.Основной код выглядит следующим образом.
Также можно использовать традиционную функцию tf.nn.conv2d, и основной код выглядит следующим образом.
Тест (Android+TensorFlow)
- Ядро заключается в использовании интерфейса API: TensorFlowInferenceInterface.java.
- Настройте градацию или самокомпилируйте банку импорта исходного кода TensorFlow и т. д.
скомпилировать 'org.tensorflow:tensorflow-android:1.2.0' -
Импортируйте файл pb.Файл pb помещается в каталог ресурсов, а затем считывается
String factFilename = labelFilename.split("file:///android_asset/")[1];
Log.i(TAG, «Чтение меток из: « + фактическоеимя_файла);
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(assetManager.open(actualFilename)));
String line;
while ((line = br.readLine()) != null) {
c.labels.add(line);
}
br.close(); - окончательный эффект:
Theory
MNIST
MNIST, одна из самых классических моделей машинного обучения, содержит числа от 0 до 9, базу данных монохромных рукописных цифровых изображений в оттенках серого 28 * 28, в общей сложности 60 000 обучающих примеров и 10 000 тестовых примеров.
Каталог файлов выглядит следующим образом, в основном включает 4 двоичных файла, а именно обучающие и тестовые изображения и метку.
Двоичная структура обучающего изображения выглядит следующим образом: перед реальными данными (пикселями) есть несколько полей описания (магическое число, количество изображений, количество строк и столбцов изображения), а для хранения реальных данных используется обратный порядок байтов. правило.
(Правило прямого порядка байтов означает, что старший байт данных хранится в младшем адресе памяти, а младший байт хранится в старшем адресе памяти)
Для конкретного экспериментального использования необходимо извлекать реальные данные.Можно использовать метод unpack_from в структуре библиотеки, специально используемый для обработки байтов.Основной метод выглядит следующим образом:
struct.unpack_from(self._fourBytes2, buf, index)
MNIST используется в качестве данных экземпляра входа AI Hello World, а TensorFlow инкапсулирует его функции и может использоваться напрямую.
mnist = input_data.read_data_sets('MNIST', one_hot=True)
CNN (Сверточная нейронная сеть)
CNN Keys
- CNN, Convolutional Neural Network, китайское полное название Convolutional Neural Network, так называемая Convolutional Network (ConvNets).
- Свертка, возможно, является наиболее важным понятием в современном глубоком обучении. Это математическая операция. Читатели могут прочитать соответствующие математические механизмы свертки по следующей ссылке [23], в том числе из преобразования Фурье и Дирака соответственно. дельта-функция, мы можем буквально грубо понять, что множители меняются местами и перемножаются.
- Анимация свертки. Демонстрация показана на рисунке ниже [26], дополнительные демонстрации анимации см. в [27].
-
Нейронные сети. Система, состоящая из большого количества нейронов (нейронов), как показано на следующем рисунке [21]
где x представляет входной вектор, w — вес, b — смещение, а f — функция активации. -
Функция активации: обычно используемые нелинейные функции активации — это сигмовидная, тангенциальная, ReLU и т. д. Формула выглядит следующим образом.
- Недостатки сигмовидной
- Насыщение функции приводит к исчезновению градиента (нейрон близок к насыщению при 0 или 1, в этих областях градиент почти равен 0)
- Сигмовидная функция не симметрична относительно центра начала координат (без нулевого центрирования).
- tanh: существует проблема насыщения, но его выходные данные центрированы по нулю, поэтому на практике tanh более популярен, чем сигмоид.
- ReLU
- Преимущество 1: ReLU сильно ускоряет сходимость SGD.
- Преимущество 2: вам нужен только порог, чтобы получить значение активации, вместо того, чтобы выполнять множество сложных (экспоненциальных) операций.
- Недостатки: скорость обучения должна быть установлена разумно, чтобы предотвратить смерть во время обучения, и вместо этого также можно использовать Leaky ReLU/PReLU/Maxout.
- Недостатки сигмовидной
- Объединение в пул. Обычно делится на средний пул (средний пул) и максимальный пул (максимальный пул) [25]
CNN Architecture
- Трехслойная нейронная сеть. Это входной слой, выходной слой, скрытый слой, как показано на следующем рисунке [21].
- Иерархия CNN. [INPUT-CONV-RELU-POOL-FC] описан в Stanford cs231n, как показано на следующем рисунке [21], который представляет собой входной уровень, уровень свертки, уровень возбуждения, уровень пула и полностью связанный уровень.
- Общая архитектура CNN делится на следующую трехуровневую структуру:
- Анимированное демо. См. [22].
Regression + Softmax
Двумя основными алгоритмами в машинном обучении с учителем являются алгоритм классификации и алгоритм регрессии, Алгоритм классификации используется для прогнозирования дискретного распределения, а алгоритм регрессии используется для прогнозирования непрерывного распределения.
Цель регрессии состоит в том, чтобы установить уравнение регрессии для прогнозирования целевого значения, а решение регрессии состоит в том, чтобы найти коэффициент регрессии этого уравнения регрессии.
Алгоритм регрессии включает в себя линейную регрессию, логистическую регрессию и т. д. Регрессия Softmax является обобщением одного из алгоритмов логистической регрессии, используемых для решения задач классификации с несколькими классами.Классическим примером является применение классификации рукописных цифр MNIST.
Linear Regression
Линейная регрессия — это самая базовая модель в машинном обучении, и ее цель — максимально приблизить целевую метку к прогнозируемым результатам.
- Определение модели множественной линейной регрессии
- Решатель множественной линейной регрессии
- Mean Square Error (MSE)
- Градиентный спуск
- Нормальное уравнение
- Локально взвешенная линейная регрессия (LocallyWeightedLinearRegression, LWLR): ввиду явления недостаточной подгонки модели в линейной регрессии в оценку вводится некоторая погрешность, чтобы уменьшить среднеквадратичную ошибку прогноза.
- Методы гребневой регрессии и сокращения
- Варианты: по сравнению с градиентным спуском, нормальное уравнение требует большого количества вычислений (необходимо вычислить транспонированную и обратную матрицу X). Когда X является необратимым, альтернативным методом является алгоритм гребневой регрессии. Метод LWLR увеличивает объем вычислений, потому что он должен использовать весь набор данных при прогнозировании для каждой точки, вместо того, чтобы вычислять коэффициент регрессии и получать уравнение регрессии, а затем вводить его в расчет, что обычно не выбирают.
- Настройка: сбалансируйте смещение предсказания и дисперсию модели (высокое смещение означает недостаточное соответствие, высокое отклонение — переоснащение)
- Получите больше обучающих выборок — устраните высокую дисперсию
- Попытка использовать набор из меньшего количества функций — устраняет высокую дисперсию
- попытайтесь получить другие функции - устраните высокое смещение
- Попробуйте добавить несколько комбинированных функций — устранит высокую погрешность.
- Попробуйте уменьшить λ, чтобы устранить высокое смещение
- Попробуйте увеличить λ, чтобы устранить высокую дисперсию
Softmax Regression
- Функция оценки регрессии Softmax (гипотеза)
- Функция стоимости регрессии Softmax (функция стоимости)
- понимать:
- Регрессия Softmax и логистическая регрессия:
- Мультиклассовая и бинарная классификация. Регрессия Softmax, когда логистическая регрессия K = 2
- Для задач типа K можно использовать регрессию Softmax, когда категории являются взаимоисключающими, и независимые от K логистические регрессии, когда они не исключают друг друга.
- Резюме: Регрессия Softmax подходит для классификации с количеством категорий больше 2. В этом случае она используется для определения вероятности того, что каждое изображение принадлежит каждому числу.
References & Recommends
MNIST
- [01]Официальный сайт Мнист
- [02]Visualizing MNIST: An Exploration of Dimensionality Reduction
- [03] Официальный экземпляр TensorFlow Mnist
- [04]Пример кода для «Tensorflow и глубокое обучение без докторской степени»
Softmax
- [11]Convex functions
- [12] Седьмой курс машинного обучения Стэнфордского университета — регуляризация — регуляризация
- [13]MachineLearning_Python
CNN
- [21] Материалы курса «Сверточные нейронные сети для визуального распознавания» Стэнфордского университета. перевести
- [22] Заметки CNN за июль: Популярное понимание сверточных нейронных сетей
- [23] Понимание свертки
- [24]Imagenet classification with deep convolutional neural networks
- [25]Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
- [26]Convolutional Neural Networks-Basics
- [27]A technical report on convolution arithmetic in the context of deep learning
TensorFlow+CNN / TensorFlow+Android
- [31]Официальная демонстрация Google
- [32] Официальная лаборатория кода Google
- [33]deep-learning-cnns-in-tensorflow Github
- [34]tensorflow-classifier-android
- [35]creating-custom-model-for-android-using-tensorflow
- [36] Пример TF-NN Mnist
By SkySeraph-2018
SkySeraph cnBlogs
SkySeraph CSDN
Эта статья была впервые опубликована вskyseraph.com:«Android + TensorFlow + CNN + MNIST Реализация распознавания рукописных цифр»
Уведомление об авторских правах
SkySeraph by SkySeraph is licensed under a Creative Commons BY-NC-ND 4.0 International License.
Зависит отBobсоздан и поддерживаетсяSkySeraphПринятие блогаCreative Commons Reserved Attribution-NonCommercial-No Derivatives 4.0 Международная лицензия.
Эта статья была впервые опубликована вSkySeraphблог (skyseraph.com), авторские права принадлежат автору и вы можете перепечатать его, но это заявление должно быть сохранено без согласия автора, а ссылка на оригинальный текст дана в явном месте на странице статьи, в противном случае право на преследование юридическая ответственность сохраняется.
Награда за код сканирования WeChatSkySeraph
Если вы хотите пожертвовать другую суммуПожалуйста, ткните меня~~, отсканируйте код Alipay/WeChat
Постоянная ссылка на эту статью:небо серафим.com/2018/01/10/…