8124
.pdf11
http://deepleaming.net/data/mnist/mnist.pkl.gz с сайта Лаборатории машинного обучения Университета Монреаля, сформированный на основе базы данных
MNIST, который содержит 70 000 изображений рукописных цифр,
разделенных на три набора:
1)training_data - набор из 50 000 изображений предназначен для обучения нейронных сетей;
2)validation_data - набор из 10 000 изображений предназначен для текущей оценки работы алгоритма обучения и подбора параметров обучения (используется в последующих лабораторных работах);
3)test_data - набор из 10 000 изображений предназначен для проверки
работы нейронной сетей.
Каждый набор состоит из двух списков: списка изображений (в градациях серого) и соответствующего списка цифр в диапазоне от 0 до 9. Изображение представлено в виде одномерного numpy-массива размера 784 = 28x 28
значений от 0 до 1, где 0 соответствует черному цвету пиксела, а 1 - белому.
П Загрузите архив http://deeplearning.net/data/mnist/mnist.pkl.gz и сохраните его в директории Network1.
Функции для работы с базой данных MNIST целесообразнее вынести в отдельный файл. Создайте новый файл mnist_loader и сохраните его в директории Networkl. Скопируйте в окно программы mnist_loader .py
следующие команды и впишите свои данные:
mnist_loader.py —
Модуль для подключения и использования базы данных
MNIST.
Группа:[Указать номер группы] ФИО:[Указать ФИО студента]
.
import gzip # библиотека для сжатия и распаковки файлов gzip и gunzip. import pickle # библиотека для сохранения и загрузки сложных объектов Python.
31
12
import numpy as np # библиотека для работы с матрицами def load data():
f = gzip.open('mnist.pkl.gz', 'rb') # открываем сжатый файл gzip в двоичном режиме
training data, validation data, test data = pickle.load(f, encoding='latin1') # загружай таблицы из файла
f.close() # закрываем файл return (training data, validation data, test data)
Для использования базы данных MNIST в нашей программе необходимо скорректировать форматы наборы training_data, validation_data и test_data. Это делается в функции load_data_wrapper. Скопируйте в файл mnist_loader следующий программный код.
def load_data_wrapper():
tr d, va d, te d = load data() # инициализация наборов данных в формате MNIST
training inputs = [np.reshape(x, (784, 1)) for x in tr d[0]] # преобразование массивов размера 1 на 784 к
массивам размера 784 на 1 training results = [vectorized result(y) for y in tr d[1]] # представление цифр от 0 до 9 в виде массивов размера 10 на 1
training data = zip(training inputs, training results) # формируем набор обучающих данных из пар (x, y)
validation inputs = [np.reshape(x, (784, 1)) for x in va d[0]] # преобразование массивов размера 1 на 784
к массивам размера 784 на 1 validation data = zip(validation inputs, va d[1]) # формируем набор данных проверки из пар (x, y)
test inputs = [np.reshape(x, (784, 1)) for x in te
32
13
d[0]] # преобразование массивов размера 1 на 784 к
массивам размера 784 на 1 test data = zip(test inputs, te d[1]) # формируем набор тестовых данных из пар (x, y)
return (training data, validation data, test data)
Данная функция преобразует training_data в список, содержащий 50 000 пар (x, у), где x является 784-мерным numpy-массивом, содержащим входное изображение, а у - это 10-мерный numpy-массив, представляющий собой вектор, у которого координата с порядковым номером,
соответствующим цифре на изображении, равняется единице, а остальные координаты нулевые. Аналогичные преобразования делаются для наборов validation_data и test_data.
Для преобразования числа в вектор-столбец (10-мерный numpy массив),
используется следующая функция vectorized_result. Скопируйте ее программный код в файл mnist_loader.
def vectorized result(j): e = np.zeros((10, 1)) e[j] =
1.0return e
ПСохраните и закройте файл mnist_loader.py.
7) Запуск программы
В среде разработки IDLE последовательно выполните следующие команды для установки рабочего каталога на примере C :
\NeuralNetwork:
>>>import os
>>>os.chdir ('C: \ \NeuralNetwork\\Network1' )
Следующие команды используются для подключения модуля mnist_loader
и инициализации наборов данных для обучения нейронной сети:
33
14
>>>import mnist loader
>>>training data, validation data, test data = mnist
loader.load data wrapper()
Подключите созданный Вами модуль network. py:
>>>import network
При этом выполниться написанная в нем программа, выводящая информацию о нейронной сети.
Создайте нейронную сеть для распознавания рукописных цифр:
>>>net = network.Network([784, 30, 10])
Параметры, указанные при вызове данного метода, определяют топологию создаваемой сети. Таким образом, в результате выполнения команды будет создана сеть, состоящая из трех слоев: входной слой сети состоит из 784-х
нейронов; внутренний слой из 30 нейронов и выходной слой из 10 нейронов.
Запустите процедуру обучения созданной нейронной сети, включающую
30 эпох:
>>>net.SGD(training data, 30, 10, 3.0, test data=test
data)
Параметры, указанные при вызове метода SGD: обучающая выборка,
количество эпох обучения, размер подвыборки, скорость обучения,
тестирующая выборка.
Обучение может занять несколько минут. В ходе обучения будет выдаваться информация о пройденных эпохах (см. рис. 2). Для каждой эпохи выводится отношение количества правильно распознанных цифр к общему количеству цифр в тестовой выборке. Например, запись Epoch 6: 9374 / 10000
говорит о том, что в результате эпохи обучения с номером 6 достигнута
34
15
точность распознавания 0.94.
Рис. 1. Результат работы программы
35
ЛАБОРАТОРНАЯРАБОТАРАБОТА№4. ВИЗУАЛИЗАЦИЯ СТРУКТУР СИСТЕМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА С
ИСПОЛЬЗОВАНИЕМ ОТЕЧЕСТВЕННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ С ОТКРЫТЫМ ИСХОДНЫМ КОДОМ (МОЙ ОФИС, LIBREOFFICE, DRAWIO, INKSCAPE) В ИНТЕРЕСАХ ОРГАНИЗАЦИИ КОЛЛЕКТИВНОЙ РАБОТЫ И КОНТРОЛЯ ТРЕБОВАНИЙ ПРОЕКТА СО СТОРОНЫ ЗАКАЗЧИКА
Блок-схемы — это схемы, на которых показаны этапы процесса. Простые блок-схемы легко создавать, а благодаря простоте и наглядности фигур они также удобны для восприятия.
Примечание: Вы также можете автоматически создать простую блок-схему на основе данных, используя визуализатор данных в DrawIO.
Шаблон простой блок-схемы в DrawIO включает фигуры, которые можно использовать для описания большого количества процессов. Он особенно полезен для отображения простых бизнес-процессов, таких как процесс разработки предложения, показанный на приведенном ниже рисунке.
36
Более новые версииИнтернетOffice 2010Office 2007
Создание блок-схемы
1.Запустите DrawIO.
2.Выберите категорию Блок-схема.
3.Дважды щелкните значок Простая блок-схема.
37
4.Для каждого этапа документируемого процесса перетащите в документ соответствующую фигуру блок-схемы.
5.Чтобы соединить элементы блок-схемы, наведите указатель мыши на первую фигуру, и щелкните стрелку, указывающую на фигуру, с которой требуется создать соединение. Если вторая фигура находится не рядом с первой, необходимо перетащить маленькую стрелку к центру второй фигуры.
6.Чтобы добавить текст для фигуры или соединительной линии, выделите ее и введите текст. По завершении ввода текста щелкните в пустой области страницы.
7.Чтобы изменить направление стрелки соединительной линии, выберите соединение, а затем на вкладке Фигура в группе Стили фигур щелкните пункт Линия, наведите указатель на пункт Стрелки и выберите нужное направление и вид стрелки.
Автоматическое выравнивание и интервалы
1.Нажмите сочетание клавиш CTRL+A, чтобы выбрать все объекты на странице.
2.На вкладке Главная в группе Упорядочение нажмите кнопку Положение и выберите пункт Автовыравнивание и определение интервалов.
Если это не привело к нужному результату, отмените ее, нажав сочетание клавиш CTRL+Z, и воспользуйтесь другими параметрами меню
кнопок Выравнивание и Положение.
38
Что представляют блок-схемы
При открытии шаблона Простая блок-схема открывается набор элементов Фигуры простой блок-схемы. Каждая фигура в этом наборе
представляет собой тот или иной этап процесса. Но фигуры не имеют какогото универсального смысла, их значение определяется создателями и пользователями блок-схем. В большинстве блок-схем используется три или
39
четыре вида фигур, и этот диапазон расширяется только по специфической необходимости.
При этом названия фигур в Visio указывают на их применение. Ниже описаны наиболее распространенные фигуры.
▪Начало/конец. Эту фигуру следует использовать для представления первого и последнего этапа процесса.
▪Процесс. Фигура представляет собой стандартный этап процесса. Это одна из наиболее часто используемых фигур в любом процессе.
▪Решение. Эта фигура используется в точке, где выбор следующего этапа зависит от принятого решения. Вариантов может быть несколько, но чаще всего их два: "да" и "нет".
▪Подпроцесс. Эту фигуру следует использовать для представления ряда этапов, которые в совокупности образуют подпроцесс, определенный в другом месте (часто на другой странице того же документа). Такой подход удобен, если блок-схема получается слишком большой и сложной.
▪Документ. Эта фигура представляет этап, на котором создается документ.
40