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

314346 — Применение нейронных сетей в задачах распознавания образов

Дипломная Купить готовую Узнать стоимостьмоей работы

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

314346 — Применение нейронных сетей в задачах распознавания образов (реферат, курсовая, диплом, контрольная)

Содержание

  • ВВЕДЕНИЕ
  • 1. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ
    • 1. 1. Цели и задачи работы
    • 1. 2. Основные принципы ввода графической информации в ЭВМ
    • 1. 3. Описание существующих аналогов
  • 2. СУЩЕСТВУЮЩИЕ ПОДХОДЫ В ЗАДАЧЕ РАСПОЗНАВАНИЯ ОБРАЗОВ
    • 2. 1. Постановка задачи распознавания образов
    • 2. 2. Анализ существующих алгоритмов распознавания текста
  • 3. РАЗРАБОТКА РЕАЛИЗАЦИИ ПРОГРАММЫ РАСПОЗНАВАНИЯ ТЕКСТА
    • 3. 1. Архитектура нейронных сетей, предназначенных для решения задач распознавания и принципы их обучения
    • 3. 2. Обоснование выбора признаков для обучения нейронной сети
    • 3. 3. Выбор алгоритмов обучения нейронной сети
  • 4. РАЗРАБОТКА
  • ПРИЛОЖЕНИЯ ДЛЯ РАСПОЗНАВАНИЯ ТЕКСТА
    • 4. 1. Построение архитектуры
  • приложения
    • 4. 2. Основные компоненты и классы
  • приложения
    • 4. 3. Использование
  • приложения
  • 5. РАСЧЁТ ЭКОНОМИЧЕСКИХ ПОКАЗАТЕЛЕЙ
    • 5. 1. Резюме
    • 5. 2. Анализ рынка
    • 5. 3. План маркетинга
    • 5. 4. Производственный план
    • 5. 5. Оценка длительности разработки
    • 5. 6. Определение себестоимости разработки ПП
    • 5. 7. Анализ рисков
  • ЗАКЛЮЧЕНИЕ
  • СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
  • ПРИЛОЖЕНИЕ 7

Созданные или обученные нейросети можно сохранять и открывать в приложении. Для загрузки нейронной сети необходимо перейти к пункту меню Файл > Сохранить нейросеть. Появится диалоговое окно сохранения существующей нейросети, вид которого приведен на рисунке 33. Рисунок 33. Вид окна сохранения нейросети.

Задав в поле имени файла название нейросети, необходимо нажать кнопку «Сохранить». Нейросеть будет сохранена в бинарный файл с расширением .net в месте, указанном пользователем. Для загрузки нейронной сети необходимо перейти к пункту меню Файл >Загрузить нейросеть. Процесс открытия нейросети аналогичен открытию изображения. В итоге в приложение загрузится существующая нейронная сеть. Для выполнения распознавания символа необходимо загрузить его изображение в приложение, после чего выполнить команду меню Запуск > Распознать символ.

Результатом распознавания будет сообщение с информацией о распознанном символе. На рисунках 34−36 приведены примеры распознавания символов из части тестовой выборки. Для распознавания использовалась нейросеть, обученная методом обратного распространения ошибки при настройках, приведенных на рисунках 28, 29. Рисунок 34. Результат распознавания символа «A» Рисунок 35. Результат распознавания символа «D» Рисунок 36. Результат распознавания символа «C» Из приведенных рисунков видно, что распознавание выполняется верно.

Представляет интерес поведение нейросети на примере распознавания символов, могущих быть искаженными или зашумленными. Результаты распознавания искаженных символов приведены на рисунках 37, 38. Рисунок 37. Результат распознавания символа «A» Рисунок 38. Результат распознавания символа «B» Из приведенных рисунков видно, что нейросеть может также распознавать измененные образцы символов. Это говорит о том, что нейросеть имеет признаки обобщения информации. РАСЧЁТ ЭКОНОМИЧЕСКИХ ПОКАЗАТЕЛЕЙРезюме.

Разработанная программа в дипломной работе решает задачу распознавание букв латинского алфавита. Данный программный продукт реализует:

Загрузка входных данных; Обучение системы;

Анализ входной информации;

Выполнение настроек модели распознавания текста;

Визуализация интерфейса. Программа создается одним разработчиком, который, использует одно рабочее место. Программная часть проекта состоит из кода, написанного по созданному алгоритму, и модели поставленных задач с конечной отладкой. Также к ней прилагаются необходимые библиотечные файлы сборки. Для реализации данной программы необходимо приобрести программно-аппаратное обеспечение на сумму 33 800 рублей. Амортизация машинных средств составит 497,01 рублей за 40 дней задействованной вычислительной техники. Вычисленная запланированная себестоимость разработки равна 80 000 рублей. Она же является минимальным капиталовложением для реализации данного программного продукта. Предположительное время для реализации проекта составит 2 месяца.

