Исследование алгоритмов распознания символов. Моделирование нейронной сети

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.08.2018
Размер файла 1,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Федеральное агентство связи

Федеральное государственное образовательное бюджетное учреждение

высшего образования

«Поволжский государственный университет телекоммуникаций и информатики»

Факультет Информационных систем и технологий

Направление Информационные системы и технологии

Кафедра Информационных систем и технологий

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

Исследование алгоритмов распознания символов. Моделирование нейронной сети

Разработал Е.В. Ефанов

Самара 2017

Содержание

Введение

1. Обзор видов нейронных сетей

1.1 Историческая справка

1.2 Персептрон

1.3 Многослойные нейронные сети с обратным распространением ошибки

1.4 Нейронная сеть Хопфилда

1.5 Когнитрон

1.6 Неокогритрон

2. Основные возможности программного продукта Matlab

2.1 Характеристики Matlab

2.2 Пакет Neural Network Toolbox

3. Моделирование нейронной сети для распознавания символов

3.2 Моделирование нейронной сети

3.3 Проверка моделируемой нейронной сети

Заключение

Введение

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

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

Для достижения поставленной цели необходимо решить следующие задачи:

1. Изучить виды нейронных сетей и методы их обучения.

2. Изучить основные аспекты моделирования нейронных сетей в программе Matlab.

3. Проанализировать виды нейронных сетей и выбрать наиболее подходящую для данной ситуации.

4. Смоделировать нейронную сеть для распознания символов.

В первой главе теоретической части рассматривается история создания нейронных сетей и их некоторые виды.

Во второй главе рассматриваются возможности программного продукта Matlab, а в частности пакета для создания нейронных сетей Neural Network Toolbox.

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

1. Обзор видов нейронных сетей

В последнее время наблюдается сильный интерес к нейронным системам, которые сегодня уже нашли применение в разнообразных сферах человеческой деятельности - медицине, бизнесе, технике. Нейронные сети используют для решений задач управления, классификации, прогнозирования. Такой успех определяется следующими причинами:

· Нейросети - это мощнейший метод имитации явлений и процессов, который позволяет показывать сложнейшие зависимости. Нейронные сети являются нелинейными по своей природе, в то же время как на протяжении нескольких лет для создания моделей применялся линейный подход. А также, во многих случаях нейронные сети помогали преодолеть, так называемое, "проклятие размерности", которая обусловлена тем, что создание модели нелинейных явлений требует большого количества вычислительных ресурсов (в случае большого числа переменных).

· Следующая особенность нейросетей связана с тем, что используется механизм обучения. Пользователь нейронной системы подбирает представительные данные и запускает обучающий алгоритм, который сам настраивает параметры сети без участия пользователя. От пользователя только требуется набор эвристических знаний о том, как следует подготавливать и отбирать данные, выбирать необходимую архитектуру нейронной сети и интерпретировать полученные результаты. Однако следует заметить, что уровень знаний, требующийся от пользователя, который необходим для успешного применения нейронной системы, намного меньше, чем, к примеру, при использовании традиционных методов.

1.1 Историческая справка

Первые упоминания нейронных сетей приходится на середину XX века. Разработкой занимались Мак-Каллок и Питтс в 1943году. Тогда нейронная сеть была разработана на основе математических алгоритмов и теории деятельности головного мозга. Они предположили, что нейроны можно рассматривать как механизмы, оперирующие двоичными числами. Подобно биологическому прототипу нейроны были способны обучатся подстройкой весов(параметров), описывающих синаптическую проводимость. Исследователи доказали, что данная сеть может выполнять различные числовые и логические операции, а также данная сеть способна обучаться, распознавать образы, синтезировать, то есть обладать чертами интеллекта.

В 1949 году канадский физиолог Хебб выкладывает идеи о соединениях нейронов головного мозга и их взаимодействию. Он предполагал, что обучение заключается в изменениях силы синаптических связей. Концепция Хебба считается случаем самообучения, при котором система самостоятельно обучается выполнять поставленную задачу, без вмешательства из вне.

В 1957 году Розенблатт разработал математическую и компьютерную модели восприятия информации мозгом на основе двухслойной обучаемой нейронной сети. В 1958 году он предложил модель, которая должна была имитировать процессы мышления человека, а через два года была разработана сеть, которая распознавала некоторые буквы.

