Диапазон ЛПЭ, МэВ/(мг/см2)
|
от 0,01 до 1
|
от 1 до 3
|
от 3 до 10
|
от 10 до 30
|
от 30 до 80
|
Номер диапазона спектра
|
Т-1
|
Т-2
|
Т-3
|
Т-4
|
Т-5
|
Очевидно, что необходимо:
· разделение зарегистрированных частиц
по видам (электроны, протоны, ТЗЧ);
· определение значений потоков частиц
КИ в диапазонах энергий в соответствии с таблицами 2, 3, 4, исходя из
информации о потоках, получаемой в виде таблицы 1.
Для решения первой задачи можно использовать
прямой подход, заключающийся в формировании системы разностных алгебраических
уравнений, позволяющей по показателям сумматоров получить раздельные значения
зарегистрированных частиц по видам в указанных диапазонах. Например, по
показаниям счетчиков С1-5, С2-5, С3-5, С4-5, С5-1 …. С5-4, определить
количество частиц, относящихся к ТЗЧ. Эти данные фиксируются, а, в дальнейшем,
вычитаются из общих показателей счетчиков для того, чтобы определить оставшееся
количество электронов и протонов и т.д.
Вторая задача частично охватывает первую. Её
решение можно трактовать как построение модели явления, порождающего исходные
данные (выходная информация спектрометра) и, на ее основе, преобразование
дискретных величин в непрерывные, с образованием непрерывной области точек,
принадлежащих порождающему источнику, но не вошедших в интервал наблюдения.
Фактически - это задача аппроксимации многомерной функции в указанном диапазоне
измеряемых параметров. Её можно решать с помощью различных методов, например, с
помощью полиномиальной аппроксимации [6], c помощью сплайн аппроксимации [7] и
др. Но при этом необходимо учитывать вероятность случайных «всплесков»
электронной и/или протонной активности, что, скорее всего, приведет либо к
большой вычислительной погрешности, либо к большой размерности и вычислительной
сложности.
При таких особенностях эту задачу наиболее
эффективно решать на базе теории искусственных нейронных сетей [8].
Использование нейросетевой технологии - это достаточно
адекватное отображение модели исследуемого процесса или явления, возможность
нахождения закономерностей в большом потоке противоречивой информации,
сохранение связей между важными факторами, но и, что не менее важно, высокую
скорость обработки данных и малую ресурсоемкость вычислительного оборудования.
Дополнительным преимуществом этого подхода в настоящем исследовании является
возможность решения обеих представленных задач в едином вычислительном базисе.
1.6 Постановка задачи. Выводу к разделу
Для восстановления спектров космического
излучения в окружающей среде ТК, требуется построить и обучить нейросетевую
модель (НМ), которая по известному входному сигналу формировала бы известный
выходной сигнал, а также проверить адекватность построенной НМ на данных, на
которых она не обучалась.
Формализация этой постановки выглядит следующим
образом:
входной сигнал - это значения параметров
спектрометра; задается вектором N=24;
выходной сигнал - это значения восстановленных
параметров спектра космического излучения; задается вектором K=21;
выходной сигнал включает 8 значений параметров
восстановленного спектра электронного излучения, 8 значений параметров
восстановленного спектра протонного излучения и 8 значений параметров
восстановленного спектра ТЗЧ.
Также имеется соответствие между векторами
входного и выходного сигнала - обучающая выборка (табл. 2). Это таблица
примеров «вход-выход» размерностью P, на которых НМ будет обучаться и
тестироваться.
Таким образом, постановку задачи можно
отобразить в виде схемы, представленной на рис. 7.
Рис.7. Схематичная постановка задачи
Блоки начальной и завершающей обработки
информации используются для приведения входного и выходного сигнала к единому
масштабу и преобразования выходного сигнала НМ в реальные числовые параметры.
2. Решение задачи аппроксимации с помощью
искусственного интеллекта
Аппроксимация функции - это способ замены трудно
вычислимой функции более простой. Многие процессы в разных областях науки
описываются сложными функциями, вычисление значений которых даже на современных
ЭВМ вызывает большие проблемы.
Введем обозначения функций:
- исходная функция, которую
необходимо аппроксимировать более простой функцией. Эта функция может быть
задана в аналитическом виде или в табличном. В большинстве случаев при
проведении экспериментов имеется набор пар значений .
- более простая функция, которая
называется аппроксимирующей.
2.1 Аппроксимация степенным многочленом
Будем искать аппроксимирующую функцию в виде:
Коэффициенты можно
определить из условия Лагранжа [15]:
Таким образом, получается система
линейных уравнений с n+1 неизвестных.
Систему уравнений (5) можно записать
в матричном виде:
где:
С - вектор, состоящий из неизвестных
коэффициентов ,
Y - вектор,
состоящий из известных табличных значений функции ,
А - матрица, имеющая вид:
Система линейных уравнений имеет
единственное решение, когда определитель матрицы (7) не равен нулю.
Решение системы в матричном виде:
2.2 Сплайн-интерполяция
При использовании интерполяционных формул
Ньютона, Лагранжа для подбора функции аппроксимирующей на заданном отрезке,
часто оказывается большая погрешность полученной функции. Более простой задачей
является подбор функции на малом отрезке, поэтому задачу аппроксимации функции
на заданном отрезке [a,
b] можно свести к
более простым задачам вычисления аппроксимирующей функции, разбив заданный
интервал на частичные отрезки. [16]
Сплайн - это многочлен степени n, который
вычисляется на каждом частичном отрезке. Наиболее часто используют в виде
полинома многочлены 3-ей степени, которые называются кубическими сплайнами. На
интервале выражение
сплайна можно задать следующим образом [7]:
где
- коэффициенты сплайна,
- номер сплайна.
Так как отрезок разбивается на n частичных
отрезков, каждый из которых задан своим сплайном с 4 неизвестными
коэффициентами, то необходимо получить 4n уравнений
для определения неизвестных коэффициентов.
Условие сшивания соседних сплайнов.
Сплайн ,
построенный на отрезке , должен
обладать следующими свойствами [7]:
) Значение сплайна на концах
отрезка должно
совпадать со значением аппроксимируемой функции:
2)
Первая и вторая производные сплайна должны быть непрерывны на концах отрезка:
) Таким образом, получается с
помощью описанных условий можно составить 4n-2 уравнений, оставшиеся два
уравнения можно получить из условия нулевой кривизны граничных точек и :
Из уравнений (10), (11), (12)
получается полная система из 4n линейных уравнений.
2.3 Аппроксимация функций полиномом Чебышева.
Полиномы Чебышева первого рода представляют
ортогональную систему функций и описываются выражением (12) [18]:
Первые элементы последовательности
полиномов Чебышева:
Многочлены Чебышева имеют
рекуррентную связь:
спектрометр космический нейронный
программный
спектрометр космический
нейронный программный
Выражение имеет n корней на
отрезке [-1;1]. Корни полинома Чебышева описываются выражением [19]:
Для аппроксимации, заданной функций
подбирается выражение вида:
Где - коэффициенты, которые вычисляются
выражением (17):
Данный метод поиска,
аппроксимирующего выражения полиномами Чебышева отличается от предыдущих тем,
что абсолютная ошибка распределена равномерно по всему интервалу [-1;1]. В
данном методе сочетаются тригонометрия и алгебраические степенные полиномы.
2.4 Нейронные сети. Выводы к разделу
Нейронные сети значительно отличаются от
предыдущих способов аппроксимации функции. Они получили наибольшую популярность
в науке, благодаря попыткам ученых смоделировать работу головного мозга. Было
доказано Колмогоровым, что для аппроксимации любой непрерывной функции
достаточно двухслойной нейронной сети с нелинейными функциями активации,
которую можно обучить для обеспечения любой заданной точности [20]. Предыдущие
методы не обладают подобным свойством, поэтому выбирая их, экспериментатор
заранее не знает погрешность аппроксимирующей функции и не может ее задать.
3. Предварительная обработка данных
Так как входные данных имеют разный масштаб, то
сеть будет неравномерно обучаться, если данные не привести к одному масштабу. В
многослойных персептронах в качестве функций активации обычно используют
сигмоидальную функцию и гиперболический тангенс, область значений которых лежит
в интервалах [0;1] и [-1;1]. Такая сеть не может выдавать данные за пределами
этих диапазонов, поэтому если выходные данные подавать в сеть в их начальном
виде без обработки, в таком случае сеть никогда не сможет их выдать и будет
пытаться насыщать нейроны до бесконечности. В конечном итоге наступит паралич
сети из-за того, что все нейроны попадают в насыщенную область активационной
функции. Так как в алгоритме обратного распространения ошибки веса изменяются
на величину пропорциональную производной активационной функции, а в насыщенной
области она практически равна нулю, то обучение практически остановится.
Таким образом, нормировка данных - это очень
важная процедура, которой не стоит пренебрегать при создании и обучении
нейронной сети.
.1 Линейное сжатие данных
Чтобы нормировать данные в диапазоне [0;1] можно
воспользоваться формулой линейного сжатия
где: N - число элементов
выборки;
-
преобразованный i элемент выборки.
Но такой способ имеет свои недостатки. Он хорошо
работает, когда в выборке данные равномерно распределены. В противном случае,
когда в выборке имеются редкие выбросы, именно они будут приниматься во
внимание, так как после линейного сжатия вся выборка окажется вблизи нуля. А
это плохо скажется на обучении нейронной сети.
.2 Статистические характеристики
Данный метод устраняет недостатки линейного
сжатия, основанного на экстремумах выборки. Этот метод использует для своей
работы математическое ожидания и дисперсию.
где: i- номер
элемента выборки.
Но после такой обработки неизвестен диапазон
значений данных, поэтому можно воспользоваться функциями активациями f,
такими как гиперболический тангенс и сигмоидальная функция.
где f - функция
активации
3.3 Анализ главных компонент
При обучении нейронной сети необходимо собрать
большую обучающуюся выборку. И чем больше размерность параметров обучающей
выборки, тем больше и данных требуется. Не всегда легко бывает быстро собрать
нужное количество данных, поэтому требуется метод, который бы позволил
определить параметры входного вектора, которые несут мало информации и могут
быть исключены из обучения. Метод главных компонент [21] позволяет уменьшить
число параметров входного вектора с небольшой потерей информативности.
Перед работой с данными их необходимо привести к
единому масштабу. Метод главных компонент требует, чтобы данные обладали
нулевым математическим ожиданием, такая операция называется центрированием
данных, и необходимо, чтобы среднеквадратическая ошибка набора данных была
единичная, такая операция называется нормированием.
где: j - индекс,
обозначающий элемент в входном векторе.
i - индекс,
обозначает номер входного вектора в обучающейся выборке.
После обработки данных вычисляется
матрица ковариаций.
где: n - число
наблюдений.
m -
количество элементов во входном векторе.
После получения матрицы ковариации
задача сводится к нахождению собственных значений и собственных векторов данной
матрицы. Собственные значения находим по следующей формуле:
где: Е - единичная матрица.
После вычисления всех собственных
значений вычисляется вклад каждого параметра входного вектора в обучающейся
выборке.
Введем следующие обозначения.
Параметром k будем
обозначать сумму собственных значений.
Тогда вклад каждого параметра и
вклад m параметров
входного вектора можно оценить следующими выражениями:
После оценивания принимается
решение, сколько отбросить параметров входного вектора. Обычно считается
достаточной информативностью данных величина порядка 80%.
1. Для каждого собственного значения,
которое было принято оставить, вычисляется собственный вектор w
по формуле [23]:
После вычисления собственных
векторов выполняют скалярное произведение входного вектора на собственные
вектора и получают новый набор входных параметров.
.
Математический аппарат нейронных сетей
Нейронные сети - это модель биологических
нейронных сетей в живых организмах. Нейронные сети появились из-за попыток
смоделировать процессы, происходящие в мозге. Мозг человека содержит большое
количество нейронов биологических, которые соединены между собой синаптическими
связями. Как работает биологическая нейронная сеть до сих пор до конца
неизвестно, но были изучены базовые особенности отдельных элементов сети -
биологических нейронов.
.1 Дендриты, синапсы и аксоны
Нейроны в головном мозге - это нервные клетки.
Нервная клетка имеет неограниченное число синапсов, по которым на нее поступают
нервные импульсы, а также один аксон, по которому сигнал передается на другой
нейрон. Поэтому нервную клетку (см. рис.8.) можно представить, как черный ящик,
с несколькими входами и одним выходом.
Рис.8. Нервная клетка
Нейронная сеть состоит из нейронов, которые
между собой связаны. Нейроны объединяются в слои. Каждая связь нейрона имеет
вес - числовое значение. Нейронные сети способны обучаться. Задача обучения
состоит в подборе весов для нейронных связей.
.2 Модель нейрона
В общем случае нейрон (см. рис.9.) имеет n
связей-синапсов. На вход нейрона поступает n-мерный
вектор x. Модель нейрона
можно рассматривать как набор из n
входных сигналов; n синапсов,
на которые поступают соответствующие сигналы; ядро нейрона, которое является
основным вычислительным центром модели и аксона. [24] После обработки сигнал
выходит из нейрона и попадает на входные рецепторы других нейронов. Канал, по
которому сигнал выходит из нейрона, называется аксоном.
Рис.9. Схема нейрона.
В ядре нейрона выполняется скалярное умножение
вектора x на вектор весов w.
n - количество входов нейронаi
- значение i-го входа нейронаi - вес i-ой связи нейрона
После вычисления результата в ядре
нейрона формируется выход в соответствии с выражением:
В f-это
активационная функция нейрона.
.2 Функции активации
в нейронных сетях
Существует множество разных видов активационных
функций, но наиболее распространены такие функции как: пороговая,
кусочно-линейная, сигмоидальная и гиперболический тангенс.
Функция сравнивает входное значение нейрона с
предельным значением. В случае, когда входное значение превышает пороговое,
функция возвращает единицу, в противном случае возвращается ноль (см. рис.10.).
Функция задана (27). На интервале [-a,
a] функция работает
как линейная, а за его пределами как пороговая (см. рис.11). При увеличении
коэффициента a функция
вырождается в пороговую.
Рис.10. Пороговая функция.
Рис.11. Кусочно-линейная функция при
a=5.
Эта функция наиболее часто
применяется при разработке нейронных сетей и имеет вид (33). Ее основные
преимущества перед другими в том, что она на всей числовой оси дифференцируема
и непрерывна. Так как в алгоритме обучения нейронной сети вычисляется
производная активационной функции, то дифференцируемость функции важна при
проектировании НС.
Сигмоидальная функция, имеет
параметр а, позволяющий регулировать её крутизну. При больших значениях
параметра, а функция вырождается в пороговую. Область значений - это интервал
от 0 до 1. Функция (см. рис.12.) усиливает слабые входы и практически не
усиливает сильные входы.
Рис.12.Сигмоидальная функция.
Часто вместо сигмоидальной функции
используют гиперболический тангенс (29).
Функция (см. рис.13.) нечетная,
дифференцируема и непрерывна на всей оси. Область значений принадлежит
интервалу [-1;1]. Параметр А определяет крутизну функции.
Рис.13. Гиперболический тангенс.
4.3 Вычисление выхода нейронной сети
Сети, сотоящие из нескольких слоев нейронов,
называют многослойными(см. рис.14). Входной сигнал распространяется по сети от
слоя к слою. Последний слой нейронной сети называется выходным слоем, остальные
слои называются скрытыми слоями.
Рис.14.Пример многослойной сети.
Входной вектор Х поступает на нейроны первого
слоя, каждый нейрон вычисляет выходное значение, результат, полученный на
выходах нейронов первого слоя, передается на вход нейроном следующего слоя.
Процесс продолжается до последнего слоя. Результат на последнем слое нейронной
сети - это ответ сети на входной вектор.
Задача нейронной сети давать на выходе значение,
соответствующее поданному входному вектору. Обучение нейронной сети позволяет
достичь этого результата.
.4 Алгоритм Левенберга-Марквардта
Нейронные сети делятся по типу обучения: на
сети, которые обучаются с учителем и сети, обучаемые без учителя. Для сетей,
обучающихся с учителем, подготавливается выборка данных, в которой каждому
входному набору данных соответствует желаемый выходной набор данных. Сети
подается входной вектор из выборки, сеть рассчитывает выход и применяет
алгоритм обучения, который изменяет веса синаптических связей нейронов так,
чтобы приблизить выходное значение сети к желаемому, а также снизить ошибку
сети. Обучение сети продолжается пока ошибка не станет достаточно маленькой на
всей обучающей выборке.
Алгоритм Левенберга-Марквардта
применяется для оптимизации параметров нелинейных регрессионных моделей
<#"897376.files/image052.gif"> (35)
Метод работает итерационно:
выполняется итерационное приближение заданных случайных параметров к
глобальному минимуму. Алгоритм объединяет в своей работе метод Ньютона и метод
наискорейшего спуска. Метод Ньютона выдает ускоренную сходимость в окрестности
минимума, а алгоритм наискорейшего спуска гарантирует стабильность в работе.
Исходные данные:
В задаче представлены следующие
параметры:
Выборка данных:
Функциональная связь:
Необходимо определить вектор весовых
коэффициентов w так, чтобы функция ошибки достигала глобального минимума:
(36)
На начальном этапе вектор весовых
коэффициентов инициализируется случайным образом в диапазоне чисел [0;1].
После инициализации на каждой
итерации вычисляется изменение вектора весовых коэффициентов - . Для оценки
этого изменения вычисляется выражение:
Где J- якобиан функции в точке w.
Выражение Якобиана J для k-ого
нейрона сети:
(38)
где K - количество нейронов в
выходном слое;- число примеров в обучающейся выборке.- число связей в каждом
нейроне выходного слоя.
Для нахождения последующего
приращения нужно
приравнять к нулю вектор частных производных выражения (36).
Преобразуем выражение (36) перед дифференцированием.
В результате получаем выражение для
расчёта изменений вектора весовых коэффициентов.
Так как матрицы может быть
вырожденной, то Марквардт ввел параметр регуляризации . Тогда с
учетом всех модификаций получаем конечное выражение по компонентам вектора
изменения весовых коэффициентов.
где размерности: - [P * H1],
- [H1 * P],
- [H1 *
H1];
следовательно, размерность единичной
матрицы I - [H1 * H1];
- коэффициент регуляризации.
Выбирается экспериментально на каждой итерации;
- желаемый выход сети на k-ом
нейроне выходного слоя по i-ому примеру;
- полученный ответ сети на k-ом
нейроне выходного слоя по i-ому примеру.
Выражения для изменения весовых
коэффициентов рассчитывались для каждого примера из обучающей выборки следующим
образом:
По достижению критерия ошибки
заданного минимума алгоритм заканчивает работу.
.5 Обучение ИНС методом Левенберга-Марквардта
Обучение НМ - это процедура, не
относящая к функционированию прибора. Главное её назначение - определить
параметры нейросетевой модели, такие как количество слоев, количество нейронов
в слоях, значения весовых коэффициентов , и др. Поэтому первоначально
необходимо задать прототип НМ (количество слоев, количество нейронов в слоях) и
после этого приступать к настройке весовых коэффициентов.
Выбор прототипа НМ определен, с
одной стороны, требованиями качества выхода (относительная погрешность
формируемых показаний прибора не должна превышать 10%), с другой стороны -
простотой реализации (чем меньше слоев и нейронов в слоях, тем проще
реализация, проще обучение и выше надежность). Так как определение прототипа НМ
относится к этапу экспериментальных исследований, то эта процедура, а также
процедура обучения НМ и проверки на адекватность НМ проводится для каждого
экспериментального образца НМ. Но для обучения НМ необходимо определиться с
алгоритмом минимизации функционала ошибки НМ (4).
Для решения данной задачи можно
использовать градиентные алгоритмы, стохастические алгоритмы, генетические
алгоритмы и др. [9].
В проведенных исследованиях
использовался градиентный алгоритм наискорейшего спуска совместно с алгоритмом
минимизации критерия ошибки по методу Левенберга-Марквардта. [10,11].
Начальные значения весовых
коэффициентов определялись последовательностью действий [11]:
инициализация значений и случайными
равномерно распределенными числами из интервала [-0.5,+0.5];
вычисление норм и ;
расчет коэффициентов масштабирования
, где n -
количество нейронов текущего слоя, m - количество нейронов последующего слоя;
выбор смещений и из
интервала ;
формирование начальных значений
весов: , .
5. Решение задачи
.1 Восстановление энергетических спектров
сигналов космического излучения
Среди большого разнообразия современных
нейросетевых парадигм [9], наиболее подходящими для решения данной задачи
являются парадигмы многослойного персептрона и базисно-радиальной сети [10]. На
первом этапе исследований предлагается решать задачу на базе персептрона с
одним скрытым слоем. Выбор этой нейросетевой парадигмы это следствием теоремы
Колмогорова [11], утверждающего, что с помощью персептрона с одним скрытым
слоем можно аппроксимировать любую сколь угодно сложную функцию с любой наперед
заданной точностью. Структура персептрона с одним скрытым слоем представлена на
рис. 15.
Рис.15. Структура персептрона с одним скрытым
слоем
В качестве данных используются
входные параметры спектрометра. Весовым коэффициентам
,
,
где H1 - количество нейронов в скрытом слое, K -
количество нейронов в выходном слое
первоначально присваиваются случайные значения
из интервала (-0.5, +0.5).
Величины
,
,
являются значениями выходов нейронов со скрытого
и выходного слоев соответственно.
- нелинейное
преобразование сигнала сети (функция активации).
Тогда с учетом введенных обозначений:
выход с j - го нейрона скрытого слоя (j=1,
2, …, H1) будет равен
(39)
а выход с j - го нейрона выходного слоя (j=1,2,…,K)
(40)
Если через обозначить
желаемый выход сети (желаемый вектор ),
то ошибку системы для заданного входного сигнала (рассогласование реального и
желаемого выходного сигнала) можно записать в следующем виде:
=(41)
Используя в качестве функционала оптимизации
критерий минимума среднеквадратической функции ошибки:
,(42)
где P- количество обучающих примеров и в
качестве функции активации сигмоидальную функцию вида:
,(43)
где параметры и
следует
выбирать экспериментально, а производная этой функции равна: ,
можно приступать к этапу обучения нейронной сети.
Обучение нейронной сети заключается в нахождении
значений весовых коэффициентов , при которых
величина функционала ошибки НМ (4) не будет превышать значения -
заданной точности () для всех
предъявленных примеров.
После обучения, НМ на любой входной сигнал будет
формировать выходной сигнал в соответствии с
выражением (2).
5.2 Обучение НМ
Обучение НМ - это процедура, не
относящая к функционированию прибора. Главное её назначение - определить
параметры нейросетевой модели, такие как количество слоев, количество нейронов
в слоях и K,
значения весовых коэффициентов , и др. Поэтому первоначально
необходимо задать прототип НМ (количество слоев, количество нейронов в слоях) и
после этого приступать к настройке весовых коэффициентов.
Выбор прототипа НМ, с одной стороны,
требованиями качества выхода (относительная погрешность показаний прибора не
должна превышать 10%), с другой стороны - простотой реализации (чем меньше
слоев и нейронов в слоях, тем проще реализация, проще обучение и выше
надежность). Так как определение прототипа НМ относится к этапу экспериментальных
исследований, то эта процедура, а также процедура обучения НМ и проверки на
адекватность НМ будет проводится для каждого экспериментального образца НМ. Но
для обучения НМ необходимо определиться с алгоритмом минимизации функционала
ошибки НМ (4).
Для решения данной задачи можно
использовать градиентные алгоритмы, стохастические алгоритмы, генетические
алгоритмы и др. [12].
В проведенных исследованиях использовался
градиентный алгоритм наискорейшего спуска [13]. Значения весовых коэффициентов
на каждом шаге (обучения) определялись
соотношением:
, где -
градиент ошибки
- коэффициент
обучения; характеризует скорость и качество обучения НМ.
Выражения для изменения весовых коэффициентов
рассчитывались для каждого примера из обучающей выборки следующим образом:
,
,
Начальные значения весовых коэффициентов
определялись следующей последовательностью действий [14]:
· инициализация значений и случайными
равномерно распределенными числами из интервала [-0.5,+0.5];
· вычисление норм и ;
· расчет коэффициентов масштабирования , где n -
количество нейронов текущего слоя, m - количество нейронов последующего слоя;
· выбор смещений и из интервала ;
· формирование начальных значений весов: , .
Вследствие того, что при обучении НМ на базе
градиентной процедуры наискорейшего спуска возможны «зависания» в локальных
минимумах функционала (4), использовался плавающий коэффициент (шаг) обучения .
Начальный коэффициент выбирался равным
0.75. Значения весов и смещений сети запоминались. Если после 10 итераций
(этапов обучения) значение функционала ошибки продолжает уменьшаться, то
увеличивается на 0.05, а текущие значения весов и смещений запоминаются. Если
на некоторой итерации произошло увеличение функционала (4), то последние
запомненные значения весов и смещений восстанавливаются, коэффициент уменьшается
на 0.05 и процесс обучения продолжается до тех пор, пока значение функционала
(4) не станет меньшим заданной точности ,
или дальнейшие итерации не приводят к уменьшению значения функционала (4).
.3 Экспериментальные исследования
Эффективность построенной НМ в первую очередь
определяется качеством и количеством примеров для обучения: примеры для
обучения должны охватывать весь измеряемый диапазон космического излучения и
включать все возможные (в том числе и внештатные) ситуации; чем больше примеров
будет предоставлено нейронной сети, тем более адекватную НМ удастся построить.
Для формирования обучающей выборки было выбрано
1000 вариантов данных спектрометра КИ.
Данные спектрометра КИ были получены путем
преобразования спектров излучений поясов Земли, солнечных космических лучей и
галактических космических лучей. Были рассчитаны значения плотностей потока
(частиц/см2·с) для изотропных потоков электронов, протонов и ТЗЧ в
диапазонах энергии и ЛПЭ, границы которых указаны в Таблицах 2 - 4.
В таблице 5 дан пример трех вариантов спектров
КИ. В таблице 6 приведены три набора измерительных данных спектрометра КИ,
соответствующие вариантам спектров таблицы 5.
Таблица 5. Плотность потоков КИ в диапазонах в
соответствии с таблицами 2 -4. Значение плотности потока приведено в 1/(см2·с)
Энергетические диапазоны для
частиц КИ
|
№ спектра
|
|
201
|
202
|
203
|
Э-1
|
5,94E+06
|
4,08E+06
|
5,65E+06
|
Э-2
|
1,69E+06
|
4,45E+05
|
1,15E+06
|
Э-3
|
5,33E+05
|
9,26E+04
|
2,64E+05
|
Э-4
|
6,64E+04
|
6,42E+03
|
1,50E+04
|
Э-5
|
3,26E+04
|
3,50E+03
|
1,01E+03
|
Э-6
|
4,01E+04
|
4,81E+03
|
7,78E+02
|
Э-7
|
5,63E+04
|
7,99E+03
|
8,95E+02
|
Э-8
|
2,68E+04
|
4,82E+03
|
3,20E+02
|
П-1
|
2,14E+06
|
3,30E+07
|
4,60E+05
|
П-2
|
6,26E+01
|
1,42E+04
|
2,32E+01
|
П-3
|
2,60E+01
|
3,02E+03
|
1,01E+01
|
П-4
|
8,51E+00
|
5,67E+02
|
3,10E+00
|
П-5
|
4,63E+00
|
1,93E+02
|
1,34E+00
|
П-6
|
4,90E+00
|
7,33E+01
|
7,25E-01
|
П-7
|
2,93E+00
|
6,78E+00
|
1,33E-01
|
П-8
|
4,53E+00
|
1,99E+00
|
1,59E+00
|
Т-1
|
8,04E+00
|
1,64E+01
|
3,14E+00
|
Т-2
|
1,48E-01
|
3,13E-01
|
5,73E-02
|
Т-3
|
1,02E-01
|
2,16E-01
|
3,84E-02
|
Т-4
|
2,12E-02
|
4,51E-02
|
8,10E-03
|
Т-5
|
1,06E-10
|
2,88E-12
|
3,74E-12
|
Таблица 6. Данные по скорости счета, считываемые
со счетчиков частиц спектрометра КИ. Скорость счета в 1/с
№ счетчик частиц КИ
|
№ спектра
|
|
201
|
202
|
203
|
1-1
|
8,12E+02
|
4,45E+02
|
6,63E+02
|
1-2
|
3,66E-01
|
1,25E+02
|
1,19E-01
|
1-3
|
2,84E-01
|
9,31E+01
|
9,49E-02
|
1-4
|
1,62E-01
|
4,93E+01
|
5,59E-02
|
1-5
|
2,98E-02
|
7,07E+00
|
1,08E-02
|
2-1
|
4,08E+02
|
1,07E+02
|
2,28E+02
|
2-2
|
2,12E-01
|
2,26E+01
|
7,74E-02
|
2-3
|
1,57E-01
|
1,80E+01
|
5,98E-02
|
2-4
|
8,54E-02
|
1,05E+01
|
3,31E-02
|
2-5
|
1,49E-02
|
1,65E+00
|
5,85E-03
|
3-1
|
1,11E+03
|
2,31E+02
|
1,66E+01
|
3-2
|
1,48E+00
|
2,77E+01
|
2,04E-01
|
3-3
|
4,46E-01
|
2,06E+01
|
1,36E-01
|
3-4
|
1,97E-01
|
1,05E+01
|
6,63E-02
|
3-5
|
3,73E-02
|
1,88E+00
|
1,32E-02
|
4-1
|
8,62E+02
|
2,58E+02
|
6,95E+00
|
4-2
|
2,58E-01
|
2,20E+00
|
3,24E-02
|
4-3
|
9,99E-02
|
1,28E+00
|
1,62E-02
|
4-4
|
3,07E-02
|
4,61E-01
|
5,89E-03
|
4-5
|
5,87E-03
|
7,05E-02
|
1,55E-03
|
5-1
|
3,28E-05
|
1,57E-05
|
1,49E-05
|
5-2
|
2,03E-06
|
5,25E-07
|
5,64E-07
|
5-3
|
8,72E-08
|
2,03E-08
|
2,22E-08
|
5-4
|
2,72E-10
|
5,93E-11
|
7,44E-11
|
Для того, чтобы НМ быстрее обучалась (см. (5)),
значения входного и желаемого
выходного сигнала подвергались
масштабированию в интервал [0,1]:
(44)
где: -
исходное значение i-ой компоненты входного сигнала, -
минимальное значение i-ой компоненты входного сигнала, -
максимальное значение i-ой компоненты входного сигнала, -
масштабируемое значение i-ой компоненты входного сигнала, -
значение k-ой компоненты желаемого выходного сигнала, -
минимальное значение k-ой компоненты желаемого выходного сигнала, -
максимальное значение k-ой компоненты желаемого выходного сигнала, -
масштабируемое значение k-ой компоненты желаемого выходного сигнала.
Проанализировав табл. 2, можно определиться с
параметрами НМ.
Таким образом, размерность входного сигнала N=24,
размерность выходного сигнала K=21. Первоначально количество нейронов в скрытом
слое H1 выбиралось равным 24. Но снижение H1 до 12 нейронов не привело к
возрастанию абсолютной погрешности НМ. Также не улучшает эффективность НМ и
добавление второго скрытого слоя (из 8, 12, 16, 24 нейронов).
Обучающая выборка (табл. 2) делилась на две
части: 90 примеров использовались для обучения нейронной сети, 10 примеров -
для тестирования.
Обучающие примеры равномерно перемешивались и,
после этого, сеть с параметрами НМ(4,12,12) (размерность входного слоя - 4,
скрытого слоя - 12, выходного слоя - 12) на них обучалась.
.3 Тестирование НМ
Тестирование НМ производилось на выборке 100
примеров спектрометра КИ, произвольным образом отобранных из 1000 вариантов,
измерительных данных спектрометра КИ, сгенерированных для обучения НМ. После
обучения НМ, ей предъявлялись примеры из тестового множества.
Для оценки погрешности восстановления спектров
КИ для каждого диапазона КИ по результатам 100 восстановлений вычислялась
относительная среднеквадратическая погрешность. Данные по погрешностям
восстановления сведены в таблицу 7.
Таблица 7. Погрешность восстановления спектров
КИ по энергетическим диапазонам
Энергетические диапазоны для
частиц КИ
|
Относительная погрешность
восстановления, относ. ед.
|
Э-1
|
8
|
Э-2
|
16
|
Э-3
|
28
|
Э-4
|
16
|
Э-5
|
6
|
Э-6
|
5
|
Э-7
|
11
|
Э-8
|
266
|
П-1
|
1131389
|
П-2
|
14
|
П-3
|
1
|
П-4
|
1
|
П-5
|
2
|
П-6
|
5
|
П-7
|
24
|
П-8
|
117
|
Т-1
|
13
|
Т-2
|
2
|
Т-3
|
2
|
Т-4
|
2
|
Т-5
|
2
|
Так как выход НМ ограничен
интервалом [0,1] (см. (5)), то он преобразовывался в реальный выходной сигнал в
соответствии с выражением
Также дополнительно исследовались
нейронные сети с другими параметрами: НМ(4,24,12), НМ(4,16,12), НМ(4,8,12),
НМ(4,12,12,12), НМ(4,12,24,12). Но существенного улучшения в результатах не
было достигнуто.
Формализация задачи на языке математики.
Существует выборка данных, в выборке векторы
длины n: X 1,
…, Xn
и Y1, …Ym.
Элементы из первой выборки Xi
(i=1, …, n) представляют
набор входных данных, а элементы из второй выборки Yj
(j=1, …, m) описывают
соответствующие выходные параметры. Необходимо построить нейронную сеть с n
входами и m выходами. Таким
образом, данная задача относится к классу задач регрессии многомерных функций.
Реализация задачи. Описание интерфейса
программного комплекса.
Для реализации задачи был разработан программный
комплекс в среде Visual
Studio на языке C#
для обучения на нейронной сети, разработан дружелюбный интерфейс для
пользования, с помощью которого можно менять параметры нейронной сети и
сравнивать, как идет обучение. Для удобства ведется вывод графика ошибки
нейронной сети на обучающейся и контрольной выборке. Выборка перед обучением
делится на три части: обучающуюся, и контрольную, и тестовую. Таким образом,
можно следить за процессом обучения и не допускать переобучения. Эффект
переобучения возникает, когда ошибка на контрольной выборке начинает
возрастать, а на обучающейся продолжает уменьшаться. В этом случае обучение
необходимо остановить. Эффект переобучения показан на рис.16.
Рис.16. Эффект переобучения.
На графиках (рис.16) можно увидеть, как сначала
обе ошибки уменьшаются (красный график - контрольная ошибка, синий -
обучающаяся ошибка), но потом контрольная ошибка начинает расти, это и есть
эффект переобучения.
Описание интерфейса программы
Пункт меню Сеть содержит такие пункты: Загрузить
сеть, Сохранить сеть, Создать сеть, Обучить сеть. В пунктах меню сделана защита
«от аномальных ситуаций». Например, пункт меню «Обучить сеть» недоступен пока
он не создаст сеть.
Пункт меню «Создать сеть».
Позволяет задать архитектуру сети.
В программе реализованы возможности при создании
сети указать скорость обучения, постоянную момента, параметр функции активации.
Пункт меню «Сохранить сеть».
Позволяет сохранить веса созданной и обученной
сети на диск для дальнейшей работы с ними. Так как после обучения сети, веса
нейронов нужно передать заказчику, для этого реализован данный пункт. Пункт
становится доступен после создания сети.
Пункт меню «Загрузить сеть».
Позволяет загрузить ранее сохраненную сеть на
диске для дальнейшей работы с ней.
Запускает процесс обучения для заданной сети.
Пункт меню График содержит такие пункты: Масштаб
по умолчанию, Прервать/Возобновить обучение, Тестирование.
Пункт меню «Масштаб по умолчанию».
Так как в программе реализована возможность
масштабировать графики ошибки, реализована возможность возвращать масштаб
графика в исходное состояние. Масштабирование графика осуществляется выделением
мышью нужной области графика.
Пункт меню «Прервать/Возобновить обучение».
Позволяет прервать и возобновить обучение,
реализовано, чтобы пользователь, наблюдая за процессом обучения по графикам,
принимал решение об остановке обучения самостоятельно.
Пункт меню «Тестирование».
Позволяет после обучения сети проверить сеть на
примерах из выборки.
Программа выводит на экран число эпох обучения и
время обучения.
Рис.17. Тестирование сети на примерах.
На рис.17. показано тестирование сети на одном
из примеров из выборки.
На данной выборке были изучены эффекты
переобучения сети и паралича.
. При больших значениях параметра
активационной функции активная область функции резко сокращается, поэтому
попасть в область насыщения вероятность высокая, и, установив большое значение
параметра можно пронаблюдать паралич сети на (см.рис.18.)
Рис.18. Эффект паралича сети.
Так как в насыщенной области производная
активационной функции близка нулю, поэтому обучение практически
останавливается, это как раз и видно на графиках, ошибка не изменяется.
Необходимо снизить параметр активационной функции.
. При больших значениях скорости обучения
можно на графике увидеть нестабильное снижение ошибки. (см. рис.19):
Рис.19. Эффект большой скорости обучения.
Из-за большой скорости обучения веса каждый раз
меняются на большую величину и проскакивают минимум функции ошибки, поэтому
функция ошибки начинает превращаться в периодическую функцию.
Программный модуль.
Программа состоит из классов: LayerNW и
NeuralNW.
В классе LayerNW реализованы следующие методы:-
метод, который выделяет память в программе для хранения весовых коэффициентов
нейронной сети.- метод, инициализирующий весовые коэффициенты случайными
числами в диапазоне от 0 до 1.
LayerNW - конструктор класса, который создает
слой нейронной сети. В качестве входных параметров передается: число входов в
нейроны данного слоя и число нейронов в этом слое.
В классе NeuralNW разработан следующий
функционал:- метод, позволяющий загрузить весовые коэффициента из файла и
продолжить обучение.- метод, позволяющий сохранить промежуточные весовые
коэффициенты в файл для последующего обучения. - метод, реализующий вычисление
выходного значения сети при подаче входного вектора в сеть.- метод,
осуществляющий обучение нейронной сети. На вход принимает входной вектор,
желаемый результат и скорость обучения сети.
Предполагается использовать нейронную сеть с
одним скрытым слоем для решения задачи. Выборка на данный момент содержит 1000
элементов. Были проведены исследования по обучению нейронной сети с одним
скрытым слоем и разным количеством нейронов в скрытом слое. Наиболее эффективно
снижается ошибка обучения в случае, когда количество нейронов в скрытом слое
находится в диапазоне 90-190.
Рис.20. Обучение нейронной сети с 50 нейронами
на скрытом слое.
При увеличении количества нейронов обучение
происходит хуже, ошибка не снижается так эффективно, как в первом случае. Из
этого можно сделать вывод, что данных в выборке недостаточно для данной задачи.
На практике для оценивания необходимого объема
обучающейся выборки пользуются выражением:
где W-
количество свободных параметров сети, ε - необходимая
точность обучения. Тогда для сети из 10 нейронов в скрытом слое с 11 входами и
требуемой точностью 10% потребуется 1100 обучающихся наборов.
Список литературы
1. Горн Л. С., Хазанов Б. И.
Спектрометрия ионизирующих излучений на космических аппаратах.
. Маккалох Дж., Питтс У.
Логические исчисления идей, относящихся к нервной деятельности.// Автоматы. М.:
ИЛ, 1956.
. Тарасенко Р.А., Крисилов
В.А. Предварительная оценка качества обучающей выборки для нейронных сетей в
задачах прогнозирования временных рядов.
. Кадилин В.В., Колюбин
В.А., Львов С.А., Недосекин П.Г., Идалов В.А., Тюрин Е.М., Колесников С.В.,
Самосадный В.Т. Перспективы применения алмазных детекторов для регистрации
заряженных частиц космического излучения // Ядерная физика и инжиниринг. 2014.
Т. 5. № 2. С. 138.
. Захарченко К.В., Каперко
А.Ф., Колюбин В.А., Кулагин В.П, Львов С.А., Недосекин П.Г., Чумаченко Е.Н.
Спектрометрический алмазный детектор потоков ионизирующего излучения для транспортных
космических систем // Измерительная техника. 2015. № 6 (принято в печать).
. Дикусар Н.Д.
Полиноминальная аппроксимация высоких порядков.
. Алберг Дж., Нильсон Э.,
Уолш Дж., Теория сплайнов и се приложения, пер. с англ., М., 1972;
. Хайкин Саймон. Нейронные
сети. Полный курс.
. Бодянский Е.В., Руденко
О.Г. Искусственные нейронные сети: архитектуры, обучение, применения.
. Вороновский Г.К., Махотило
К.В., Петрашев С.Н., Сергеев С.А. "Генетические алгоритмы, искусственные
нейронные сети и проблемы виртуальной реальности", Харьков, Основа, 1997
г.
. Колмогоров А.Н., Фомин
С.В., Элементы теории функций и функционального анализа.
. Панченко Т.В. Генетические
алгоритмы.
. Круглов В.В., Дли М.И.,
Голунов Р.Ю. Нечеткая логика и искусственные нейронные сети.
. Уоссермен Ф.
Нейрокомпьютерная техника: теория и практика.
. Тынкевич М. А. Численные
методы анализа.
. Алберг Дж., Нильсон Э.,
Уолш Дж. Теория сплайнов и ее приложения.
. Завьялов Ю. С., Леус В. А.,
Скороспелов В. А. Сплайны в инженерной геометрии.
. Вершинин В. В., Завьялов Ю.
С, Павлов Н. Н. Экстремальные свойства сплайнов и задача сглаживания.
. Васильев, Н. Многочлены
Чебышёва и рекуррентные соотношения.
. Данилов Ю.А. Многочлены
Чебышева.
. Сенашова М.Ю. Погрешности
нейронных сетей. Вычисление погрешностей весов синапсов.
. Айвазян С. А., Бухштабер В.
М., Енюков И. С., Мешалкин Л. Д. Прикладная статистика. Классификация и
снижение размерности.
23. Jolliffe I.T. Principal
Component Analysis
24. Рао С. Р., Линейные
статистические методы и их применения.
. Анил К. Джейн, Жианчанг
Мао, Моиуддин К.М. Введение в исскуственные нейронные сети.
Приложение
nero
{
public partial class Form1: Form
{[] NLayers=null;
int stop = 0;
int epox = 0;
System.Windows.Forms.Label[]
NLayerLabels = null;
double[][] input = null;
double[][] output = null;
double[][] input_train = null;
double[][] input_test = null;
double[][] output_train = null;
double[][] output_test = null;
double[][] intest = null;
double[][] outest = null;
double[] maxinput = null;
double[] mininput = null;
double[] maxout = null;
double[] minout = null;
double[] sredout = null;
double[] sredin = null;
double[] dispin = null;
double[] dispout = null;
public delegate void
InvokeDelegate(string err_tr,double epox,double speed);
public delegate void
MetodDelegate(int time);
public delegate void
EnableDelegate(bool br);
public delegate void
GraphDelegate(double err, double test);
PointPairList list1 = new
PointPairList();
PointPairList list2 = new
PointPairList();
NeuralNW netset = null;
double x = 1;
int time = 0;
double speed_teach = 1;
int vixod = 21;
Thread tt = null;
GraphPane pane = null;
int tik = 1;
int[] numer = null;Form1()
{
InitializeComponent();= new
double[(int)numericUpDown1. Value];
mininput = new
double[(int)numericUpDown1. Value];
maxout = new double[vixod];
minout = new double[vixod];
sredout = new double[vixod];
sredin = new
double[(int)numericUpDown1. Value];
dispout = new double[vixod];
dispin = new
double[(int)numericUpDown1. Value];
numer = new int[800];
for (int i = 0; i < 400;i++ )
{
numer[i] = i;
}
pane = zedGraph. GraphPane;
pane. XAxis. Title. Text = "Эпохи
обучения";
pane. YAxis. Title. Text = "Модуль
ошибки
( Мэв
)";
pane. Title.
Text = "Ошибка
сети и ошибка обобщения";
}
void normirov()
{
int j = 0;
int I = 0;
for (j = 0; j < input[0].Length;
j++)
{
double max = -10;
double min = 100000000000000000;
double sum = 0;
for (i = 0; i <
input.GetLength(0); i++)
{
sum = sum + input[i][j];
if (input[i][j] > max)
max = input[i][j];
if (input[i][j] < min)
min = input[i][j];
}
sredin[j] = sum / input.Length;
maxinput[j] = max;
mininput[j] = min;
for (i = 0; i <
input.GetLength(0); i++)
{
if (max != min)
input[i][j] = (input[i][j] - min) /
(max - min);
else
input[i][j] = (input[i][j] - min);
}
}
for (j = 0; j < output[0].Length;
j++)
{
double max = -10;
double min = 1000000000000000000;
double sum = 0;
for (i = 0; i < output.
GetLength(0); i++)
{
sum = sum + output[i][j];
if (output[i][j] > max)
max = output[i][j];
if (output[i][j] < min)
min = output[i][j];
}
sredout[j] = sum / output.Length;
maxout[j] = max;
minout[j] = min;
for (i = 0; i <
output.GetLength(0); i++)
{
if (max != min)
output[i][j] = (output[i][j] - min)
/ (max - min);
else
output[i][j] = (output[i][j] - min);
}
}
}
void readfile()
{
int j = 0;
int razmernost = 1000;
input = new double[razmernost][];
output = new double[razmernost][];
for (int k1 = 0; k1 < razmernost;
k1++)
{
input[k1] = new
double[(int)numericUpDown1.Value];
output[k1] = new double[vixod];
}
StreamReader viborka = new
StreamReader("input.txt");
while (true)
{
string text = viborka. ReadLine();
if ((text == null) || (text ==
""))
{
viborka. Close();
break;
}
string[] ss = text. Split('\t');
for (int k2 = 0; k2 <
numericUpDown1.Value; k2++)
{
input[j][k2] = Double.
Parse(ss[k2]);
}
j++;
}
viborka. Close();
viborka = new
StreamReader("output.txt");
j = 0;
while (true)
{
string text = viborka. ReadLine();
if ((text == null) || (text ==
""))
{
viborka. Close();
break;
}
string[] ss = text. Split('\t');
for (int k2 = 0; k2 < vixod;
k2++)
{
output[j][k2] = Double.
Parse(ss[k2]);
}
j++;
}
viborka.Close();
}
void formervibork()
{
int i = 0;
int j = 0;
int r = 0;
int k = 0;
input_train = new
double[4*input.Length / 10][];
output_train = new double[4 *
input.Length / 10][];
output_test = new
double[input.Length / 20][];
input_test = new double[input.Length
/ 20][];
outest = new double[input.Length /
20][];
intest = new double[input.Length /
20][];(k = 0; k < input_train.Length; k++)
{
input_train[k] = new
double[(int)numericUpDown1.Value];
output_train[k] = new double[vixod];
}
for (k = 0; k <
input_test.Length; k++)
{
input_test[k] = new
double[(int)numericUpDown1.Value];
output_test[k] = new double[vixod];
intest[k] = new
double[(int)numericUpDown1.Value];
outest[k] = new double[vixod];
}
for (k = 0; k < input. Length;
k++)
{
int h;. DivRem(k, 10, out h);
if (h < 4)
{
input_train[i] = input[k];
output_train[i] = output[k];
i++;
}
if ((h ==
5)&&(j!=input_test. Length))
{
input_test[j] = input[k];
output_test[j] = output[k];
j++;
}
if ((h == 6) && (r !=
intest. Length))
{
intest[r] = input[k];
outest[r] = output[k];
r++;
}
}
}
void teach(double speed)
{
double lasterror = 100;
double err = 10;
double[] sumist_tr = new
double[vixod];
double[] sumnorm_tr = new
double[vixod];
double[] sumist_test = new
double[vixod];
double[] sumnorm_test = new
double[vixod];
// Ошибка
сети
double error = 100;
double test_err = 100;
Stopwatch ss = new Stopwatch();
ss. Start();
while (err > 0.00000001)
{
epox++;
if (stop == 0)
{
break;
}
Random rand = new Random();
for (int i = numer. Length - 1; i
> 0; i--)
{
int j = rand. Next(i);
int tmp = numer[i];
numer[i] = numer[j];
numer[j] = tmp;
}
for (int i = 0; i <
input_train.Length; i++)
{
err=err+netset.
LernNW(input_train[numer[i]], output_train[numer[i]], speed);
}
err = err / input_train.Length;
if (Math. Abs(err - lasterror) <
0.000000001)
{
// Уменьшаем коэффициент скорости обучения на 2
speed /= 2;
if (speed < 0.001)
speed = 0.001;
}
tik++;
error = 0;
for (int i = 0; i <
input_train.Length; i++)
{
double[] y = new double[vixod];
double[] realout = new
double[vixod];
netset. NetOUT(input_train[i], out
y);
for (int j = 0; j <
output_train[0].Length; j++)
{
realout[j] = output_train[i][j] *
(maxout[j] - minout[j]) + minout[j];
y[j] = y[j] * (maxout[j] -
minout[j]) + minout[j];
error = error + Math.Abs(realout[j]
- y[j]);
}
}
error = error / input_train.Length;
test_err = 0;
for (int i = 0; i <
input_test.Length; i++)
{
double[] y = new double[vixod];
double[] realout = new
double[vixod];
netset. NetOUT(input_test[i], out
y);
for (int j = 0; j <
output_test[0].Length; j++)
{
realout[j] = output_test[i][j] *
(maxout[j] - minout[j]) + minout[j];
y[j] = y[j] * (maxout[j] -
minout[j]) + minout[j];
test_err = test_err +
Math.Abs(realout[j] - y[j]);
}
}
test_err = test_err /
input_test.Length;
lasterror = err;
grafic(error, test_err);
InvokeMethod("обучение
"+error.ToString()+" \r\n тестовая
" +test_err.ToString(), epox,speed);
InvokeMethod("0",
epox,speed);
}
ss.Stop();
time =time+ ss.Elapsed.Seconds;
Method(time);
if (stop == 0)
{
enable(true);
}
else
{
Time = 0;
Epox = 0;
enable(false);
}
stop = 0;
}
private void сохранитьToolStripMenuItem_Click(object
sender, EventArgs e)
{
if (netset==null)
MessageBox. Show("Сеть
не
создана!");
return;
}
DialogResult s=MessageBox.
Show("Вы уверены
?","Внимание",
MessageBoxButtons.OKCancel);
if (s == DialogResult. OK)
{
netset. SaveNW("net.txt");
MessageBox. Show("Сеть
сохранена
в
файл
net.txt в
папке
с
программой!");
}
}void обучитьToolStripMenuItem_Click(object
sender, EventArgs e)
{(netset==null)
{
MessageBox. Show("Сеть
не
создана!
Создайте
сеть для обучения!");
return;
}
readfile();
normirov();
formervibork();
stop = 1;
textBox4.Text = "0";
textBox5.Text = "0";
list1.Clear();
list2.Clear();
обучитьToolStripMenuItem.
Enabled = false;
try
{
speed_teach = Double.
Parse(textBox3.Text);
}
catch
{
MessageBox. Show("Параметры
скорости и коэффициент активации должны быть числовые !");
return;
}
pane = zedGraph. GraphPane;
pane. CurveList. Clear();
Thread tt = new Thread(delegate() {
teach(speed_teach); });
tt.Start();
}
private void создатьСетьToolStripMenuItem_Click(object
sender, EventArgs e)
{
double sigmoid_a = 1;
if (NLayers == null)
{
MessageBox. Show("Настройте число скрытых
слоев. Должно быть больше нуля!");
return;
}
else
if (NLayers.Length==0)
{
MessageBox. Show("Настройте
число скрытых слоев. Должно быть больше нуля!");
return;
}
int[] nlayers = new
int[NLayers.Length];
for (int i = 0; i <
NLayers.Length; i++)
{
nlayers[i] = (int)NLayers[i].Value;
}
if (nlayers[nlayers. Length - 1] !=
vixod)
{
MessageBox. Show("Внимание! В данной задаче
число нейронов в выходном слое должно быть 21\n У вас " + nlayers[nlayers.
Length - 1] + "\n Измените число на 21, пересоздайте сеть и запустите
обучение!");
return;
}
{
sigmoid_a = Double.
Parse(textBox2.Text);
speed_teach = Double.
Parse(textBox3.Text);
}
catch
{
MessageBox. Show("Параметры
скорости и коэффициент активации должны быть числовые !");
return;
}
time = 0;
epox = 0;
MessageBox. Show("Сеть успешно создана,
можно приступать к обучению");
}void тестирование_Click(object
sender, EventArgs e)
{
Form2 ff = new Form2(netset);
ff. maxinput = maxinput;
ff. mininput = mininput;
ff. maxout = maxout;
ff. minout = minout;
ff. intest = intest;
ff. outest = outest;
ff. ShowDialog();
}
}