5.2Анализ рынка.

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

5.3План маркетинга.

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

ориентирование на конкретного заказчика, разработка программного обеспечения c конкретными требований заказчика;

дружественный пользователю интерфейс и эргономичный дизайн программы;

возможность внедрения и дальнейшего развития;

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

открытость исходного кода;

возможность изменения функционала программы;

возможность модернизация алгоритма. Производственный план.

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

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

устройство вывода на печать;

операционная система Windows8Ultimate;программа Microsoft Visual Studio 2013.

Последовательность действий при выполнении проекта приведена в таблице 3. Таблица 3 Упорядоченная последовательность действий и оценка их длительности при реализации программной части проекта№Действия.

Использование ЭВМ1Разработка технического задания-13 530,662Изучение технической документации+791 190,663Разработка алгоритмов-651 060,664Оптимизация и отладка алгоритмов-78 179,31,665Реализация проекта+18 152 016,30,336Тестирование и отладка+6 111 410,61,337Согласование-75 106,160,58Документирование+35 750,66Итого:

55 619 465,56,5Параметры, приведенные в таблице 1, имеют следующее назначение: — характеризует степень неопределенности выполнения работ за ожидаемое время; - оценка продолжительности действия при самом неблагоприятном стечении обстоятельств;- оценка продолжительности действия при наиболее благоприятном стечении обстоятельств;- наиболее вероятная продолжительность действия. Ожидаемая величина длительности действия и стандартное отклонение для каждого действия составляет:(23)(24)Итоговая оценка затрат на разработку программного продукта и стандартное отклонение от этой оценки составляет:(25)(26)Оценка длительности разработки.

Длительность разработки определена в диаграмме Ганта, исходя из того что все этапы: (разработка, документация, тестирование) реализованы одним специалистом. План разрабатываемого программного продукта приведен в виде календарного графика с указанием типа работ и временных затрат на их реализацию на рис. Приведем план разработки проекта в виде диаграммы.

Ганта на рисунке 39. Рисунок 39. Вид диаграммы Ганта.

Условные обозначения: действия, выполненные без использования ЭВМ. действия, выполненные с использования ЭВМ. Общее время на проект составит 61 день, время использования ПЭВМ составит 40 дней. Определение себестоимости разработки ППДенежные затраты при реализации программного продукта получаются из трат на арендуемую площадь, заработную плату сотрудникам и затрат на приобретение вычислительной техники и программного обеспечения, так же иные расходы. Средняя зарплата программиста 40 000 рублей. Балансовая стоимость определяется из всех расходов на закупку, сооружением и строительством основных производственных фондов. К основным фондам относиться оборудование, на котором реализуется проект. Приведем список техники необходимой для реализации проекта в таблице 4. Таблица 4 Список необходимой техники для реализации проекта.Техника.

Стоимость, руб. Количество, шт. Компьютер300 001шт.Монитор125 001шт.Клавиатура10 001шт.Мышь15 001шт.Сканер45 001 шт.

Принтер73 001шт.Итого568 006 шт. Для реализации проекта требуется программное обеспечение MSVisualStudio 2013. В таблице 3 приведены затраты на ПО. Таблица 3 Стоимость ПОНазвание.

Стоимость, руб. Количество, шт. Visual Studio Professional 2 013 250 001.

Итого250 001.

Плановая себестоимость С определяется по формуле:(27)где — амортизация на технику и программное обеспечение, а так же на другое оборудование; - прочие производственные расходы; - зарплата сотрудников с начислениями на социальные нужды; - коэффициент накладных затрат. Исходя из рассчитанной длительности разработки, учитывая коэффициент на социальные нужды 35% вычисляем заработную плату.(28)где — среднее количество дней в месяц,; - среднемесячная заработная плата разработчика; - продолжительность разработки. Среднемесячная зарплата сотрудника составляет 40 000 руб. Тогда будем иметь следующую величину заработной платы:

р.(28)Амортизационные отчисления при линейном методе расчета амортизации составят (29)где — годовая норма амортизации; - балансовая стоимость вычислительной техники (ВТ); 256 — среднее количество рабочих дней в году; - объем машинных ресурсов для разработки ПО (дней).Балансовая стоимость вычислительной техники = 23 050р.,= 12%. Объем машинных ресурсов 46 дней. 1065 руб.(30)Прочие производственные затраты включают затраты на техническое обслуживание и ремонт ВТ, расходные материалы и определяются по формуле:(31)где — процент прочих производственных затрат от первоначальной стоимости ВТ, HПР = (3−4)%.355 руб.(32)Анализ рисков.

Основная вероятность возникновения рисковых ситуаций связана с техническими моментами функционирования программы. Технические риски:

сбой в операционной системе;

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