Но после публикации работы по машинному обучению Минского и Пейперта в 1969 году интерес к исследованию нейронных сетей угас. В ходе исследований были обнаружены вычислительные проблемы, при компьютерной реализации искусственных нейронных сетей. Первое, это то, что однослойные нейронные сети не могли выполнить операцию "сложение по модулю 2". Второй проблемой было то, что не хватало вычислительных мощностей, для обработки больших потоков данных.

Исследования были очень сильно замедленны до того момента, пока компьютеры, не достигли нужных вычислительных мощностей. И в 1975 году Вербосом был разработан метод обратного распространения ошибки, который позволял эффективно обучать многослойные нейронные сети и решить проблему со "сложением по модулю 2".

В 1975 году Фукусима разработал когнитрон, который являлся одой из первых многослойных нейронных сетей. Структура и методы, используемые в когнитроне для настройки весов, варьировались от одной стратегии к другой. У каждой стратегии были свои положительные качества, а также недостатки. Информация перемещалась только в одном направлении, пока не активировались все узлы и сеть не принимала конечное состояние. Достичь двунаправленной передачи информации получилось достичь только в нейронной сети Хопфилда в 1982 году.

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

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

1.2 Персептрон

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

Рис. 1.1 - Персептрон

Принцип работы Персептрона состоит в следующем: на вход подаются сигналы x1, x2 ,…, xn. Каждый сигнал умножается на весовые коэффициенты w1, w2, …, wn , и поступает на суммирующий блок ?, далее сигнал преобразуется активационной(пороговой) функцией и дает выходной сигнал OUT. Далее нужно обучить получившуюся сеть, для этого подается множество образов на его вход и подстраивают веса до тех пор, пока для всех образов не будет достигнут нужный выход.

Допустим вектор X является образом. Каждый компонент X- (x1, x2 ,…, xn )- умножается на соответствующую компоненту вектора весов W-( w1, w2, …, wn). Далее произведения суммируются, если выход Y будет правильным, то ничего не изменяется. Однако, если выход будет неправильным, то весовые коэффициенты подстраиваются для того, чтобы уменьшить ошибку. Если сеть обучена правильно, то результат будет идентичен идеальному значению или же очень близок к нему.

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

На рис. 1.2 представлена структура двухслойной нейронной сети.

Рис. 1.2 - Многослойная нейронная сеть

Многослойные сети могут образовывать множество слоев, где выход одного слоя будет служить входом для другого.

1.3 Многослойные нейронные сети с обратным распространением ошибки

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

Рис. 1.3 - Нейрон с активационной функцией

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

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

Рис. 1.4 - Сигмоидальная пороговая функция

(1.1)

Данная функция служит для того, чтобы сузить диапазон изменения NET от нуля до единицы.

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

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

Рис. 1.5 - Двухслойная нейронная сеть обратного распространения

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

Цель обучения нейронной сети является подстройка весовых коэффициентов нейронов таким образом, чтобы при подаче на вход некоторого множества приводило к требуемому множеству выходов. В дальнейшем эти множества мы будем называть векторами. При обучении мы предполагаем, что для каждого вектора входа имеется парный ему целевой вектор, который образует нужный выход. Как правило, их называют обучающей парой. Сеть же обучается на массе таких наборов. Например, вводные части обучающих парных наборов могут состоять из набора двоичных комбинаций, представляя образ одной из буквы русского алфавита. Для наглядного примера разберем как задается двоичный образ буквы "А". На рисунке 1.6 на букву "А" нанесли сетку и каждый получившийся квадрат соединили со входом. Если в получившемся квадрате присутствует линия буквы, то соответствующий нейронный вход будет ровняться единице, в противном случае ноль. Выход же может быть цифрой, который будет изображать букву "А", или же иным набором из единиц и нулей, который будет использован для достижения выходного образа. Если бы мы захотели обучить нейронную сеть распознавать весь русский алфавит, то потребовалось бы 33 обучающих пары. Этот набор обучающих групп назывался бы обучающим множеством.

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

Для обучения нейронной сети обратного распространения ошибки потребуется выполнение следующих шагов:

Рис. 1.6 - Распознавание изображения

1. Подать любую обучающую пару из предложенного множества и отправить входной вектор на вход сети.

2. Вычислить выход сети.

3. Определить разность между выходом сети и нужным входом.

4. Изменить веса нейронной сети так, чтобы свести ошибку к минимуму.

5. Повторять с 1 по 4 шаги для всех векторов обучающего множества до тех пор, пока ошибка не будет иметь подходящий результат на всем обучающем множестве.

