Разработка программного обеспечения, которое позволит восстанавливать параметры неоднородностей по результатам электромагнитных измерений
Задача неразрушающего контроля. Математическая модель нейронной сети, ее виды. Программное обеспечение для определения параметров неоднородности в материале. Основные алгоритмы и оптимизации. Эксперименты с персептроном и выбор оптимальных коэффициентов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 06.03.2013 |
Размер файла | 5,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Второе средство, библиотека классов .NET-оболочки, предоставляет программам доступ к среде выполнения. Например, если вам нужно выполнить операцию ввода-вывода, скажем, отобразить что-либо на экране, то для этого необходимо использовать .NET-библиотеку классов. Если программа ограничивается использованием средств, определенных .NET-библиотекой классов, она может выполняться везде (т.е. в любой среде), где поддерживается .NET-система. Поскольку С# автоматически использует .NET-библиотеку классов, С#-программы автоматически переносимы во все .NET-среды [15].
2.3 Описание объектной модели
2.3.1 Общая структура приложения
Весь проект логически разделен на три составляющие. Первая - это основная программа, которая содержит в себе все WINDOWS-формы для взаимодействия с пользователем. Вторая - это библиотека, в которой содержится классы для работы с данными. Третья - это динамически подключаемые модули ИНС и модули для обработки данных.
В Visaul Studio 2008 данное деление представлено в виде трех различных проектов, собранных в одном решении.
Проект Diplom
Основная программа представлена проектом Diplom, в нем собранны все формы, с которыми работает пользователь:
class MainForm - основная форма приложения, приложение выполнено в MDI стиле, т.е. существует основное окно, все остальные окна открываются внутри него. В данном классе объединены все компоненты программы, т.е. данный класс является связующим звеном для всех модулей программы;
class AddProcessing - форма добавления обработчиков к данным;
class DestributionDataForm - форма позволяющая пользователю распределить данные по различным наборам, т.е. можно загрузить одни данные и на основе них сделать все наборы;
class ExperimentsForm - форма для проведения экспериментов, позволяет загружать экспериментальные данные и прогонять различные виды искусственныйх нейронных сетей на этих данных;
class ImportDataForm - форма импортирования данных. Позволяет выбрать входные и выходные данные, а так же выбрать в какой набор загружать эти данные;
class InputOutputData - UserControl, который отображает данные передаваемые ему через класс контейнер DataItem, который будет описан чуть позже. Отображение данных осуществляется в DataGrid и разделено на закладки входы и выходы;
class ProcessingForm - форма выбора обработчика для данных, об обработчиках более подробно будет рассказано в пункте 2.3.2;
class ReviewDataForm - форма для показа загруженных данных, данная форма включает в себя три закладки, на каждую из которых помещается UserControl InputOutputData;
class View3Form - форма для показа графика в трех видах;
class FormDiagram - форма для показа диаграммы.
О двух последних формах подробнее будет рассказано в пункте 2.5.
Библиотека классов для работы с данными. Проект LibraryNP.
В соответствии с концепцией ООП все данные вынесены в отдельный класс, в котором помимо самих данных так же содержатся основные методы по их обработке. Все данные разделены на 3 набора:
тренировочные - это данные, на которых происходит обучение из всех наборов, этот наиболее большой, т.е. для обучения необходимо большое множество данных;
тестовые - этот набор обычно используется при обучении персептрона, сам набор непосредственно не учувствует в обучении, но на этом наборе считается ошибка при каждой итерации. Делается это для того, чтобы ИНС не переобучилась на «тренировочных» данных;
контрольные - этот набор данных используется уже для контроля обученности сети, и на нем проверяется работа ИНС уже после всего обучения.
Экспериментальные данные - это данные, которые включают реальные входы и выходы, а так же выходные данные, полученные после работы нейронной сети.
Диаграмма классов изображена на рисунке 14.
Основные классы:
class DataNP - данный класс инкапсулирует в себе 3 набора данных, для этого он включает в себя три объекта класса DataItem, соответственно данный класс позволяет обрабатывать сразу 3 наборами данных;
class DataItem - данный класс содержит в себе один набор данных, такой набор данных представляет собой два двумерных массива, массив входов и массив выходов, количество строк у обоих массивов совпадает, а количество столбцов соответствует количеству входов и выходов;
class DataExperiments - этот класс сожержит в себе данные для проведения эксперимента. Он включает один набор DataItem, в который загружаются реальные данные, а так же массив, в который помещаются данные с выхода нейронной сети, таким образом, в одном классе инкапсулированы все данные, которые нужны для проведения экспериментов.
Рисунок 14 - Диаграмма классов для работы с данными
Все формы, работающие с загруженными данными, реализуют интерфейс IDataWorker.
При использовании такого подхода мы достигаем единообразной работы всех форм.
Так как тип DataNP является ссылочным, то при изменении данных в любой форме они автоматически изменятся во всей программе.
2.3.2 Описание структуры модулей расширения
Одно из требований к программе - это простая возможность расширения функциональности ПО, возможность добавления новых видов ИНС. Данное требование можно выполнить, разбив программу на модули и сделать подгрузку таких модулей динамической во время выполнения программы. Таким образом, мы добьемся независимости отдельных систем и как следствие возможность добавление и модификации искусственных нейронных сетей, без затрагивания основного кода.
Для того что бы иметь возможность динамически загружать и работать с разными видами ИНС, нужен единообразный механизм работы со всеми видами нейронных сетей. Этот механизм реализован через интерфейс INeuron. Сами модули реализованы в виде отдельных сборок, что в системе выглядит как файлы с расширением dll. Для того чтобы программа смогла распознать такую сборку, в сборке должен быть класс реализующий тот сам интерфейс INeuron.
Рисунок 15 - Схема взаимодействия модулей
В интерфейсе INeuron объявлены 3 метода, через которые происходит взаимодействие основной программы и модулей:
1. Training - основной метод для обучения. В этот метод передается обучающее, тестовое и контрольное множества. Метод вызывается в основном потоке программы, поэтому если обучение занимает продолжительное время, то задача вынесения обучения в отдельный поток и, как следствие, избежание «зависания» программы, ложится на разработчика данного модуля. Так же в данном методе должны вызываться все формы с настройкой внутренней структуры нейронной сети;
2. Exec - метод, который запускается при проведении эксперимента, т.е. тогда, когда мы работаем уже с обученной сетью;
3. Свойство Name - в данном свойстве содержится название данного модуля, имя отображается во всех меню, где происходит обращение к модулю.
Так же для разных типов нейронных сетей требуется различная подготовка данных, то в качестве модулей вынесены и так называемые обработчики. Обработчики назначаются на определенный набор данных и обрабатывают данные по своему алгоритму. Соответственно добавление нового алгоритма обработки данных не составляет труда, что хорошо сказывается на гибкости разрабатываемого программного обеспечения. Внедрение модулей работает аналогично вышеописанной схеме с единственным отличием, реализовывать нужно не интерфейс INeuron, а IHandler. Основные методы интерфейса:
1. Setting - метод вызова настройки нашего обработчика, в нем должна быть вызвана форма с настройками для предполагаемых изменений. Метод возвращает bool тип, в случае успешных настроек - true, в случае если пользователь отказался устанавливать настройки - false. Если в обработчике никакие настройки пользователя не нужны, то при реализации данного метода необходимо просто вернуть true;
2. Execute - метод запуска непосредственно самой обработки, в метод передается массив входов и массив выходов. Метод запускается в основном потоке, поэтому при реализации метода нужно быть осторожным с возможным зависанием интерфейса пользователя на время выполнения обработчика, в этом случае нужно в реализации запускать отдельный поток. Метод запускается после метода Setting и только при условии, что тот вернет true;
3. Cancel - метод отменяет обработку данных, реализуется если при удалинии обработчика с данных, необходимы обратные преобразования данных;
4. Своство Name - возвращает имя обработчика.
2.4 Основные алгоритмы и оптимизации
В программном обеспечении реализованы два вида ИНС. Первый вид - это сигмоидальный нейрон, для его обучения используется стандартный алгоритм «Обратного распространения ошибки». А второй вид ИНС - радиальные нейронные сети. В качестве функции активации использована глобальная кубическая функция.
2.4.1 Сигмоидальный нейрон. Концепция управления потоками
Как уже было сказано, обучение нейронной сети происходит с помощью «алгоритма обратного распространения ошибки». Основной алгоритм обучения представлен в первой главе, рассмотрим конкретную реализацию ИНС сети в программе. На рисунке 16 представлена структура нейронной сети.
Рисунок 16 - Структура нейронной сети
На самом деле модуль с ИНС персептрон, универсальный и возможна любая конфигурация внутренней структуры. Количество входов и выходов такой нейронной сети зависит от размерности входного и выходного массивов. Для рассматриваемой задачи, количество входных нейронов 12, а количество выходных нейронов 4. Число промежуточных слоев и нейронов на них настраивается пользователем, минимальное количество слоев 3: входной, скрытый, выходной. Программа предоставляет гибкие возможности по настройке ИНС, все настройки представлены на рисунке 17.
Рисунок 17 - Окно настройки персептрона
Внутреннюю структуру нейронной сети, возможно, настраивать. Настраивать можно количество нейронов на скрытом слое и количество скрытых слоев, это настраивается в верхней части окна посредством DataGridView, на котором число колонок отражает количество скрытых слоев, а число в колонке - число нейронов на этом слое.
Настройка функции активации происходит через коэффициент «Альфа». На рисунке 18 представлен график активационной функции, как видно, коэффициент влияет на крутизну функции, и на область допустимых значений, при -1 возможные входы от -5 до 5.
«Скорость обучения» влияет на величину изменения весовых коэффициентов на одной эпохе обучения:
(23)
где - коэффициент скорости обучения.
Иногда для придания процессу коррекции весов некоторой инерционности, сглаживающей резкие скачки при перемещении по поверхности целевой функции, дополняется значением изменения веса на предыдущей итерации:
(24)
где - коэффициент инерционности, t - номер текущей итерации.
Рисунок 18 - График функция активации
ИНС в программе представлена «рваным» трехмерным массивом double[][][] w, который представляет собой весовые коэфициенты связей между слоями.
Рисунок 19 - Представление нейронной сети в виде массива W
Обращение к массиву можно записать следующим образом w[q][a][b], где q - номер слоя, a - номер нейрона на предыдущем слое, b - номер нейрона на следующем слое (рисунок 19). Так как ИНС является полносвязанной, т.е. все нейроны одного слоя связаны со всеми нейронами последующего слоя, то подобная организация в виде трехмерного массива является наиболее логичной. На каждой эпохе обучения ИНС работает вначале в прямом направлении, а затем в обратном направлении происходит корректировка весовых коэффициентов. Для расчета выходов используется так же «рваный» массив double[][] inout, в который записывается выход каждого нейрона. Корректировка весовых коэфициентов происходит с помощью массива double[][][] dW, который имеет такую же структуру, как и w, но содержит в себе корректировки весовых коэффициентов, которые рассчитываются на каждой итерации обучения.
Обучение персептрона занимает достаточно продолжительное время, поэтому все обучение вынесено в отдельный поток и для управления этим потоком используется паттерн проектирование под названием «Состояние»:
Рисунок 20 - Фрагмент формы управления ходом обучения персептрона
Паттерн состояние применяется в задачах, когда нужно избавиться от многоуровневых связок if-else. Рассмотрим класс TCPConnection, с помощью которого представлено сетевое соединение. Объект этого класса может находиться в одном из нескольких состояний: Established (установлено), Listening (прослушивание), Closed (закрыто). Когда объект TCPConnection получает запросы от других объектов, то в зависимости от текущего состояния он отвечает по-разному. Например, ответ на запрос Open (открыть) зависит от того, находится ли соединение в состоянии Closed или Established. Паттерн состояние описывает, каким образом объект TCPConnection может вести себя по-разному, находясь в различных состояниях.
Основная идея этого паттерна заключается в том, чтобы ввести абстрактный класс TCPState для представления различных состояний соединения. Этот класс объявляет интерфейс, единый для всех классов, описывающих различные рабочие состояния. В этих подклассах TCPState реализуется поведение, специфичное для конкретного состояния. Например, в классах TCPEstablished и TCPClosed реализовано поведение, характерное для состояний Established и Closed соответственно.
Паттерн состояния используется в следующих случаях:
- когда поведение объекта зависит от его состояния и при этом должно изменяться во время выполнения;
- когда в коде операций встречаются состоящие из многих ветвей условные операторы, в которых выбор ветви зависит от состояния. Обычно в таком случае состояние представлено перечисляемыми константами. Часто одна и та же структура условного оператора повторяется в нескольких операциях.
Паттерн состояние предлагает поместить каждую ветвь в отдельный класс. Это позволяет трактовать состояние объекта как самостоятельный объект, который может изменяться независимо от других. В программе используется модель классов, изображенная на рисунке 21.
Рисунок 21 - Диаграмма классов ИНС персептрон
Управление всей работой нейронной сети персептрон осуществляется в классе Manager, в нем хранятся все настройки нейронной сети, в класс ParametrsNetwork, входные и выходные данные. По сути, данный класс является прослойкой между ИНС сетью и интерфейсом пользователя.
ParametrsNetwork - класс, которой содержит в себе все передаваемые параметры искусственной нейронной сети, такие как скорость обучения, структура нейронной сети, коэффициент инерционности, настройки активационной функции.
ManagerPerceptronState - абстрактный класс, от которого реализуются все состояния.
abstract class ManagerPerceptronState
{ abstract public ManagerPerceptronState Start(Perceptron network);
abstract public ManagerPerceptronState Stop(Perceptron network);
abstract public ManagerPerceptronState Paused(Perceptron network);
}
В данном классе объявлены три метода, вызов которых зависит от того в каком состоянии находится объект. Каждый метод возвращает объект состояния, в который переходит управляющий класс. Т.е. в данных методах помимо непосредственного вызова действия, так же определяется, какой метод будет вызван в следующий раз.
Ниже приведен пример вызова методов в классе Manager.
public void Start()
{
stateWork = stateWork.Start(network);
}
Из приведенного кода видно, что вызываемый метод возвращает новое состояние и при следующем вызове будет вызвать уже метод другого объекта.
В вызываемом классе, благодаря концепции полиморфизма, происходит возврат нового объекта состояния и непосредственно вызов метода, отвечающего за выполнения программы в текущем состоянии. Соответственно мы избавляемся ото всех дополнительных проверок, на то какой код следует выполнять в конкретной ситуации. Добавления новой реакции и нового перехода между состояниями осуществляется простым добавлением класса. Как следствие изменений в программу вносится минимально.
В таблице 1 продемонстрировано, какие есть состояния и возможные переходы между ними.
Таблица 1
Таблица переходов состояния.
Состояние\Метод |
Strart() |
Stop() |
Pause() |
|
StartState |
PauseState |
StopState |
PauseState |
|
StopState |
StartState |
StopState |
PauseState |
|
PauseState |
PauseState |
StopState |
StartState |
Результаты использования паттерна состояние:
· локализует зависящее от состояния поведение и делит его на части, соответствующие состояниям. Паттерн состояние помещает все поведение, ассоциированное с конкретным состоянием, в отдельный объект. Поскольку зависящий от состояния код целиком находится в одном из подклассов класса State, то добавлять новые состояния и переходы можно просто путем порождения новых подклассов;
· вместо этого можно было бы использовать данные члены для определения внутренних состояний, тогда операции объекта Context проверяли бы эти данные. Но в таком случае похожие условные операторы или операторы ветвления были бы разбросаны по всему коду класса Context. При этом добавление нового состояния потребовало бы изменения нескольких операций, что затруднило бы сопровождение.
Паттерн состояние позволяет решить эту проблему, но одновременно порождает другую, поскольку поведение для различных состояний оказывается распределенным между несколькими подклассами State. Это увеличивает число классов. Конечно, один класс компактнее, но если состояний много, то такое распределение эффективнее, так как в противном случае пришлось бы иметь дело с громоздкими условными операторами. Наличие громоздких условных операторов нежелательно, равно как и наличие длинных процедур. Они слишком монолитны, вот почему модификация и расширение кода становится проблемой. Паттерн состояние предлагает более удачный способ структурирования зависящего от состояния кода. Логика, описывающая переходы между состояниями, больше не заключена в монолитные операторы if или switch, а распределена между подклассами state. При инкапсуляции каждого перехода и действия в класс состояние становится полноценным объектом. Это улучшает структуру кода и проясняет его назначение:
· делает явными переходы между состояниями. Если объект определяет свое текущее состояние исключительно в терминах внутренних данных, то переходы между состояниями не имеют явного представления; они проявляются лишь как присваивания некоторым переменным. Ввод отдельных объектов для различных состояний делает переходы более явными. Кроме того, объекты State могут защитить контекст Context от рассогласования внутренних переменных, поскольку переходы с точки зрения контекста - это атомарные действия. Для осуществления перехода надо изменить значение только одной переменной (объектной переменной State в классе Context), а не нескольких;
· объекты состояния можно разделять. Если в объекте состояния State отсутствуют переменные экземпляра, то есть представляемое им состояние кодируется исключительно самим типом, то разные контексты могут разделять один и тот же объект state. Когда состояния разделяются, таким образом, они являются, по сути дела, приспособленцами (см. описание паттерна «приспособленец»), у которых нет внутреннего состояния, а есть только поведение [16].
2.4.2 Улучшение сходимости и ускорение обучения нейронной сети
«Встряхивание весов»
В качестве основного алгоритма обучения нейронной сети, на данном этапе выполнения диплома, выбран «Алгоритм обратного распространения ошибки», как наиболее простой в реализации. Суть метода, заключается в минимизации целевой функции:
, (25)
где p - кол-во обучающих выборок, M - количество выходов, y - реальный выход сети, d - требуемый выход сети.
Т.к. данная функция имеет множество локальных минимумов, то обучение нейронной сети может «провалится» в локальный минимум, для решения такой проблемы используется специальный метод «встряхивание весов». Суть данного метода в том, что если обучение приводит к локальному минимуму, т.е. за определенное количество эпох ошибка уменьшилась на маленькую величину или даже увеличилась, то необходимо «встряхнуть» веса - придать им небольшое случайное приращение. Таким образом, «встряхивание весов» позволяет выйти из локального минимума. Для реализации данного метода был написан специальный «следящий» класс - Manager. В функции данного класса входит слежение за классом Perceptron, который реализует нейронную сеть, если в процессе обучения нейронная сеть попадает в локальный минимум, то следящий класс «встряхивает» ее. Применения такого алгоритма оптимизирует сходимость нейронной сети.
Генетические алгоритмы
Генетический алгоритм - это эвристический метод поиска, применяемый для оптимизации и моделирования, основанный на биологической эволюции. В применение к нейронным сетям этот алгоритм может быть использован как альтернативный метод обучения.
Для реализации генетического алгоритма было разработано три класса:
1. class Individual - класс отдельной особи, содержит в себе цепочку генов, в обучении персептрона в качестве цепочки генов использовалась матрица весовых коэфициентов w.
2. class ListPopulation - класс содержит популяцию (список особей), основные методы класса:
a. Sort() - сортировка популяции, на основе приспособленности.
Приспособленность считается с помощью метода, который передается через делегат, таким образом получается универсальная струтура генетического алгоритма. В приминении к ИНС сетям, метод приспособленности считаестя как 1/E, где Е - это ошибка, которая вычисляется как квадрат разности между реальным и эксперементальным выходом сети;
b. GetIndividum() - получить особь, основываясь на методе «рулетки», более приспособленные особи будут возвращаться чаще, метод необходим для кроссовера;
3. class GA - основной класс, в котором реализуется «жизненный цикл» генетического алгоритма. Основные методы:
a. Mutation() - операция мутации;
b. Crossover() - операция скрещивания;
c. Selection() - операция селекции.
Рисунок 22 - Диаграмма классов для генетического алгоритма
Результаты
В ходе экспериментов было выяснено, что генетические алгоритмы в качестве основного обучающего алгоритма не подходят. Но возможно использование для начальной инициализации весов.
Был проведен следующий тест:
нейронная сеть (2 входа, 8 нейронов на промежуточном слое, 1 выход), в качестве обучающего множества функция xor.
Таблица 2.
Данные для обучения ИНС.
X1 |
X2 |
Y1 |
|
0 |
0 |
0 |
|
1 |
0 |
1 |
|
0 |
1 |
1 |
|
1 |
1 |
0 |
При обучении без оптимизации потребовалось 1000 эпох. Если применить ГА для выбора начальной весовой матрицы (достаточно всего 15 поколений и 30 особей), то число эпох сокращается на 300-400, т.е. почти в два раза.
2.4.2 Радиальные нейронные сети. Распараллеливание вычислений
Архитектура ИНС сети на базе РБФ похожа на архитектуру нейронной сети на базе персептрона рисунке 19. с одним существенным отличием, количество скрытых слоев всегда одинаково и равно 1. А количество нейронов на этом слое зависит от размерности обучающего множества, т.е. от количества обучающих примеров. Работа сети выглядит следующим образом:
(25)
где - оцененный выход, W - матрица весовых коэффициентов, а Ф
(26)
Матрица Ф может быть описана в виде (26). Первые две компоненты (26) представляют линейную проблему, а последняя компонента - это сеть РБФ. Используется техника нулевой ошибки обучения, которая предполагает, что набор центров C совпадает с X(1).
При обучении РБФ одно из основных действий это умножение матриц и размерность матриц в задаче достаточно велика, то одна из возможных оптимизаций - разбиение процессам умножения на несколько потоков. Данный подход дает достаточно большой прирост в производительности на многоядерных системах, т.к. позволяет задействовать в процессе работы оба ядра и распределить нагрузку между ними. Вся работа с матрицами вынесена на уровень работы с объектами типа Matrix. Класс предоставляет набор полей и методов, удобных для работы с матрицами, он имеет перегруженные операторы арифметических действий, что позволяет работать с объектами в привычной форме. Например:
Matrix a = GetRandomMatrix(razm, razm);
Matrix b = GetRandomMatrix(razm, razm);
c = a * b;
Умножение матриц через оператор «*» производится в один поток, для запуска двупоточного умножение используется отдельный метод, представленный ниже. Разделение на потоки происходит по принципу, половина матрицы умножается в одном потоке, вторая половина в другом, разделение идет по строчкам. У обоих потоков общий участок памяти, но гонки за ресурс не возникает, так как обращение идет к разным участкам общей памяти.
Для тестирования производительности работы написанных методов, была разработана тестовая программа, которая умножает случайно сгенерированные матрицы размерности 150 на 150. Так как ОС с вытесняющей многозадачностью, то в процесс эксперимента может «вмешаться» случайный системный процесс. Для исключения такого эффекта, матрицы умножаются не один раз, а 100 и высчитывается среднее время умножение матриц. Такой процесс запускается на однопоточном методе и на двух поточном методе [17].
Результаты эксперимента представлены на рисунках 23-26.
Аппаратное обеспечение для тестирования было следующим, в качестве одноядерной платформы был использован процессор AMD Athlon 64 3000+, более детальная информация представлена на рисунке 23.
Рисунок 23 - Детальная информация об одноядерном процессоре
Характеристики двуядерного процессора представлены на рисунке 24.
Рисунок 24 - Детальная информация о двуядерном процессоре
Как видно из результатов, прирост производительности при умножение матриц на двуядерном процессоре составляет практически 2-х кратную величину.
Рисунок 25 - Результат теста на двуядерном процессоре
Но на одноядерном процессоре прироста производительности не наблюдается, а наоборот наблюдается некоторая потеря производительности, которая очевидно связана с затратами на создание второго потока и переключении контекста между ними.
Рисунок 26 - Результат теста на одноядерном процессоре
Как видно из тестов производительность зависит не только от того сколько ядер у процессора, но и сама архитектура. Благодаря использованию платформы .net не нужно перекомпилировать приложения для разных аппаратных платформ. Оптимизация происходит на момент запуска приложения, а не на момент компиляции [18].
Исходя из проведенных экспериментов можно выявить минимальные аппаратные требования для работы приложения:
Минимальные аппаратные требования:
· процессор с тактовой частотой не ниже 1,5 ГГц (AMD Athlon 3000+);
· 256 Мб оперативной памяти;
· SVGA-видеокарта с объемом памяти не ниже 64 Мб, 256 цветов;
· наличие мыши, клавиатуры;
· наличие не менее 20 Мб дискового пространства.
2.5 Основные виды отчетов и графиков
Программное обеспечение позволяет производить эксперименты и рассчитывать параметры неоднородностей на различных данных. Для того что бы оценить качество и точность восстанавливаемых параметров. Пользователю необходим наглядный контроль, с помощью которого он сможет убедиться в точности восстановленных параметров. Для такой оценки используется два вида графиков.
Первый вид графика (рисунок 27) - это диаграмма, показывающая только один выход, но зато все примеры сразу. По данной диаграмме можно отследить насколько хорошо искусственная нейронная сеть смогла аппроксимировать тот или иной выход.
Рисунок 27 - Диаграмма результатов обучения
Второй тип графика (рисунок 28) - это три вида нашего образца и неоднородности в нем. На нем изображается только один тестовый пример. На данном графике можно оценить, как точно восстанавливаются параметры неоднородности в целом.
Рисунок 28 - Три вида результатов обучения
3. Результаты работы программы
3.1 Эксперименты с персептроном и выбор оптимальных коэффициентов
Попробуем поэкспериментировать с настройками ИНС на базе персептрона. Обучающее множество выберем следующим образом:
Рисунок 29 - Выбор обучающего множества
Пронормируем наши данные следующим образом:
Рисунок 30 - Нормировка данных
Попробуем обучить сеть со следующими настройками:
1 скрытый слой, 20 нейронов на скрытом слое, «альфа» функции активации -1, «скорость обучения» -1, коэффициент инерции 0.
Результат обучения:
Рисунок 31 - Результат обучения персептрона
Как видим с подобными настройками результат аппроксимации очень слабый.
Попробуем обучить сеть со следующими настройками:
1 скрытый слой, 32 нейронов на скрытом слое, «альфа» функции активации -1, «скорость обучения» -0.1, коэффициент инерции 0.
Как видно из диаграмм, предсказательные способности персептрона, на данной задаче очень слабые (рисунок 30).
Рисунок 32 - Результат обучения персептрона
Попробуем построить три вида нашего образца и посмотреть, как восстанавливаются параметры, в общем (рисунок 33):
Рисунок 33 - Результат обучения персептрона
Из графика видно, что персептрон способен определить местоположение неоднородности, но точность при этом низкая.
3.2 Сравнение результатов работы РБФ и Персептрона
На тех же данных попробуем обучить РБФ сеть. Как видно из рисунков 33 и 34 предсказательная способность сети РБФ на много выше чем у персептрона.
Рисунок 34 - Результат обучения РБФ
Рисунок 35 - Результат обучения РБФ
ЗАКЛЮЧЕНИЕ
В результате выполнения дипломной работы было написано приложение, которое позволяет восстанавливать параметры неоднородности по результатам электромагнитных измерений. Решение данной задачи выполняется с помощью ИНС, создавать, настраивать и обучать которую позволяет ПО.
Программное обеспечение разработано на языке C#.
Программа имеет модульную структуру. Для расширения и добавления новых видов искусственных нейронных сетей в программном обеспечении используется рефлексия типов.
Разработанное программное обеспечение может быть использовано при отработке технологии мониторинга внутренней структуры материалов при СВЧ обработке.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Brovko A.V. Waveguide Microwave Imaging: Neural Network Reconstruction of Functional 2-D Permirrivity Profiles / Alexander V. Brovko, Ethan K. Murphu // IEEE. Transaction on Microwave Theory and Techniques. - Vol.57., 2009 - №2.
2. Brovko A.V. Waveguide microwave imaging: Spherical inclusion in a dielectric sample / A.V. Brovko, E.K. Murphy, M. Rother, H.P. Schuchmann, and V.V. Yakovlev // IEEE Microw. Wireless Compon. Lett- vol. 18., №. 9, 2008 - С. 647-649
3. Свободная энциклопедия «Википедия» [Электронный ресурс] http://ru.wikipedia.org/Обрат-ная_задача (Дата обращения 20.04.2010).
4. Математические модели и обратные задачи (ВАТУЛЬЯН А.О. , 1998), МАТЕМАТИКА [Электронный ресурс]. http://www.pereplet.ru/obrazovanie/stsoros/673.html (Дата обращения 20.04.2010).
5. J. Feldman, Computing with Structured Neural Networks / J. Feldman, M.A. Fanty, and N.H. Goddard // Computer. - Vol. 21, No. 3, Mar.1988 -С. 91-103.
6. Комашинский В.И., Нейронные сети и их применение в системах управления и связи. / В.И. Комашинский, Д.А. Смирнов. - М.: Горячая линия - Телеком, 2003. - 94 с.
7. МакКаллок У., Питтс В. Логическое исчисление идей, относящихся к неройной активности // Сб. “Автоматы”, пер. с англ.: Изд-во инострлит, 1959
8. John Hertz. Introduction to the Theory of Neural Computation . / John Hertz, Anders Krogh, Richard G. Palmer - Warszawa: WNT, 1995.
9. Оссовский С., Нейронные сети для обработки информации / Пер. с польского И.Д. Рудинского. - М.: Финансы и статистика, 2004.-344 с.
10. Barron A.R. Approximation and estimation bounds for artificial neural networks. / Barron A.R // Machine learning. - Vol. 14, 1994. - C. 115-133.
11. Круглов В.В Нечеткая логика и искусственные нейронные сети. / Круглов В.В - Физматлит, 2001.
12. Haykin S. Neural networks, a comprehensive foundation. / Haykin S. N.Y.: Macmillan - College Publishing Company, 1994.
13. Cover T.M. Geometrical and statistical properties of systems of linear inequalities with applications in pattern recognition. / Cover T.M. // IEEE Transactions on Electronic Computers. -, vol EC-14, 1965, - C.326-334.
14. Вороновский Г.К. Генетические алгоритмы, искусственные нейронные сети и проблемы виртуальной реальности / Г.К. Вороновский, К.В, Махотило, С.Н. Петрашев, С.А. Сергеев. - Х.: ОСНОВА, 1997. - 112 с.
15. Шилд, Г. Полный справочник по С#. / Пер. с англ. - М.: Изд. Вильямс,2004
16. Гамма Э. Приемы объектно-ориентированного проектирования. Паттерны проектирования. / Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж - СРб.: Питер, 2008. - 336 с.
17. Троелсен Э. C# и платформа .NET. Библиотека программиста. - СПб.: Питер, 2007. - 796 с.
18. Петсольд Ч. Программирование для Microsoft Windows на C#./ Пер. с англ. - М.: Изд. Русская редакция,2002
ПРИЛОЖЕНИЕ 1
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
НАЗНАЧЕНИЕ ПРОГРАММЫ
Программное обеспечение предназначено для реконструкции параметров неоднородности в материале по результатам электромагнитных измерений.
УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ
Для работы с данным приложением необходимо, чтобы система удовлетворяла следующим требованиям:
· процессор с тактовой частотой не ниже 1,5 ГГц (AMD Athlon 3000+);
· 256 Мб оперативной памяти;
· SVGA-видеокарта с объемом памяти не ниже 64 Мб, 256 цветов;
· наличие мыши, клавиатуры;
· наличие не менее 20 Мб дискового пространства.
Также для работы с данным приложением необходимо:
· Операционная система Windows 2000 или Windows XP;
· Microsoft .NET Framework 2.0 и выше.
ВЫПОЛНЕНИЕ ПРОГРАММЫ
Главное окно программы представляет собой MDI форму, внутри которой открываются все остальные формы и диалоговые окна. Главная форма представлена на рисунке 36.
Рисунок 36 - Главная форма программы
Доступ к внутренним формам осуществляется либо через панель инструментов, представленное на рисунке 37, либо через меню. Возможны следующие действия, перечисление идет слева на право:
· загрузка данных;
· сохранение данных;
· просмотр данных;
· обработка данных;
· обучение;
· эксперименты;
· построение 3-х видов;
· построение графиков.
Рисунок 37 - Панель инструментов
Загрузка данных
Загрузка данных осуществляется через форму, изображенную на рисунке 38. Для загрузки необходимо выбрать файл с входными данными и файл с выходными данными. Так же возможно выбрать тип «Набор данных», для правильной работы нейронных сетей необходимы все три набора данных:
· тренировочные - это данные, на которых происходит обучение из всех наборов, этот наиболее большой, т.е. для обучения необходимо большое множество данных;
· тестовые - этот набор обычно используется при обучении персептрона, сам набор непосредственно не учувствует в обучении, но на этом наборе считается ошибка при каждой итерации. Делается это для того, чтобы ИНС не переобучилась на «тренировочных» данных;
· контрольные - этот набор данных используется уже для контроля обученности сети, и на нем проверяется работа ИНС уже после всего обучения.
Данные наборы можно загрузить последовательно, т.е. вначале загрузить из одних файлов обучающее множество, затем тестовое из других, а потом контрольное. А можно установить опцию «Создать все наборы» и тогда из одних входных и выходных файлов будут созданы все наборы.
Рисунок 38 - Форма загрузки данных
При выборе этой опции, и после нажатия кнопки «Ок», будет предложено выбрать количество примеров, которые будут отведены под те или иные данные. Данная форма представлена на рисунке 39.
Рисунок 39 - Распределение данных по наборам
В верхней части окна выводится общее количество данных, и представлены поля ввода количества данных трех наборов. Соответственно суммарное количество данных в полях не может быть больше «Общего количества данных». Программа автоматически перераспределит данные при превышении общего количества.
После загрузки данных открывается форма с загруженными данными. Эта форма представлена на рисунке 40. Она разбита на вкладки, верхний ряд вкладок отвечает за наборы данных, а второй ряд отвечает за размещения данных внутри наборов. На вкладке «Обработчик» отображаются обработчики, которые назначены на этот набор данных, они назначаются на весь, т.е. на входы и выходы, набор данных. Назначить можно либо в этой вкладке, тогда обработчик будет назначен только этим данным или воспользоваться формой (рисунок 41) «Обработка данных» установив там опцию «Применить ко всем наборам», тогда обработчик будет назначен на все наборы.
Рисунок 40 - Форма представления данных
Рисунок 41 - Форма по выбору обработчика данных
Так как ИНС реализованы через плагины, то и формы обучения выглядят по-разному.
Обучение персептрона
Внутреннюю структуру нейронной сети можно настраивать. Настраивать можно количество нейронов на скрытом слое и количество скрытых слоев, это настраивается в верхней части окна посредством таблицы, на которой число колонок отражает количество скрытых слоев, а число в колонке - число нейронов на этом слое
Прочие настройки ИНС представлены в средней части экрана.
В нижней части экрана отображается информация о ходе обучения нейронной сети.
Рисунок 42 - Форма обучении персептрона
РБФ Сеть
Обучение сети РБФ производится в соответствующей форме, представленной на рисунке 43. Настройки обучения не предусмотрены, обучение начинается после нажатия OK. В верхней части окна, будет выведена информация о процессе обучения.
Рисунок 43 - Форма обучения РБФ сети
Эксперименты
После загрузки данных и обучения ИНС возможны проведения экспериментов. Форма экспериментов (рисунок 44) разбита на три части
· выбор данных для экспериментов;
· выбор ИНС сети;
· просмотр результатов.
В верхней части экрана, можно просмотреть данные.
Рисунок 44 - Форма Экспериментов
Результаты экспериментов можно посмотреть на двух графиках:
Первый вид графика - это диаграмма, показывающая только один выход, но зато все примеры сразу. По данной диаграмме можно отследить насколько хорошо искусственная нейронная сеть смогла аппроксимировать тот или иной выход (рисунок 45).
Рисунок 45 - Диаграмма результатов обучения
Второй тип графика - это три вида нашего образца и неоднородности в нем. На нем изображается только один тестовый пример. На данном графике можно оценить, как точно восстанавливаются параметры неоднородности в целом (рисунок 46).
Рисунок 46 - Три вида результатов обучения
Размещено на Allbest.ru
Подобные документы
Характеристика программного обеспечения персонального компьютера, которое делиться на три класса: системное, прикладное ПО, инструментарий программирования. Особенности работы компьютерной сети - системы связи компьютеров или компьютерного оборудования.
контрольная работа [22,9 K], добавлен 10.06.2010Разработка программного обеспечения, которое позволит автоматизировать работу менеджера с клиентами и поставщиками. Определение требований, тестирование, описание программы. Руководство системного программиста. Создание СУБД в DELPHI для менеджера.
дипломная работа [775,0 K], добавлен 16.06.2014Сетевая система контроля знаний студентов на основе объектно-ориентированного подхода. Выбор программно-технических средств для реализации проекта. Алгоритмическое и программное обеспечение, интерфейс пользователя. Разработка элементов базы данных.
дипломная работа [1,3 M], добавлен 04.02.2013Анализ локально-вычислительной сети компании. Выбор общего программного обеспечения, обеспечения для инженерного отдела, бухгалтерии, сервера. Состав программного обеспечения вычислительной системы и его конфигурация. Сетевые операционные системы.
курсовая работа [405,4 K], добавлен 08.02.2016Принцип построения и описание прибора. Назначение и область применения спектрометра космических излучений на алмазных детекторах. Аппроксимация степенным многочленом. Математическая модель нейронной сети. Описание интерфейса программного комплекса.
дипломная работа [591,1 K], добавлен 03.09.2017Программное обеспечение для обслуживания автосалона с графическим интерфейсом, возможностью хранения файлов на диске и поиском. Программное проектирование. Документирование программного обеспечения, его тестирование. Разработка руководства пользователя.
курсовая работа [1,7 M], добавлен 06.01.2013Математическая модель нейронной сети. Однослойный и многослойный персептрон, рекуррентные сети. Обучение нейронных сетей с учителем и без него. Алгоритм обратного распространения ошибки. Подготовка данных, схема системы сети с динамическим объектом.
дипломная работа [2,6 M], добавлен 23.09.2013Классификация программного обеспечения, его особенности, назначение. Программное обеспечение для работы с текстом, изображением, прикладное, офисное, для работы в Интернете. Системы программирования, специфика программного обеспечения, что такое вирусы.
презентация [1,2 M], добавлен 25.02.2010Цели и задачи программной инженерии. Понятие программного обеспечения. Шесть принципов эффективного использования программного обеспечения. Виды программного обеспечения: общесистемное, сетевое и прикладное. Принципы построения программного обеспечения.
курсовая работа [30,4 K], добавлен 29.06.2010Математическая модель искусственной нейронной сети. Структура многослойного персептрона. Обучение без учителя, методом соревнования. Правило коррекции по ошибке. Метод Хэбба. Генетический алгоритм. Применение нейронных сетей для синтеза регуляторов.
дипломная работа [1,5 M], добавлен 17.09.2013