ЗАКЛЮЧЕНИЕ

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

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Грузман И.С., Киричук В. С., Косых В. П., Перетягин Г. И., Спектор А. А. Цифровая обработка изображений в информационных системах: Учебное пособие.

Новосибирск: Изд-во НГТУ, 2000. — 168 с.Лавровская.

О.Б. Технические средства информатизации. Практикум. — М.: Академия, 2012. — 208 с.Гребенюк.

Е.И., Гребенюк.

Н.А. Технические средства информатизации. — М.: Академия, 2012. — 352 с.Шишов.О. В. Современные технологии и технические средства информатизации. — М.: Инфра-М, 2012. — 464 с.Келим.

Ю.М. Вычислительная техника. — М.: Академия, 2012. — 368 с.Авдеев.

В.А. Периферийные устройства. Интерфейсы, схемотехника, программирование. — М.: ДМК Пресс, 2012. — 848 с.Гридин.

А. Мобильник изнутри. Устройство и ремонт мобильных телефонов. — М.: АФОН, 2005. -.

144 с.Л. П. Гаврилов, С. В. Соколов. Мобильные телекоммуникации в электронной коммерции и бизнесе. — М.: Финансы и статистика, 2006.

— 336 с.А. Л. Горелик, В. А. Скрипкин. Методы распознавания. М.: Высшая школа, 1989.Л. Н. Чабан. Теория и алгоритмы распознавания образов. Учебное пособие.

М.: МИИГАиК. 2004. — 70с. Жданов И. Н. Метод эритрометрии на основе модифицированного преобразования Хафа [Текст] [Текст] / И. Н. Жданов, А. С.

Потапов, О. В. Щербаков // Оптический журнал — 2013. — Т. 80. — №.

3. — С. 97−100.Хайкин С. Нейронные сети: полный курс, 2e издание.:Пер. с ан rл.

— М. Издательский дом «Вильямс», 2006. — 1104 с.

Каллан Р. Основные концепции нейронных сетей.: Пер. с англ. —.

М.: Издательский дом Вильямс, 2001. -.

287 с. Осовский С. Нейронные сети для обработки информации / Пер. с польского И. Д. Рудинского. — М.: Финансы и статистика, 2002.

— 344 с: ил.О. А. Морозов, П. Е. Овчинников, Ю. А. Сёмин, В. Р. Фидельман. Применение теоретико-информационного подхода для обучения многослойного персептрона в задаче распознавания фонем // Вестник Нижегородского университета им. Н. И. Лобачевского, 2010, № 5 (2), с. 354−357Круглов В.В., Дли М. И., Голунов Р. Ю. Нечеткая логика и искусственные нейронные сети. -.

М.: Физматлит, 2000. — 224 с. Тархов Д. А. Нейронные сети. Модели и алгоритмы. — М.: Радиотехника, 2005.

— 256 с. Баскаков С. И. Радиотехнические цепи и сигналы. М.: Высшая школа, 2-е издание. — 446 с.Н. М. Астафьева. Вейвлет-анализ: основы теории и примеры применения.

// Успехи физических наук, т. 166, № 11 C. 1145−1170, 1996 г. Блаттер К. Вейвлет-анализ. Основы теории. — М.: Техносфера, 2004.

— 280 с. Добеши И. Десять лекций по вейвлетам. — Ижевск: Регулярная и хаотическая динамика, 2001. — 464Панченко Т. В. Генетические алгоритмы — Астрахань: издательский дом «Астраханский университет», 2007.

— 87 с.А. М. Липанов, А. В. Тюриков, А. С. Суворов, Е. Ю. Шелковников, П. В. Гуляев Применение генетического алгоритма для обучения нейронной сети в задаче идентификации СТМ-изображений // Ползуновский вестник, № 2, 2010. с. 218−221Вороновский Г.

К., Махотило К. В., Петрашев С. Н. Сергеев С.

А. Генетические алгоритмы, искусственные нейронные сети и проблемы виртуальной реальности — Х.: Основа, 1997. — 112 с. Гонсалес Р., Вудс Р. Цифровая обработка изображений в среде MATLAB (+CD). ;

М.: Техносфера, 2006. — 621 с. Кетков Ю., Кетков А., Шульц М. — MATLAB.

7. Программирование, численные методы. БХВ-Петербург, 2005. — 742 с. Смоленцев Н. К. Создание Windows-приложений с использованием математических процедур MATLAB. -.