Операции, которые выполняются на 1 и 2 шаге, похожи на те, которые будут выполняться при работе уже обученной нейронной сети, то есть подается на вход вектор и вычисляется выход. На Рис.3.N. производится подсчет вначале выходов нейронов слоя j, затем они подаются на вход слоя k, производится подсчет выходов нейронов слоя k, из которых и получается выходной вектор.

На 3 шаге все вектора выходов сети, которые обозначены на Рис.3.N. OUT отнимается из соответствующей позиции целевого вектора, чтобы в результате получить числовое значение ошибки. Данная ошибка применяется на 4 шаге для подстройки весов нейронной сети, причем знак и величина изменений данных весов задаются алгоритмом обучения.

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

Шаг 1 и 2 можно рассматривать как "прямой проход", так как сигнал проходит путь от входа к выходу. А шаги 3 и 4 составляют " обратный проход", тут определяемый сигнал ошибки проходит обратно по сети и используется для корректировки весов нейронной сети.

1.4 Нейронная сеть Хопфилда

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

Рис.1.7 - Сеть Хопфилда

Алгоритм обучения отличается от алгоритма обратного распространения и других процедур. Вместо пошагового приближения к эталонному состоянию с вычислением ошибки и многократными коррециями весов, все коэффициенты нейронной сети рассчитываются по одной формуле, за один проход, после чего сеть готова к использованию. Вычисление коэффициентов основано на следующем правиле: для всех образов Xi матрица весов W должна удовлетворять уравнению

Xi = W*Xi, (1.2)

так как при этом условии состояния сети Xi будут устойчивы.

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

У сетей Хопфилда есть два ограничения. Первое - небольшое число запоминаемых образов (около 0.15*n, где n- число входов сети). Второе - достижение устойчивого состояния не дает гарантии правильного отклика сети, так как сеть может образовать ложный аттрактор, который представляет собой смесь фрагментов различных образов.

1.5 Сверточная сеть

Так же есть сверточная нейронная сеть, которая считается самой инновационной в области компьютерного зрения. Впервые эти сети привлекли внимание в 2012 году, когда Алекс Крижевски сумел снизить процент классификации ошибок с 26% до 15%, что и вызвало такой большой интерес. На сегодняшний день глубинное обучение лежит в основе услуг многих компаний: Google - для поиска среди фотографий пользователя, Amazon - для генерации рекомендаций товара, Instagram - для поисковой инфраструктуры.

Но самый популярный вариант использования данных сетей -- это обработка изображений.

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

Для человека это происходит без усилий. За доли секунды, мы можем распознать то, что нас окружает. Это происходит на бессознательном уровне. Для нейронных сетей эти навыки распознавания шаблонов, обобщения уже полученных знаний, адаптации к различной запечатленной на фото обстановке не доступны. На рис. 1.8 показана сверточная нейронная сеть

Рис.1.8 - Сверточная нейронная сеть

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

Данная сеть обладает рядом преимуществ, такие как:

· Лучший алгоритм по распознаванию и классификации изображения

· В сравнении с полносвязной нейронной сетью гораздо меньше настраиваемых весов нейронов

· Неплохая устойчивость к повороту и сдвигу распознаваемого изображения

· Обучать данную сеть можно с помощью метода обратного распространения ошибки

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

Так же рассмотрим построение и архитектуру Когнитрона. Люди на подсознательном уровне решают задачи распознавания образов очень быстро. Даже дитя без лишних усилий может узнавать сотни лиц из его окружения, не смотря на изменение поворота, освещения и расстояния.

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

Машинное распознавание образов -- это наука, ограничения накладывают лишь нескольких методик, которые очень редко используются на практике. Человек, который будет создавать стандартную систему для распознавания образов, чаще всего берется за распознавание печатного текста. И эти методы являются, неприменимы к задаче, и разработчик занимается разработкой алгоритмов, направленные на специфику данной задачи.

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

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

Несмотря на данные ограничения, очень много было изучено с помощью экспериментов. Например, в [7] приводится описание опыта, в котором котята росли в виртуальном окружении, состоящем только из горизонтальных белых и черных полос. Доказано, что определенные зоны коры головного мозга чувствительны к углу направленности, поэтому у котов не были развиты нейроны, чувствительные к вертикальным полосам. Это наводит на мысль, что мозг не является сразу обученным даже на примитивное распознавание ориентации линии. Наоборот, он постоянно самоорганизуется на основе опыта. На микроуровне было определено, что нейроны наделены как возбуждающими, так и тормозящими синапсами. Естественно первые служат для возбуждения нейрона, а вторые для подавления этого возбуждения. Это приводит к заключению того, что мозг приспосабливается изменениями этих синапсов, либо созданием или уничтожением синапсов в результате контакта с внешней средой. Данные исследования привили к созданию моделей, которые показывают способности к распознаванию образов.

