Вычисления вручную нейронные сети III: считывание данных и полное обучение

10137682-0075bf83f7210b46
образ

Big Data Digest производства

Автор: Цзян Шань Бао

Маленькие друзья ~ ~ хорошо вы строить нейронную сеть Numpy, мы пришли к третьему периоду. Первая фаза переваривают бактерии научить вас , как построить простую нейронную сеть с Numpy, закончил с прогнозированием часть. Второй период для каждого принести градиентный спуск соответствующих точек знаний.

В этом вопросе, мы научим вас, как читать набор данных, а также набор данных, используемых для обучения нейронной сети, а два, как это до сих пор реализуется Numpy. Перед началом кода, бактерии переваривают, прежде чем мы узнаем сегодня наборов данных, которые мы используем.

Dataset Введение

Сбор данных с использованием известного MNIST рукописных наборов данных. По данному официальному сайту, этот набор данных имеет 70000 образцов, в том числе 60000 обучающих выборок, 10000 образцов тестов.

После того, как наборы данных, загруженные, файл делится на четыре части, а именно: обучающих набор картинку, маркировать обучающий набор, набор для тестирования фотографий, тест набор этикеток. Данные хранятся в двоичном формате.

10137682-5f7c71a097314289
образ

В котором первые 16 байт обучающего набора хранится номер файла изображения, количество строк и столбцов цифр и других изображений. Обучение набор меток файла первые 8 байт памяти, таких как количество метки изображения. Два набора тестовых файлов точно так же.

10137682-6f6d3a0d8816eb1b
образ

Бактерии переваривают загруженный адрес хранения файла

Считывание данных

train_img_path=r'C:\Users\Dell\MNIST\train-images.idx3-ubyte'

Файлы сохраняются в локальной адресной экстракции, генерируя четыре адреса, приведенной выше код «г» экранирующего символ, потому что \ специального использования в Python, требуются адрес файла символы ясно побег.

Для того, чтобы задняя часть модели выполнена лучше, мы разделим обучающий набор, разделен на 50 000 и 10 000 обучающего набора набор проверки.

Примечание: В комплекте проверки модели во время обучающей выборки отведенной отдельно, он может быть использован для настройки параметров супер модели и модели для возможности проводить предварительную оценку.

import struct

Поскольку файлы хранятся в двоичном формате, чтение данных режим «гь». И потому, что нам нужны данные, отображаемые арабскими цифрами способом. Таким образом, здесь мы использовали пакет STRUCT Питона. Struct.unpack ( «> 4i», f.read (16))> направление представляет собой число байт памяти, я представляю собой целое число, первые четыре 4 представляют собой целое число, необходимое. f.read (16) означает, что для чтения 16 байтов, т.е. 4 целое число, как 4-байтовое целое число, равное.

изменить форму (-1,28 * 28): -1, если параметр присутствует, что указует на других параметрах, определяемого параметр преобразования одномерного массива является двумерный матрицей, а второй аргумент этого числа каждой строки-1. номер.

Примечание: FromFile np.fromfile Использование (рама, DTYPE = np.float, кол = -1, отд = ''), в котором: кадр: строка файла. Чтение типов данных: DTYPE. количество: количество элементов для чтения, -1 представляет читать весь файл. сентябрь: разделив строку данных.

Прочитайте весь файл, а затем отображать данные в порядке с фотографиями.

import matplotlib.pyplot as plt

Обратите внимание, что если вы не определяете CMap = «серый», фоновый рисунок будет очень странно.

   ![image](https://upload-images.jianshu.io/upload_images/10137682-d258846d6fe2a0af?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Тест, закончил определение функции, дисплей это -

Отображение данных и чтение завершено, следующие параметры запуска обучения.

данные обучения

Прежде чем мы начнем, чтобы быть в состоянии связать вверх и вниз, мы первый курс Код Tieshanglai ~

def tanh(x):

Сначала определим две функции активации производного, производного толкнул к конкретному процессу не представлена ​​здесь, заинтересованные студенты могут искать для себя.

def d_softmax(data):

В котором производная TANH np.diag (1 / . (Np.cosh (данные)) 2), является результатом оптимизации. 1 / (np.cosh (данные)) 2

Примечание: Diag генерируют диагональную матрицу, роль внешней функции является первым параметром второй параметр, полученный путем умножения один на одну матрицу

Тогда словарное определение, а число разрешается в определенном положении 1-мерной матрицы

differential = {softmax:d_softmax,tanh:d_tanh}

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

def sqr_loss(img,lab,parameters):

Градиент расчет

def grad_parameters(img,lab,init_parameters):

Формула расчета градиента использует формулу: (y_predict-у) ^ 2, композиционные функции выведения, так что -2 (y_prdict-у) умножается на производной, которая находится позади истоки -2 grad_b1.

Это стоит причины должна быть более свинец определенного числа [f (х +) -f (х)] / ч при Validate нашего градиент искать право заботиться начинающие студенты понять процесс нейронной сети, этот шаг опускаются здесь в Казахстане ,

Сюда входит тренировку, мы входные данные в пакетном моде, позиционирование каждой партии содержит 100 изображений. batch_size = 100. Получение среднего градиента получается, код, воплощенный в: grad_accu [ключ] / = batch_size.

def train_batch(current_batch,parameters):

Использование механизма копирования, чтобы избежать изменений параметров влияют на общую подготовку, copy.deepcopy может повторно копия не влияет на исходные данные.

И здесь мы использовали формулу:

   ![image](https://upload-images.jianshu.io/upload_images/10137682-4b009fd89bddba41?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Затем определяют скорость обучения:

def learn_self(learn_rate):

Внутри, если заявление позволяет нам видеть прогресс обучения нейронной сети.

   ![image](https://upload-images.jianshu.io/upload_images/10137682-8eceaa6fac56fe2f?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

Потеря набор пользовательских проверки:

def valid_loss(parameters):

Точность расчета:

def valid_accuracy(parameters):

Наконец получить результаты:

   ![image](https://upload-images.jianshu.io/upload_images/10137682-7a1e260982c54fa7?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

90% точности эй - лучший результат, но, к счастью, в конце концов, не узнать, как настроить и решить за закрывающуюся ставку.

Ну, содержание этого вопроса об этом, и вы можете наслаждаться еще некоторое содержание, чтобы переварить следующий вопрос, мы говорим о том, как регулировать скорость обучения и смотреть на более сложных нейронных сетей.

рекомендация

отblog.csdn.net/weixin_33883178/article/details/90783668