М.: ДМК Пресс, 2008. — 456 с.ПРИЛОЖЕНИЕAddBase.csusing System;usingSystem.Collections.Generic;using System. ComponentModel;using System. Data;using System. Drawing;using System. Linq;using System. Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespace SymbolNNet{publicpartialclassAddBase :Form {publicAddBase () {InitializeComponent (); }//РодительскаяформаMainForm main;//Число букв в алфавитеpublicint Count (){//ДлинакомбобоксаreturncomboBox1.Items.Count; }privatevoid button1_Click (object sender, EventArgs e) {ImageBase im = newImageBase ();//Изображениебуквыim.bm = main. currImage;//Символ буквы, который ему отвечаетim. sym = (char)comboBox1.Items[comboBox1.SelectedIndex]. T oString ()[0];//Добавление буквы в словарьmain.Dict.Add (im);}privatevoid AddBase_Load (object sender, EventArgs e){//Привязка к родительской формеmain = this. OwnerasMainForm;//Начальная позиция в списке comboBox1. SelectedIndex = 0;} }}ImageBase.csusing System;usingSystem.Collections.Generic;using System. Linq;using System. Text;usingSystem.Threading.Tasks;using System. Drawing;namespace SymbolNNet{ [Serializable]publicclassImageBase {publicBitmap bm;publicchar sym;}}MainForm.csusing System;usingSystem.Collections.Generic;using System. ComponentModel;using System. Data;using System. Drawing;using System. Linq;using System. Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;using NeuralNetwork;namespace SymbolNNet{publicpartialclassMainForm :Form {publicMainForm () {InitializeComponent ();//Вейвлет-преобразованиедляразложения wd=newWaveletDecomposer ();wd.N = 1;wd.type = «db2»; }int curr_width, curr_height;publicWaveletDecomposer wd;publicBitmap currImage;publicbool Loaded; //Словарь добавленных объектовpublicList<ImageBase> Dict=newList<ImageBase>();//Нейросетьдляраспознаванияpublic NeuralNetwork. NeuralNetwork net = null; privatevoid Form1_Load (object sender, EventArgs e) { curr_width = pbox. Width; curr_height = pbox. Height; }//Нормализациявектораstaticpublicfloat[] Normalize (float[] vec) {float[] res = newfloat[vec.Length]; float min = vec. Min ();float max = vec. Max ();for (int i = 0; i < vec. Length; i++) res[i] = (float)((vec[i] - min) / (max — min));return res; }//Максимальная длина вектора выборкиpublicintMaxSize () {int result;if (Loaded) { result = net. N_Inputs; }else {int[] sizes=newint[Dict.Count]; for (int i = 0; i < sizes. Length;i++) {//ЗапусквычисленияпризнаковкартинкиList<float> res_ = wd. Run (Dict[i].

bm);//Длина вектора признаков sizes[i] = res_.Count;}result = sizes. Max (); }return result; }privatevoidзагрузитьToolStripMenuItem_Click (object sender, EventArgs e) { //Загрузкаизображения LoadImage. Filter = «Картинки (*.bmp, jpg)-*.jpg; *bmp»; LoadImage. RestoreDirectory = true;if (LoadImage.ShowDialog () == DialogResult. OK) {//Имяфайлаstring name = LoadImage. FileName;//Загрузканаканвуформыpbox.Image = Image. FromFile (name);//Текущееизображение currImage = (Bitmap)pbox.Image; } }privatevoidнастройки.

НейросетиToolStripMenuItem_Click (object sender, EventArgs e) {//ВызоввормынастроекNeuroNetForm n_form = newNeuroNetForm (); n_form.Owner = this; n_form.ShowDialog (); }privatevoidдобавить.

ВВыборкуToolStripMenuItem_Click (object sender, EventArgs e){//Форма добавления картинки в выборкуAddBase add_form = newAddBase ();add_form.Owner = this; add_form.ShowDialog (); }privatevoidнастройки.

ПризнаковНейросетиToolStripMenuItem_Click (object sender, EventArgs e) {//ВызовформынастройкивейвлетовWaveletForm wform = newWaveletForm ();wform.Owner = this;wform.ShowDialog (); }privatevoidраспознать.

СимволToolStripMenuItem_Click (object sender, EventArgs e) {//ЗапусквычисленияпризнаковкартинкиList<float> res_ = wd. Run (currImage);// Выравниваниемассиваfloat[] vec = NeuroNetForm. AligmentArray (res_.ToArray (), MaxSize ()); vec = MainForm. Normalize (vec);//Запускаемнейроннуюсетьfloat[] result = net. Output (vec);//Максимумизкоординатвектораfloat res = result. Max ();int phonem_index = -1; {for (int i = 0; i < result. Length; i++)if (result[i] == res) phonem_index = i;// Номермаксимумаchar sym = (char)((int)'A' + phonem_index);MessageBox.Show («Распознансимвол «+ sym. ToString ()); } }privatevoidзагрузить.

НейросетьToolStripMenuItem_Click (object sender, EventArgs e) {try {string FilterName = «Файлынейросети (*.net) — *.net» ;OpenFileDialog open_net = newOpenFileDialog (); open_net.Filter = FilterName; open_net.RestoreDirectory = true;if (open_net.ShowDialog () == DialogResult. OK) {string netname = open_net.FileName; net = null; net = NeuralNetwork.NeuralNetwork.load (netname); Loaded = true;MessageBox.Show («Файлнейросетизагружен!»); } }catch (Exception ex) {MessageBox.Show («Ошибказагрузкисети»); } }privatevoidсохранить.

НейросетьToolStripMenuItem_Click (object sender, EventArgs e) {string FilterName = «Файлынейросети (*.net) — *.net» ;SaveFileDialog save_net = newSaveFileDialog (); save_net.Filter = FilterName; save_net.RestoreDirectory = true;if (save_net.ShowDialog ()==DialogResult.OK) {string out_netname = save_net.FileName;if (net ≠ null) net. save (out_netname);} } }}NeuroNetForm.csusing System;usingSystem.Collections.Generic;using System. ComponentModel;using System. Data;using System. Drawing;using System. Linq;using System. Text;usingSystem.Windows.Forms;using System. Threading;using NeuralNetwork;namespace SymbolNNet{publicpartialclassNeuroNetForm :Form {float Error;int epochs;int runned_index = 0;publicint[] layers = null; //МассивслоевMainForm main;// Отдельныеполя NeuralNetwork. LearningAlgorithm algorithm;float[][] input_matrix;float[][] output_matrix;publicNeuroNetForm () {InitializeComponent ();// обязательнопослеинициализациикомпонентов textBox1. Focus (); comboBox1. SelectedIndex = 0; comboBox2. SelectedIndex = 0;//this.backgroundWorker1.WorkerReportsProgress = true;this.backgroundWorker1.WorkerSupportsCancellation = true; }privatevoidRunLearning () {main.net.LearningAlg.Learn (input_matrix, output_matrix);// algorithm. Learn (input_matrix, output_matrix);float err=algorithm.Error; }privatevoid textBox1_Enter (object sender, EventArgs e) { }//Выравниваниемассивапоразмеру sizestaticpublicfloat[] AligmentArray (float[] a, int size) {int arr_size = a. Length; float [] res=newfloat[size]; //Если длина массива меньше размераif (a.Length <= size) {//Записываем массив, остальная часть будет заполнена нулямиfor (int i = 0; i < a. Length; i++)res[i] = a[i]; }else//Записываем часть массива, которая «помещается» в массив длины size{for (int i = 0; i < size; i++) res[i] = a[i]; }return res; }privateint[] GetLayers (string str){try { //Получаем число символов. По ним мы определим число выходов сетиAddBase f = newAddBase ();int size_out = f. Count ();//Число выходов нейросети определяется числом символовstring[] strings = null;if (textBox1.Text.Length ≠ 0) { strings = textBox1.Text.Split (','); //Разбиваемстрокунатокены }elsereturnnull;int size = strings. Length; //Размермассиватокеновint[] layers = newint[size + 1]; for (int i = 0; i < size; ++i) layers[i] = Convert. ToInt32(strings[i]); layers[size] = size_out;return layers;}catch (Exception ex) {MessageBox.Show («В текстовые поля должны вводиться числа»);returnnull; } }privatevoid button1_Click (object sender, EventArgs e) {try {// main. neuronet = null;if (main.Dict.Count == 0){MessageBox.Show («Перед заданием сети необходимо заполнить словарь!»);return; }if (main.wd == null){MessageBox.Show («Необходимо задать вид преобразования!»);return; }main.Loaded = false; //Создается новая сетьint input_size = main. MaxSize ();//ImageBase elem = null;//Для того, чтобы задать число входных узлов, необходимо семплировать данные из словаря и выполнить их преобразование.//Длина преобразованного вектора будет числом узлов входного слоя.// Создание сети main.net = null;AddBase tempfom = newAddBase (); //Промежуточныйобьектint size_Phonems = tempfom. Count ();//Создание сети по считанным данным {int[] Layers = null; Layers = GetLayers (textBox1.Text); //Числовоймассивслоевfor (int i = 0; i < Layers. Length; i++){if (Layers[i] <= 0) thrownewOverflowException («Число нейронов в слое не может быть нулевым или отрицательным»);} layers = newint[Layers.Length + 1]; layers[0] = input_size;for (int i = 1; i < layers. Length; i++) layers[i] = Layers[i — 1]; if (layers ≠ null) {//Заданиечерезконструктор main.net = new NeuralNetwork. NeuralNetwork (input_size, layers); }else {MessageBox.Show («Укажитечислослоевсети!»);return; } }//Перестройкавесоввнейросети// if (main.neuronet ≠ null){//Выбор функции активации нейроновint param_fun;param_fun = comboBox1. SelectedIndex;switch (param_fun) {case 0: NeuralNetwork. SigmoidActivationFunction fun = newSigmoidActivationFunction ();fun.Beta = (float)Convert.ToDouble (textBox2.Text);for (int i = 0; i < 1; i++) {main.net.setActivationFunction (fun); }break;case 1: NeuralNetwork. HeavisideActivationFunction hfun = new NeuralNetwork. HeavisideActivationFunction ();for (int i = 0; i < 1; i++) {main.net.setActivationFunction (hfun); }break;case 2://main.neuronet.ActFuncType = NeuroNetLibrary.ActivationFunction.HyperbTanh; NeuralNetwork. LinearActivationFunction lfun = newLinearActivationFunction ();lfun.A = (float)Convert.ToDouble (textBox3.Text);for (int i = 0; i < 1; i++) {main.net.setActivationFunction (lfun); }break;case 3: NeuralNetwork. GaussianActivationFunction gfun = newGaussianActivationFunction ();gfun.Mu = (float)Convert.ToDouble (textBox12.Text);gfun.Sigma = (float)Convert.ToDouble (textBox11.Text);for (int i = 0; i < 1; i++) {main.net.setActivationFunction (gfun); }break; } }MessageBox.Show («Нейроннаясетьсоздана!»); }catch (FormatException ex) {MessageBox.Show («Втекстовыеполядолжныбытьвведенычисла! & quot;+ex.Message); }catch (InvalidCastExceptionex) {MessageBox.Show («Втекстоеполевведенпараметрневерноготипа!»);}catch (OverflowException ex) {MessageBox.Show («Введенослишкомбольшоеилислишкоммалоезначение! & quot;+ex.Message); }catch (Exception ex) {MessageBox.Show («Ошибкапрограммы»); } }privatevoid comboBox2_SelectedIndexChanged (object sender, EventArgs e) {if (comboBox2.SelectedIndex == 0) { groupBox2. Enabled = true; groupBox3. Enabled = false; }else { groupBox2. Enabled = false; groupBox3. Enabled = true; } }privatevoid comboBox1_SelectedIndexChanged (object sender, EventArgs e) {int param = comboBox1. SelectedIndex;if (param == 0) textBox2. Enabled = true;else textBox2. Enabled = false;if (param == 2) groupBox1. Enabled = true;else groupBox1. Enabled = false;if (param == 3) groupBox4. Enabled = true;else groupBox4. Enabled = false; }privatevoid tabControl1_Selected (object sender, TabControlEventArgs e) {if ((main.net ==null) — (main.net == null)) { tabControl1. SelectedIndex = 0; }if (tabControl1.SelectedIndex == 1) { button2. Visible = true; button1. Visible = false; }else { button2. Visible = false; button1. Visible = true;} }//Обучение сети на данных из словаряprivatevoid button2_Click (object sender, EventArgs e) {if (button2.Text == «Отменитьобучение») {if (backgroundWorker1.IsBusy) {Thread.Sleep (1000); backgroundWorker1. CancelAsync (); } button2. Text = «Обучениесети» ;return; }if (button2.Text == «Обучениесети») { button2. Text = «Отменитьобучение»; progressBar1. Maximum = Convert. ToInt32(main.Dict.Count); progressBar1. Minimum = 0; progressBar1. Value = 0; if (!checkBox1.Checked)//Рандомизациявесоввсетиmain.net.randomizeAll ();// Выборалгоритмаint param_algorithm = comboBox2. SelectedIndex; algorithm = null;switch (param_algorithm) {case 0://NeuralNetwork.BackPropagationLearningAlgorithm obj = new BackPropagationLearningAlgorithm (main.Neuronets[0]);VisualBackPropagationAlgorithm obj = newVisualBackPropagationAlgorithm (main.net);main.net.LearningAlg = obj;// NeuralNetwork. BackPropagationLearningAlgorithm obj = new BackPropagationLearningAlgorithm (main.Neuronets[0]);obj.Alpha = (float)Convert.ToDouble (textBox6.Text);obj.Gamma = (float)Convert.ToDouble (textBox7.Text); algorithm = obj;break;case 1: VisualGeneticLearningAlgorithm obj1 = newVisualGeneticLearningAlgorithm (main.net); obj1. PopulationSize = Convert. ToInt32(textBox5.Text);main.net.LearningAlg = obj1; algorithm = obj1;break; }main.net.LearningAlg.ErrorTreshold = (float)Convert.ToDouble (textBox8.Text);main.net.LearningAlg.MaxIteration = Convert. ToInt32(textBox9.Text);if (main.Dict.Count == 0) {MessageBox.Show («В словаре нет выборок для обучения!»);return; } backgroundWorker1. RunWorkerAsync (null); } }privatevoidCalc (DoWorkEventArgs e) {int num;UserInfo info = newUserInfo ();e.Result = info;//Подготовка данных для формирования множества обученияinfo. max = main.Dict.Count;List<float[]> list_out = newList<float[]>();//СписоквходныхмассивовкоэффициентовпреобразованийList<float[]> list_input = newList<float[]>();for (int i = 0; i < main.Dict.Count; i++) {string str = «Обработкасимвола» + main. Dict[i].

sym;info.index = i + 1; info.info = str; backgroundWorker1. ReportProgress (i, e);if ((backgroundWorker1.CancellationPending)) {e.Cancel = true;if (((UserInfo)e.Result).state == false) { ((UserInfo)e.Result).state = false;return; } }double[] coefs = null;ImageBase elem = null;//Получениеданныхофонеме elem = main. Dict[i]; List<float> wdec_prizn = main.wd.Run (elem.bm);float[] vec = NeuroNetForm. AligmentArray (wdec_prizn.ToArray (), main. MaxSize ()); vec = MainForm. Normalize (vec); list_input.Add (vec);AddBase f = newAddBase ();float[] ideal = newfloat[f.Count ()]; int pos_item = elem. sym-'A';ideal[pos_item] = 1;// Добавление в список list_out.Add (ideal); //Собираем массивы-матрицы для обучения info.info = «Подготовка данных.»; e. Result = info;backgroundWorker1.ReportProgress (0, e);intsize = list_input.Count; //Числомассивоввспискеinput_matrix = newfloat[size][]; output_matrix = newfloat[size][]; ((UserInfo)e.Result).max = size;for (int j = 0; j < size; j++) {// Заполняемвходноймассив ((UserInfo)e.Result).index = j + 1; backgroundWorker1. ReportProgress (j, e); input_matrix[j] = newfloat[main.MaxSize ()]; input_matrix[j] = list_input[j]; // Заполняемвыходноймассив output_matrix[j] = newfloat[f.Count ()]; output_matrix[j] = list_out[j]; }//progressBar1.Value = runned_index; info.info = «Обучениесети.» ;e.Result = info; backgroundWorker1. ReportProgress (0, e);RunLearning (); info.info = «Окончаниеобучения» ;e.Result = info; backgroundWorker1. ReportProgress (0, e);Thread.Sleep (1000); ((UserInfo)e.Result).state = true;}//Очистка списковlist_input.Clear ();list_out.Clear (); }privatevoid NeuroNetForm_Load (object sender, EventArgs e) { main = this. OwnerasMainForm;}privatevoid tabControl1_Click (object sender, EventArgs e){ }privatevoid backgroundWorker1_DoWork (object sender, DoWorkEventArgs e) { Calc (e); }privatevoid backgroundWorker1_ProgressChanged (object sender, ProgressChangedEventArgs e) {//Application.DoEvents (); progressBar1. Minimum = 0; progressBar1. Maximum = main.Dict.Count;UserInfo obj=newUserInfo ();if (e.UserState ≠ null){ obj = (UserInfo)((DoWorkEventArgs)e.UserState).Result; progressBar1. Value = obj. index; label10. Text = Convert. ToString (obj.info); label15. Text = Convert. ToString (100 * progressBar1. Value / progressBar1. Maximum) + «%»; } }privatevoid backgroundWorker1_RunWorkerCompleted (object sender, RunWorkerCompletedEventArgs e) {if (!((UserInfo)e.Result).state){MessageBox.Show («Обучение было остановлено пользователем!»); }else {VisualForm error_form = newVisualForm (); if (main.net.LearningAlgisVisualBackPropagationAlgorithm) { error_form.Add (((VisualBackPropagationAlgorithm)main.net.LearningAlg).Err_Series); }elseif (main.net.LearningAlgisVisualGeneticLearningAlgorithm) { error_form.Add (((VisualGeneticLearningAlgorithm)main.net.LearningAlg).Err_Series); } error_form.Show ();MessageBox.Show («Сетьпрошлаобучение!»); button2. Text = «Обучениесети»; //label4.Text = «Ошибкаобучения «+ Convert. ToString (main.Neuronets[0]. L earningAlg. Error);//label8.Text = «Числоэпох «+ Convert. ToString (main.Neuronets[0]. L.

earningAlg.Iteration); } } }classUserInfo {publicbool state;publicint max;publicstring info;publicint index;publicUserInfo (){ state = false; max = 0; } }}VisualForm.csusing System;usingSystem.Collections.Generic;using System. ComponentModel;using System. Data;using System. Drawing;using System. Linq;using System. Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespace SymbolNNet{publicpartialclassVisualForm :Form {publicVisualForm () {InitializeComponent (); chart1. ChartAreas[" ChartArea1″ ]. CursorX. IsUserEnabled = true; chart1. ChartAreas[" ChartArea1″ ]. CursorX. IsUserSelectionEnabled = true; chart1. ChartAreas[" ChartArea1″ ]. CursorY. IsUserEnabled = true; chart1. ChartAreas[" ChartArea1″ ]. CursorY. IsUserSelectionEnabled = true; chart1. ChartAreas[" ChartArea1″ ]. AxisX. Title = «Итерации»; chart1. ChartAreas[" ChartArea1″ ]. AxisY. Title = «Ошибкаобучения»; chart1. Series[0]. C olor = Color. DarkGreen; chart1. Series[0]. L egendText = «Ошибкаобучения»; }publicvoid Add (List<double> data) { chart1. Series[0]. P.

oints.Clear ();for (int i = 0; i < data. Count; i++) chart1. Series[0]. Points. AddY (data[i]);} }}.