1.6 Когнитрон

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

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

Рис. 1.9 - Пресинаптические и постсинаптические нейроны

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

Рис. 1.10 - Область связей нейрона

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

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

Рис. 1.11 - Области связи с областями конкуренции

На рис. 1.11 можно заметить, что зона связей соседних узлов значительно перекрываются. Данное копирование функций объясняется соперничеством между ближайшими узлами. Несмотря на то, что в исходном пункте узлы имеют одинаковые выход, небольшие отличия все же могут присутствовать, а это значит, что один из узлов будет иметь наиболее сильную реакцию на входной образ, чем соседи. В связи с этим его сильный сигнал будет замедлять сигналы соседних узлов, а его синапсы будут усиливаться. Данный нейрон будет иметь название возбуждающий нейрон.

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

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

дai = qcjuj, (1.3)

где сj - тормозящий весовой связи нейрона j в слое 1 с тормозящим нейроном i, иj - выход нейрона j в слое 1, аi - возбуждающий вес i, q - нормирующий коэффициент обучения.

Модификация тормозящих весовых коэффициентов нейрона i во втором слое соразмерно отношению весовой суммы возбуждающих входов к удвоенному тормозящему входу и определяется как:

(1.4)

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

Дai = q'cjuj, (1.5)

дbi = q'INHIB (1.6)

где q' - положительный обучающий коэффициент меньший, чем q.

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

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

При предоставлении подобного вида шаблон совпадает с ним и узел начинает создавать большой выходной сигнал. Отличный образ создает малый выходной сигнал, в результате чего происходит подавление.

Так же есть понятие латеральное торможения. На рисунке 4.N.3 изображено, что каждый нейрон во втором слое получает латеральное торможение от нейронов, которые располагаются в его области конкуренции. Тормозящий нейрон производит суммирование всех входов в области конкуренции и выработку сигнала, который будет стремиться затормозить целевой нейрон. Метод является эффективным, но он очень медленный с вычислительной точки зрения. Он включает в себя систему с обратной связью, включающий все нейроны в слое и поэтому, чтобы его стабилизировать может понадобиться большое количество вычислительных действий.

В [6] приводятся результаты моделирования четырехслойного когнитрона, целью которого является распознавание образов. Все слои состоят из набора 12x12 возбуждающих нейронов и такого же количества тормозящих. Область связи является квадратом, состоящим из 5x5 нейронов. Конкурирующая область имеет форму ромба 5х5. Латеральное торможение занимает область 7х7 нейронов. Параметры обучения установлены: q=16,0 и q'=2,0. Весовые коэффициенты в начале обучения равны 0.

Обучение сети происходило предоставлением пяти стимулирующих образов, которые представляли из себя изображение арабских цифр от 0 до 4. Корректировка весов происходила после каждой цифры, набор подавался на вход до тех пор, пока каждый образ не был предъявлен 20 раз.

Эффективность процесса обучения оценивалась путем запуска сети в реверсивном режиме. В этом случае выходные образы подавались на выход и распространялись в обратном направлении. Полученные образы сравнивались с исходными изображениями. На рис. 1.12 показаны результаты тестирования. Во 2 столбце показаны изображения, полученные каждой цифрой на выходе. Далее образы возвращались обратно, вырабатывая на входе образ, близкий к исходному изображению. В результате образы получились в точности такими же, как и исходные изображения, кроме цифры 0.

Рис. 1.12 - Результаты экспериментов с когнитроном

1.7 Неокогритрон

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

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

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

Рис. 1.13 - Структура слоев неокогнитрона

Неокогнитрон представлен из слоев, в то же время слои состоят из набора плоскостей, а плоскости состоят из узлов.

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

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

Рис. 1.14 - Структура плоскостей неокогнитрона

Простые узлы - это узлы, которые в данной плоскости реагируют на один и тот же образ. Так же называются рецептивными.

Комплексные узлы служат для уменьшения зависимости реакции системы от позиции образов во входном поле.

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

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

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

Выводы

1) В настоящее время доступно очень много видов нейронных сетей, с помощью которых можно распознавать символы, начиная от самых простых - персептрона, до очень сложных, таких как когнитрон и неокогринтон, которые, в какой- то степени моделируют процессы, протекающие в головном мозге человека.

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

3) В более простых случаях чаще всего достаточно персептрона. Если же необходимо, чтобы распознавание происходило вне зависимости от поворота и масштабирования, то лучше применять многослойную сеть с обратным распространением ошибки или же сеть Хопфилда, но у нее есть недостаток-ограниченное количество запоминаемых образов.

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

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

2. Основные возможности программного продукта Matlab

2.1 Характеристики Matlab

Matlab - это система, в которой основным элементов является массив. Это дает большие возможности для решения различных задач, связанных с вычислениями, в частности, в которых используются вектора и матрицы.

Matlab расшифровывается как матричная лаборатория (matrix laboratory). Matlab был специально разработан для доступа к LINKPACK и EISPACK, которые предназначены для матричных вычислений.

Однако в настоящее время MATLAB далеко вышла за пределы специализированной матричной системы и стала одной из наиболее мощных универсальных интегрированных систем компьютерной математики. Слово «интегрированная» указывает на то, что в этой системе объединены удобная оболочка, редактор выражений и текстовых комментариев, вычислитель и графический программный процессор. В новой версии используются такие мощные типы данных, как многомерные массивы, массивы ячеек, массивы структур, массивы Java и разреженные матрицы, что открывает возможности применения системы при создании и отладке новых алгоритмов матричных и основанных на них параллельных вычислений, и крупных баз данных.

В целом MATLAB - это уникальная коллекция реализаций современных численных методов компьютерной математики, созданных за последние три десятка лет. Она вобрала в себя и опыт, правила и методы математических вычислений, накопленные за тысячи лет развития математики. Это сочетается с мощными средствами графической визуализации и даже анимационной графики. Систему с прилагаемой к ней обширной документацией вполне можно рассматривать как фундаментальный многотомный электронный справочник по математическому обеспечению ЭВМ - от массовых персональных компьютеров до супер-ЭВМ.

Система Matlab была разработана Молером и с конца 70-х гг. широко использовалась на больших ЭВМ. В начале 80-х гг. Джон Литл из фирмы MathWorks, Inc. разработал версии системы PC Matlab для компьютеров класса IBM PC, VAX и Macintosh. Дальше были созданы версии для компьютеров с операционной системой UNIX и многих других типов больших и малых ЭВМ. Сейчас больше десятка популярных компьютерных платформ могут работать с системой Matlab. К расширению системы были привлечены крупнейшие научные сообщества мира в области математики и программирования. Одной из основных задач системы было предоставление пользователям мощного языка программирования, ориентированного на математические расчеты и способного превзойти традиционных языки программирования, которые многие годы использовались для реализации численных методов. При этом особое внимание уделялось как повышению скорости вычислений, так и адаптации системы к решению самых разнообразных задач пользователей.

Matlab развивался в течении нескольких лет, ориентируясь на различных пользователей. Он представляет собой стандартный инструмент для работы в различных областях математики, машиностроения и науки. Для промышленности Matlab представляет собой инструмент для продуктивных исследований, разработки и анализа данных.

Возможности Matlab очень обширны, а по скорости выполнения задач превосходит конкурентов. Она часто применяется для расчетов в любой области науки и техники. Например, очень интенсивно используется при математическом моделировании механических систем и устройств, в частности в динамике, аэродинамике, акустике и так далее. Этому способствует не только обширный набор матричных и иных операций, но и так же наличие пакета расширения Simulink. И данный пакет все время расширяется.

Важная роль в Matlab отводится специальным группам программ, называемых toolboxes. Они имеют большую значимость для большинства пользователей. Toolboxes - это коллекция функций Matlab, которые позволяют решать частные классы задач. В частности, они применяются для разработки нейронных сетей.

Matlab включает в себя пять частей:

1. Язык Matlab - это язык массивов и матриц высокого уровня с управляемыми потоками, функциями и особенностями объектно- ориентированного программирования. Это дает возможность создавать как малые программы, так и программы для решения сложнейших задач.

2. Среда Matlab - это набор приспособлений и инструментов, к которыми контактирует пользователь. Он включает в себя средства для управления переменными в рабочем пространстве matlab, вводом и выводом данных, а также создание и отладки M - файлов.

3. Управляемая графика - это графическая система matlab, которая включает в себя команды для визуализации двух- и трехмерной графики. Так же есть команды, с помощью которых можно редактировать внешний вид графики и для создания Графического Пользовательского Интерфейса для приложений Matlab.