Показать весь текст

Список литературы

  1. И.С., Киричук В. С., Косых В. П., Перетягин Г. И., Спектор А. А. Цифровая обработка изображений в информационных системах: Учебное пособие.- Новосибирск: Изд-во НГТУ, 2000. — 168 с.
  2. ЛавровскаяО.Б. Технические средства информатизации. Практикум. — М.: Академия, 2012. — 208 с.
  3. ГребенюкЕ.И., ГребенюкН.А. Технические средства информатизации. — М.: Академия, 2012. — 352 с.
  4. Шишов.О. В. Современные технологии и технические средства информатизации. — М.: Инфра-М, 2012. — 464 с.
  5. КелимЮ.М. Вычислительная техника. — М.: Академия, 2012. — 368 с.
  6. АвдеевВ.А. Периферийные устройства. Интерфейсы, схемотехника, программирование. — М.: ДМК Пресс, 2012. — 848 с.
  7. ГридинА. Мобильник изнутри. Устройство и ремонт мобильных телефонов. — М.: АФОН, 2005. — 144 с.
  8. Л.П. Гаврилов, С. В. Соколов. Мобильные телекоммуникации в электронной коммерции и бизнесе. — М.: Финансы и статистика, 2006. — 336 с.
  9. А.Л. Горелик, В. А. Скрипкин. Методы распознавания. М.: Высшая школа, 1989.
  10. Л.Н.Чабан. Теория и алгоритмы распознавания образов. Учебное пособие. М.: МИИГАиК. 2004. — 70с.
  11. И.Н. Метод эритрометрии на основе модифицированного преобразования Хафа [Текст] [Текст] / И. Н. Жданов, А. С. Потапов, О. В. Щербаков // Оптический журнал — 2013. — Т. 80. — № 3. — С. 97−100.
  12. С. Нейронные сети: полный курс, 2¬e издание.:Пер. с анrл. — М. Издательский дом «Вильямс», 2006. — 1104 с.
  13. Р. Основные концепции нейронных сетей.: Пер. с англ. — М.: Издательский дом Вильямс, 2001. — 287 с.
  14. С. Нейронные сети для обработки информации / Пер. с польского И. Д. Рудинского. — М.: Финансы и статистика, 2002. — 344 с: ил.
  15. О.А. Морозов, П. Е. Овчинников, Ю. А. Сёмин, В. Р. Фидельман. Применение теоретико-информационного подхода для обучения многослойного персептрона в задаче распознавания фонем // Вестник Нижегородского университета им. Н. И. Лобачевского, 2010, № 5 (2), с. 354−357
  16. В.В., Дли М.И., Голунов Р. Ю. Нечеткая логика и искусственные нейронные сети. — М.: Физматлит, 2000. — 224 с.
  17. Д.А. Нейронные сети. Модели и алгоритмы. — М.: Радиотехника, 2005. — 256 с.
  18. С.И. Радиотехнические цепи и сигналы. М.: Высшая школа, 2-е издание. — 446 с.
  19. Н.М. Астафьева. Вейвлет-анализ: основы теории и примеры применения. //Успехи физических наук, т. 166, № 11 C. 1145−1170, 1996 г.
  20. К. Вейвлет-анализ. Основы теории. — М.: Техносфера, 2004. — 280 с.
  21. И. Десять лекций по вейвлетам. — Ижевск: Регулярная и хаотическая динамика, 2001. — 464
  22. Т.В. Генетические алгоритмы — Астрахань: издательский дом «Астраханский университет», 2007. — 87 с.
  23. А.М. Липанов, А. В. Тюриков, А. С. Суворов, Е. Ю. Шелковников, П. В. Гуляев Применение генетического алгоритма для обучения нейронной сети в задаче идентификации СТМ-изображений // Ползуновский вестник, № 2, 2010. с. 218−221
  24. Г. К., Махотило К. В., Петрашев С. Н. Сергеев С. А. Генетические алгоритмы, искусственные нейронные сети и проблемы виртуальной реальности — Х.: Основа, 1997. — 112 с.
  25. Р., Вудс Р. Цифровая обработка изображений в среде MATLAB (+CD). — М.: Техносфера, 2006. — 621 с.
  26. Ю., Кетков А., Шульц М. — MATLAB 7. Программирование, численные методы. БХВ-Петербург, 2005. — 742 с.
  27. Н. К. Создание Windows-приложений с использованием математических процедур MATLAB. — М.: ДМК Пресс, 2008. — 456 с.
Заполнить форму текущей работой
Купить готовую работу

ИЛИ