4. Библиотека математических функций - это коллекция вычислительных элементов от элементарных функций до сложных, таких как быстрое преобразование Фурье.

5. Программный интерфейс - это библиотека, с помощью которой можно писать программы на Си, которые могут взаимодействовать с Matlab. Она включает средства для вызова программ из matlab, вызывая matlab как вычислительный инструмент и для работы с MAT - файлами.

Как и любая другая программа, Matlab имеет основное окно с названием, строкой меню, панелью инструментов и другими компонентами. Для пользователя удобно работать в системе с помощью панели инструментов, расположенной под строкой меню, как показано на рис. 2.1. Она позволяет наиболее просто и удобно работать с системой.

Панель инструментов содержит такие элементы как:

· New m-file - открывает новое окно для редактирования m- файлов;

· Open file - открывает окно для загрузки m - файла

· Cut - вырезать выбранный фрагмент и сохранить его в буфере;

· Paste - копирует выбранный фрагмент;

· Undo - отменяет последнее действие;

· Redo - восстанавливает последнюю отмененную операцию;

· Simulink - открывает окно с библиотеками Simulink;

· QUIDE - открывает окно для создания и расширения интерфейса;

· Help - открывает окно справки.

Рис. 2.1 - Панель инструментов Matlab

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

Все переменные и их значения хранятся в памяти компьютера, и эта область называется рабочей областью. В Matlab рабочая область выполнена в виде специального окна называемого - Workspace Browser, оно изображено на рис. 2.2.

Рис. 2.2 - Окно рабочей области

Рабочая область служит для просмотра ресурсов рабочей области памяти. Браузер же дает наглядную визуализацию содержимого рабочей области. Так же в рабочей области можно редактировать и удалять объекты из памяти. Например, у нас есть переменная D в которой содержится единичная матрица размером 5x5. И для визуализации нам достаточно выбрать эту переменную в рабочей области и посмотреть ее содержимое, которое изображено на рис. 2.3.

Рис. 2.3 - Визуализация содержимого рабочей области

Для просмотра файловой структуры Matlab служит специальный браузер файловой системы, показанный на рис. 2.4.

Рис. 2.4 - Браузер файловой структуры

Он служит для выбора нужной директории, для быстрого перехода между папками.

В окне Command history происходит запись всех команд, которые были выполнены в окне ввода команд. Данное окно служит для того, чтобы повторно можно было использовать команду, не прибегая к ее написанию заново. Так же команды в данном окне отсортированы по дням, для лучшей ориентации. Окно Command history изображено на рис. 2.5.

Рис. 2.5 - Окно истории команд

В окне Command window, показанном на рис. 2.6, происходит непосредственный ввод команд и вывода результатов вычислений, а также оно служит для вывода сообщений, которые посылает система.

Рис. 2.6 - Окно ввода команд

Однако работа из командной строки становится затруднительной, если требуется вводить много команд и часто их изменять. Для того, чтобы решить эту проблему используют m - файлы, в которых можно набирать команды, сохранять их в файле для дальнейшего использования. Для того, чтобы запустить редактор нужно открыть меню File и в пункте New выбрать подпункт M- file. Новый файл откроет в окне редактора как на рис. 2.7.

Основные файлы, m - файлы, создаваемые в редакторе, делятся на два класса:

· Файлы - сценарии, не имеющие входных параметров;

· Файлы - функции, имеющие входные параметры.

Рис 2.7 - Редактор m-файлов

Файлы - сценарии содержат в себе последовательность команд, которые будут выполняться по очереди. Все переменные будут являться глобальными.

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

В Matlab так же есть пакет для цифровой обработки и анализа изображений, который называется Image Processing Toolbox. Этот пакет служит освобождения пользователя от длительных процессов кодирования и отладки алгоритмов, позволяя вам сосредоточится на основной задаче. Пакет обладает такими основными свойствами:

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

· Методы авторегрессии;

· Анализ отклика во временной и частотной области;

· Отображение нулей и полюсов передаточной функции системы;

· Построение сложных диаграмм, например, диаграмм Найквиста.

Удобный графический интерфейс позволяет упростить предварительную обработку данных, а также диалоговый процесс идентификации модели. Также присутствует возможность работы с пакетом в командном режиме или с применением расширения Simulink. Операции загрузки данных, выбор диапазона, удаление смещений находятся в главном меню.

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

Пакет поддерживает все традиционные структуры моделей, включая авторегрессию, структуру Бокса- Дженкинса и другие. Он поддерживает линейные модели пространства состояний, которые могут быть определены как в непрерывном, так и в дискретном пространстве. Эти модели способны содержать произвольное число входов и выходов. Так же в пакете есть функции, которые можно использовать как тестовые данные для идентифицированных моделей. Идентификация линейных моделей широко применяется при моделировании систем управления, когда нужно создать модель объекта.

Так же в Matlab есть среда имитационного моделирования под названием Simulink.

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

Simulink является достаточно самостоятельным инструментом MATLAB и при работе с ним совсем не требуется знать сам MATLAB и остальные его приложения. С другой стороны, доступ к функциям MATLAB и другим его инструментам остается открытым и их можно использовать в Simulink. Часть входящих в состав пакетов имеет инструменты, встраиваемые в Simulink (например, LTI-Viewer приложения Control System Toolbox - пакета для разработки систем управления). Имеются также дополнительные библиотеки блоков для разных областей применения.

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

При моделировании пользователь может выбирать метод решения дифференциальных уравнений, а также способ изменения модельного времени (с фиксированным или переменным шагом). В ходе моделирования имеется возможность следить за процессами, происходящими в системе. Для этого используются специальные устройства наблюдения, входящие в состав библиотеки Simulink. Результаты моделирования могут быть представлены в виде графиков или таблиц.

Преимущество Simulink заключается также в том, что он позволяет пополнять библиотеки блоков с помощью подпрограмм написанных как на языке MATLAB, так и на языках С + +, Fortran и Ada.

2.2 Пакет Neural Network Toolbox

В данной работе для реализации нейронных сетей мы будет использовать пакет Neural Network Toolbox. Это пакет, который содержит в себе средства для проектирования, моделирования, визуализации и разработки нейронных сетей от простого персептрона до современных самоорганизующихся сетей. В пакет входит более 15 типов сетей и обучающих правил, которые позволяют пользователю выбрать наиболее подходящую для конкретного приложения.

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

Вот некоторые проблемы, которые решаются в контексте искусственных нейронных сетей и представляющие интерес для пользователя:

· Классификация образов. Задача состоит в указании принадлежности входного образа, представленного вектором признаков. К одному или нескольким предварительно определенным классам. К известным приложениям относится распознавание букв, распознавание речи, классификация электрокардиограммы, классификация клеток крови.

· Кластеризация. При решении задач кластеризации, которая известна так же, как и классификация образов без учителя, отсутствует обучающая выборка с метками классов. Кластеризация основана на подобии образов и помещает близкие образы в один кластер. Кластеризация применяется для извлечения знаний, сжатия данных и исследования свойств данных.

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

· Предсказание. Задача состоит в том, чтобы предсказать значение y(tk+1) в некоторый будущий момент времени (tk+1). Предсказание имеет значительное влияние на принятие решений в науке, технике и бизнесе. Типичным примером является предсказание погоды.

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

· Управление. Дана динамическая система, заданная совокупностью {u(t), y(t)}, где u(t) является входным управляющим воздействием, а y(t) - выходом системы в момент времени t. В системах управления с эталонной моделью целью управления является расчет такого входного воздействия, при которой система следует нужной траектории, диктуемой эталонной моделью. Примером является оптимальное управление двигателем.

· Память, адресуемая по содержимому. В модели вычислений фон Неймана обращение к памяти доступно только с помощью адреса, который не зависит от содержимого. Более того, если допущена ошибка в вычислении адреса, то есть вероятность найти не ту информацию. Ассоциативная память, или память, адресуемая по содержимому, доступна по указанию заданного содержимого. Содержание памяти может быть вызвано даже по частичному входу или искаженному содержимому. Ассоциативную память рекомендуется применять при создании мультимедийных информационных баз данных.

Рассмотрим основные команды, которые используются в пакете Neural Network Toolbox для создания нейронных сетей, а также адаптации и обучения:

Таблица 2.1 Создание нейронных сетей

Операторы

Назначение

network

Создание шаблона нейронной сети

Персептрон

newp

Создание персептрона

Линейные сети

newlin

Создание линейного слоя

newlind

Создание линейного слоя путем решения линейного уравнения

Многослойные сети

newff

Создание сети прямой передачи

newfftd

Создание сети прямой передачи с запаздыванием

newcf

Создание каскадной сети прямой передачи

Радиальные базисные сети

newrb

Создание радиальной базисной сети

newrbe

Создание радиальной базисной сети с нулевой ошибкой

newgrnn

Создание обобщенной регрессионной сети

newpnn

Создание вероятностной нейронной сети

Сети для решения задач классификации

newlvq

Создание нейронной сети для решения задач классификации

Самоорганизующиеся сети

netwc

Создание конкурирующего слоя Кохонена

newsom

Создание самоорганизующейся сети Кохонена

Рекуррентные сети

newhop

Создание сети Хопфилда

newelm

Создание сети Элмана

Таблица 2.2 Обучение и адаптация

adapt

Адаптация параметров сети

adaptwb

Функция установки режима адаптации

train

Обучение нейронной сети

trainb

Групповое обучение нейронной сети

trainbfg

Алгоритм обучения Бройтона, Флетчера, Гольдфарба и Шано BFGS)

trainbr

Алгоритм обучения BR с регуляризацией по Байесу

traincgb

Алгоритм обучения CGB на основе метода сопряженного градиента с обратным распространением и рестартами в модификации Пауэла - Биеле

trainc

Обучение нейронной сети c циклическим представлением входа

traincgf

Алгоритм Флетчера - Ривса CGF

traincgp

Алгоритм Полака - Рибейры CGP

traingd

Алгоритм градиентного спуска GD

traingda

Алгоритм градиентного спуска с выбором параметра скорости настройки GDA

traingdm

Алгоритм градиентного спуска с возмущением GDM

traingdx

Алгоритм градиентного спуска с возмущением и адаптацией параметра скорости настройки GDX

trainlm

Алгоритм Левенберга - Марквардта LM

trainoss

Одношаговый алгоритм метода секущей OSS

trainr

Обучение нейронной сети в режиме случайного представления входа

trainrp

Пороговый алгоритм обратного распространения ошибки Rprop

trains

Адаптивное обучение нейронной сети с последовательным представлением входов

trainscg

Алгоритм обучения SCG

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

Neural Network Toolbox так же поддерживает архитектуры контролируемых и неконтролируемых сетей.


Подобные документы

  • Понятие искусственного нейрона и искусственных нейронных сетей. Сущность процесса обучения нейронной сети и аппроксимации функции. Смысл алгоритма обучения с учителем. Построение и обучение нейронной сети для аппроксимации функции в среде Matlab.

    лабораторная работа [1,1 M], добавлен 05.10.2010

  • Прогнозирование на фондовом рынке с помощью нейронных сетей. Описание типа нейронной сети. Определение входных данных и их обработка. Архитектура нейронной сети. Точность результата. Моделирование торговли. Нейронная сеть прямого распространения сигнала.

    дипломная работа [2,7 M], добавлен 18.02.2017

  • Математическая модель нейронной сети. Однослойный и многослойный персептрон, рекуррентные сети. Обучение нейронных сетей с учителем и без него. Алгоритм обратного распространения ошибки. Подготовка данных, схема системы сети с динамическим объектом.

    дипломная работа [2,6 M], добавлен 23.09.2013

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

    статья [245,7 K], добавлен 29.09.2008

  • Математическая модель искусственной нейронной сети. Структура многослойного персептрона. Обучение без учителя, методом соревнования. Правило коррекции по ошибке. Метод Хэбба. Генетический алгоритм. Применение нейронных сетей для синтеза регуляторов.

    дипломная работа [1,5 M], добавлен 17.09.2013

  • Разработка нейронной сети, ее применение в алгоритме выбора оружия ботом в трехмерном шутере от первого лица, тестирование алгоритма и выявление достоинств и недостатков данного подхода. Обучение с подкреплением. Описание проекта в Unreal Engine 4.

    контрольная работа [611,0 K], добавлен 30.11.2016

  • Этапы решения задачи классификации цифр арабского алфавита на основе нейронных сетей: выбор класса, структуры и пакета нейронной сети, ее обучение, требования к информационной и программной совместимости, составу и параметрам технических средств.

    реферат [111,6 K], добавлен 19.10.2010

  • Сущность, структура, алгоритм функционирования самообучающихся карт. Начальная инициализация и обучение карты. Сущность и задачи кластеризации. Создание нейронной сети со слоем Кохонена при помощи встроенной в среды Matlab. Отличия сети Кохонена от SOM.

    лабораторная работа [36,1 K], добавлен 05.10.2010

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

    курсовая работа [1,0 M], добавлен 05.01.2013

  • Математические модели, построенные по принципу организации и функционирования биологических нейронных сетей, их программные или аппаратные реализации. Разработка нейронной сети типа "многослойный персептрон" для прогнозирования выбора токарного станка.

    курсовая работа [549,7 K], добавлен 03.03.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.