Разработка программы моделирования нейронной сети

Общие сведения о принципах построения нейронных сетей. Искусственные нейронные системы. Математическая модель нейрона. Классификация нейронных сетей. Правила обучения Хэбба, Розенблатта и Видроу-Хоффа. Алгоритм обратного распространения ошибки.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 29.09.2014
Размер файла 814,6 K

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

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

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

Листинг 3.1 - Конструктор класса нейронного элемента

public Neiron (int IN, int OUT, String type)

{

VIxodi = OUT;

if (type == "in")

{

vxodi = 1;

ves_koef = new float [vxodi];

for (int i = 0; i < vxodi; i++)

{

ves_koef[i]=1.0F;

}

}

else

{

vxodi = IN+1;

ves_koef = new float [vxodi];

for (int i = 0; i < vxodi; i++)

{

vk = Math.random();

if (vk<=0.45) { ves_koef[i]= (float)vk;}

ves_koef[i]=(float)(0.45-vk);

}

}

}

Для создания объекта нейрона требуется указать параметры: IN, который хранит количество входов в данный нейрон; OUT, который хранит количество выходов из данного нейрона; а также type, который хранит тип нейрона. Нейронный элемент может быть входным, скрытым или выходным, в соответствии с тем, к какому слою нейронной сети он принадлежит.

В каждом нейронном объекте нейронного элемента хранится массив весовых коэффициентов всех входящих в него связей. Порог нейронного элемента в данной программе учитывается согласно рисунку 2.9, т.е. соответствует весовому коэффициенту связи, от элемента с постоянным значением выхода равного 1. Для всех нейронов не входного слоя количество входов, а значит и количество элементов в массиве весовых коэффициентов, равно количеству нейронов в предыдущем слое, увеличенном на 1. Эти весовые коэффициенты задаются случайным образом, используя метод Math.random(), в пределах [-0,45; 0,45]. Для различия входного нейрона от остальных в конструкторе и предусмотрен третий параметр type.

Если параметр type указывает на то, что нейронный элемент является частью входного слоя, то количество его входов равно 1, и весовой коэффициент этого входа равен 1.

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

Эти методы описаны в зависимости от того, является ли нейронный элемент входным или нет. Для входного нейрона методы приведены в листинге 3.2, для элементов скрытых и выходного слоев в - листинге 3.3.

Листинг 3.2 - Методы функционирования входного нейрона

public double getINResult (double tempResult)

{

sum = 0.0;

sum = sum + ves_koef[0]*tempResult;

result = getINResultat(sum);

return result;

}

public double getINResultat (double param)

{

double res = param;

return res;

}

Листинг 3.3 - Методы функционирования невходного нейрона

public double getResult (double [] tempResult)

{

sum = 0.0;

for (int i=0; i < vxodi; i++)

{

if (i < (vxodi-1)) sum = sum + ves_koef[i]*(tempResult[i]);

else sum = sum + ves_koef[i]*1;

}

result = getResultat (sum);

return result;

}

public double getResultat (double param)

{

double res = 1.0/(1.0 + Math.exp(-param));

return res;

}

В обоих случаях, листинги 3.2 и 3.3, метод getResult возвращает взвешенную сумму, причем параметром является результат функционирования предыдущего слоя, в случае входного слоя - это данные вводимые пользователем. Метод getResultat возвращает результат преобразования взвешенной суммы в соответствии с функцией активации. Как указывалось в разделе 2, для входных элементов это линейная функция, а для всех остальных - это наиболее распространенная из нелинейных - сигмовидная функция.

В процессе обучения необходимо иметь доступ к полям объекта, т.е. изменять весовые коэффициенты нейрона. Метод такого доступа указан в листинге 3.4.

Листинг 3.4 - Изменение весового коэффициета нейрона

public void setVesKoef (int j, double tmp)

{

double temp = ves_koef [j] + tmp;

ves_koef[j] = (float)temp;

}

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

3.2.2 Разработка модуля слоя нейронной сети

В любой нейронной сети есть входной слой и выходной слой, может быть и несколько скрытых слоев, может быть и один скрытый слой, а может и не быть вовсе. Согласно этому, каждый слой создается с параметром tip, который в дальнейшем накладывает ограничения в функционировании данного слоя и всех нейронных элементов слоя. В листинге 3.5 приведен конструктор объекта класса описывающего слой нейронной сети. Кроме параметра tip, необходимо и достаточно указать количество нейронных элементов в данном слое - capacityNeironov, и vxodi - количество элементов в предыдущем слое. Последний параметр нужен для правильного создания объектов нейронных элементов для текущего слоя, поскольку он соответствует количеству входов в каждый нейрон. Но для входного слоя, этот параметр не учитывается, поскольку не существует предыдущего слоя по отношению к входному слою.

Листинг 3.5 - Конструктор класса Слой нейронной сети

public Layer (String tip, int capacityNeironov, int vxodi)

{

koli4estvo = capacityNeironov;

massivNeironov = new ArrayList(koli4estvo);

tip.toLowerCase();

if (tip == "in")

{

input = koli4estvo;

output = 1;

for (int i=0; i<koli4estvo; i++)

{

Neiron neiron1 = new Neiron (1, output, "in");

massivNeironov.add(neiron1);

}

massivNeironov.trimToSize();

}

else

{

if (tip == "out")

{

input = vxodi;

output = koli4estvo;

for (int i=0; i<koli4estvo; i++)

{

Neiron neiron1 = new Neiron (input , 1, "out");

massivNeironov.add(neiron1);

}

massivNeironov.trimToSize();

}

else

{

if (tip == "sub")

{

input = vxodi;

output = 1;

for (int i = 0; i < koli4estvo; i++)

{

Neiron neiron1 = new Neiron (input, output, "sub");

massivNeironov.add(neiron1);

}

massivNeironov.trimToSize();

}

}

}

}

Кроме вышеперечисленного, каждый слой имеет такие поля как: список массивов massivNeironov, содержащий объекты нейронных элементов; массив massivRas4et - массив результатов функционирования слоя, т.е. значения функции активации каждого нейронного элемента слоя; массив massivOshibok - массив ошибок всех нейронных элементов слоя в процессе обучения. Список массивов massivNeironov заполняется элементами во время создания объекта слоя нейронной сети, два последних массива изначально инициализируются и устанавливаются равными null. Массив massivRas4et используется как при обучении, так и при дальнейшем функционировании нейронной сети, а massivOshibok необходим только на стадии обучения.

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

Листинг 3.6 - Метод вычисляющий значения на выходе всех нейронов слоя

public double[] makeRas4et (int thisSloi, double [] lastSloiResult)

{

massivRas4et = new double[koli4estvo];

for (int i =0; i<koli4estvo; i++)

{

Neiron n = (Neiron) massivNeironov.get(i);

if (thisSloi==0)

{

temp = lastSloiResult[i];

temp = n.getINResult (temp);

}

else

{

temp = n.getResult (lastSloiResult);

}

massivRas4et[i]=temp;

}

return massivRas4et;

}

В процессе обучения, согласно алгоритму обратного распространения ошибки, необходимо скорректировать весовые коэффициенты в соответствии с (2.6).

Листинг 3.7 - Метод корректирующий весовые коэффициенты нейронов слоя

public void izmenenieVesov (double normaObu4, double [] resultPreL, double [] oshibki)

{

for (int i = 0; i < koli4estvo; i++)

{

Neiron n = (Neiron) massivNeironov.get(i);

for (int j =0; j<=resultPreL.length; j++)

{

if (j!=resultPreL.length)

{

temp = oshibki[i] * normaObu4 * resultPreL[j];

n.setVesKoef(j, temp);

}

else

{

temp = oshibki[i] * normaObu4 * 1;

n.setVesKoef(j, temp);

}

}

}

}

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

3.3 Объединение модулей в нейронную сеть

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

- aIn - целое число, равное числу нейронов во входном слое;

- aSubS - целое число, равное количеству скрытых слоев;

- aSub - целочисленный массив, элементами которого являются значения количества нейронных элементов в каждом из скрытых слоев;

- aOut - целое число, равное числу нейронов в выходном слое;

Листинг 3.8 - Конструктор класса нейронная сеть

public Net (Frame owner, int aIn, int aSubS, int [] aSub, int aOut)

{

in = aIn;

subS = aSubS;

sub = new int [subS];

for (int i =0; i<subS; i++)

{

sub[i] = aSub[i];

}

out = aOut;

layers = 2 + subS;

massivLayers = new ArrayList ();

for (int i =0; i<layers; i++)

{

if (i == 0)

{

l = new Layer ("in", in, in);

massivLayers.add(l);

}

else

{

if (i != layers-1)

{

Layer preL = (Layer)massivLayers.get(i-1);

int v = sub[i-1];

preL.setVIxodi(v);

l = new Layer ("sub", sub[i-1], preL.getVIxodi());

massivLayers.add(l);

}

else

{

Layer preL = (Layer)massivLayers.get(i-1);

preL.setVIxodi(out);

l = new Layer ("out", out, preL.getVIxodi());

massivLayers.add(l);

}

}

}

vvod = new VvodKartinki (owner, in);

}

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

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

Листинг 3.9 - Метод сохранения нейронной сети

public void SaveNet (String fileToSave)

{

String fileName = fileToSave;

fileName.toLowerCase();

if (!fileName.endsWith(".net"))

{

int n = fileName.length();

fileName = fileName.substring(0,n) + ".net";

}

int [] sloi = new int [layers+1];

sloi[0] = in;

sloi[1] = subS;

for (int i = 0; i < subS; i++)

{

sloi [i+2] = sub[i];

}

sloi[2+subS] = out;

try

{

ObjectOutputStream outNet = new ObjectOutputStream (new FileOutputStream(fileName));

outNet.writeObject (sloi);

for (int i=0; i < layers; i++)

{

l = (Layer) massivLayers.get (i);

outNet.writeObject (l);

}

outNet.close ();

}

catch (Exception e)

{

e.printStackTrace ();

}

}

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

Для загрузки модели нейронной сети из файла в классе нейронной сети есть конструктор, который заполняет те же поля что и конструктор приведенный в листинге 3.8, но только присваиваемые значения программа считывает из файла, путь к которому задан параметром данного конструктора в строке fileToOpen.

Листинг 3.10 - Конструктор класса нейронной сети, вызываемый при открытии нейронной сети из файла

public Net (Frame owner, String fileToOpen)

{

try

{

ObjectInputStream inNet = new ObjectInputStream (new FileInputStream(fileToOpen));

int [] newSloi = (int[]) inNet.readObject();

in = newSloi[0];

subS = newSloi[1];

sub = new int [subS];

for (int i=0; i < subS; i++)

{

sub[i] = newSloi[i+2];

}

out = newSloi[2+subS];

layers = subS+2;

massivLayers = new ArrayList (layers);

for (int i=0; i<layers; i++)

{

l = (Layer) inNet.readObject();

massivLayers.add(l);

}

inNet.close();

}

catch (Exception e)

{

e.printStackTrace();

}

vvod = new VvodKartinki (owner, in);

}

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

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

3.3.1 Разработка модуля обучения нейронной сети с использованием алгоритма обратного распространения ошибки

Алгоритм обратного распространения ошибки был подробно описан в пункте 2.5.4. В соответствии с ним был написан метод для объекта нейронной сети. Полностью этот метод приведен в описании класса нейронной сети в приложении Б. Сама реализация алгоритма обратного распространения ошибки представлена в листинге 3.11.

Листинг 3.11 - Реализация алгоритма обратного распространения ошибки

public void Study (JTextArea txtArea)

{

txtArea.append ("\n\n Будет обучение сети\n");

input = JOptionPane.showInputDialog ("Введите величину допустимой среднеквадратичной ошибки");

Em = Double.parseDouble (input);

input = JOptionPane.showInputDialog ("Введите норму обучения, в пределах от 0 до 1");

normaObu4eniya = Double.parseDouble (input);

input = JOptionPane.showInputDialog ("Сколько будет образцов в эпохе?");

int epoxa = Integer.parseInt (input);

massivStudy = new ArrayList ();

l = (Layer) massivLayers.get (0);

stIn = l.getVIxodi();

l = (Layer) massivLayers.get (massivLayers.size()-1);

stOut = l.getVIxodi();

for (int j = 0; j < epoxa; j++)

{

studyArrayIN = new double [stIn];

if(vvod.showIt())

{

studyArrayIN = vvod.getMassiv();

}

else

{

txtArea.append ("\n ПРОИЗОШЛА ОШИБКА\n");

return;

}

studyArrayOUT = new double [stOut];

vvodCifr.setMessage("Что на выходе нейронной сети");

if(vvodCifr.showIt())

{

studyArrayOUT = vvodCifr.getMassiv();

}

else

{

txtArea.append ("\n ПРОИЗОШЛА ОШИБКА\n");

return;

}

StudyArrays stAr = new StudyArrays (stIn, studyArrayIN, stOut, studyArrayOUT);

massivStudy.add(stAr);

}

massivStudy.trimToSize();

while (!STOP)

{

e = new double [epoxa];

for (int i =0; i < epoxa; i++)

{

StudyArrays s = (StudyArrays)massivStudy.get(i);

tempArray = new double [s.getIN()];

tempArray = s.getArrayIn();

for (int j =0; j<layers; j++)

{

l = (Layer) massivLayers.get (j);

if (j==0)

{

resultStudy = new double[l.getVIxodi()];

resultStudy = l.makeRas4et (j, tempArray);

}

else

{

tempArray = new double[l.getVIxodi()];

tempArray = l.makeRas4et (j, resultStudy);

resultStudy = new double[l.getVIxodi()];

for (int ij = 0; ij<resultStudy.length; ij++)

{

resultStudy[ij] = tempArray[ij];

}

}

}

result = new double [s.getOUT()];

result = s.getArrayOut();

for (int j =layers-1; j>0; j--)

{

l = (Layer) massivLayers.get (j);

if (j == (layers-1))

{

l.ras4etOshibki (result, resultStudy);

}

else

{

l1 = (Layer) massivLayers.get (j+1);

resultStudy = new double [l.getVIxodi()];

resultStudy = l.getMassivRas4et();

l.ras4etOshibki (l1, resultStudy);

}

}

//вычисление квадрата ошибок

tempArray = new double [s.getOUT()];

tempArray = s.getArrayOut();

l = (Layer) massivLayers.get (massivLayers.size()-1);

tempArray2 = new double [l.getVIxodi()];

tempArray2 = l.getMassivRas4et();

boolean last = true;

temp = 0;

for (int j=0; j < l.getVIxodi(); j++)

{

temp= temp + (tempArray2[j]- tempArray[j])*(tempArray2[j]- tempArray[j]);

}

e[i]=temp;

//изменение весовых коэффициентов

for (int j =layers-1; j>0; j--)

{

l = (Layer) massivLayers.get (j);

tempArray = new double[l.getVIxodi()];

tempArray = l.getMassivOshibok ();

l1 = (Layer) massivLayers.get (j-1);

resultStudy = new double [l1.getVIxodi()];

resultStudy = l1.getMassivRas4et();

l.izmenenieVesov (normaObu4eniya, resultStudy, tempArray);

}

}

//проверка на достоверность

temp =0;

for (int i = 0; i< epoxa; i++)

{

temp=temp+e[i];

}

temp=temp/2;

if (temp<Em) STOP = true;

counter++;

if (counter==10)

{JOptionPane.showMessageDialog(null,"Прошло "+(count2*10)+" эпох обучения");

count2++; counter=1;}

}

}

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

4. Разработка документации по использованию программы

4.1 Инсталляция программного продукта

Как отмечалось в разделе 3, язык Java является полностью машинно-независимым, и для успешного выполнения предлагаемой программы необходимо чтобы на ПЭВМ был установлен набор инструментальных средств Java Runtime Environment. Если это приложение установлено, то достаточно переписать в рабочую директорию файл NeiroNet.jar и запустить его выполнение из командной строки следующей командой java -jar NeiroNet.jar. Либо переписать в туже директорию где расположении файл NeiroNet.jar файл run.bat, и выполнить его посредством двойного нажатия на него левой кнопкой мыши, или после выделения его нажатия кнопки “Enter” (Ввод).

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

Постановка задачи. Необходимо создать, сохранить и обучить нейронную сеть, которая будет способна распознавать изображение любой цифры. Цифра представлена в виде бинарного массива, отображаемого на экране как темные (соответствующие значению 1) и светлые (соответствующие значению 0) области или пиксели. Пусть изображение каждой цифры состоит из 35 пикселей, т.е. помещается в прямоугольнике размером 5Ч7 пикселей, рисунок 4.1.

нейронный сеть искусственный обучение

4.2 Создание модели нейронной сети

После запуска программы на экране появляется окно, как показано на рисунке 4.2. Пользователь, для создания нейронной сети должен отобразить на рабочей области окна все необходимые ему слои нейронной сети. Это делается следующим образом. Нажимается кнопка соответствующая нужному слою (входной, скрытый или выходной). Затем щелчком левой кнопки мыши пользователь указывает в каком месте должен располагаться этот слой. При необходимости изменения местоположения изображения слоя, в графическом интерфейсе реализован механизм drug-and-drop (приложение Г). После указания местоположения слоя пользователю предлагается ввести количество нейронных элементов в создаваемом слое, рисунок 4.3. В программе исключена ситуация создания более одного входного и более одного выходного слоя.

Для решения поставленной задачи необходимо чтобы каждому пикселю в соответствие был поставлен нейронный элемент входного слоя. Получается, во входном слое будет 35 нейронов. Согласно рекомендациям по обучению и архитектуре многослойных сетей, приведенных в п.2.6, число нейронов скрытого слоя должно быть меньше обучающих образцов. Примем это количество равное 6. Для разбиения входных образов на 10 выходных областей, так как число цифр десять, можно использовать только 9 нейронов. Для цифры 1 значение на выходе первого нейрона будет максимальным, равным 1, а на всех остальных минимальным, равным 0 для бинарной сигмоидной функции. Для цифры 2 значение на выходе второго нейрона будет максимальным, а на всех остальных минимальным. И так далее для всех цифр до 9. Для цифры 0, примем значение всех нейронов выходного слоя равным нулю.

Итак, располагаем три слоя. Входной из 35 нейронов, скрытый, из 6 нейронов и выходной слой из 9 нейронов. Когда все слои расположены на рабочей области, необходимо нажать кнопку “Далее”. При этом создастся модель нейронной сети. В процессе инициализации модели нейронной сети, т.е. объекта класса Net, у пользователя спрашивается какая функция активации будет использоваться в нейронах обрабатывающих слоев. Для рассматриваемого примера следует выбрать бинарную сигмоидальную. Так же необходимо задать размер вводимого образца, т.е. размеры прямоугольной области которая будет вводиться пользователем как входное воздействие для сети. В нашем примере это будет 5 столбцов, 7 строк.

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

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

При необходимости сохранить модель нейронной сети, следует выбрать пункт меню “Сохранить как”. В предложенном диалоговом окне пользователь выбирает директорию где будет храниться файл модели сети, а также вводит имя файла. Расширение сохраняемых файлов должно быть .net, если расширение не указано, или указано другое, то программа добавляет в конце имени самостоятельно нужное расширение. Для рассматриваемого примера укажем корневую директорию и имя файла cifri.net.

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

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

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

При созданной или открытой нейронной сети, следует выбрать в меню пункт “Обучение”. Далее в режиме диалога пользователь сообщает программе все необходимые данные. А именно количество обучающих образцов в одной эпохе, значение требуемой среднеквадратичной ошибки и значение скорости обучения. Затем вводятся описания каждого образца, т.е. входные и целевые выходные значения. Входные данные должны соответствовать массивам, приведенным на рисунке 4.1. Целевые выходные значения ставятся согласно методике указанной в п.4.2, эти значения выглядят как показано на рисунке 4.5. После ввода последнего образца, программа без дополнительных действий пользователя начинает обучение нейронной сети. По окончании обучения выдается сообщение о завершении процесса.

4.4 Получение результата функционирования нейронной сети

При созданной или открытой нейронной сети, следует выбрать в меню пункт “Расчет”. Далее в режиме диалога пользователь сообщает программе что именно подается на вход сети. В нашем примере, это изображение цифры, одно из представленных, на рисунке 4.1. Далее нейронная сеть осуществляет расчет и выдает результат На рисунке 4.6 показан результат расчета сетью опытного образца, представляющего цифру три. Как видно, значение на выходе третьего нейронного элемента максимально, все другие близки к нулю. Эти значения, максимумы и минимумы не совпадают с 1 и с 0, поскольку сигмоидальная функция никогда не достигает этих значений. Но значение третьего выходного нейронного элемента, равное 0,93 достаточно убедительно указывает на то, что на вход нейронной сети действительно подавалось изображение цифры три.

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

Рисунок 4.1 - Пиксельное изображение цифр

Рисунок 4.2 - Окно программы моделирования нейронной сети

Рисунок 4.3 - Диалоговое окно при создании слоя нейронной сети

Рисунок 4.4- Схема нейронной сети

Рисунок 4.5 - Ввод целевых значений

Рисунок 4.6 - Результат работы нейронной сети

5. Вопросы обеспечения безопасности жизнедеятельности

5.1 Общая характеристика условий применения

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

Длительная работа с ЭВМ приводит к отрицательному влиянию на здоровье людей.

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

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

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

Рабочие места с ПЭВМ по отношению к световым проемам должны располагаться так, чтобы естественный свет падал с боку, преимущественно слева.

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

Общие требования, предъявляемые к организации режима труда и отдыха при работе с ЭВМ:

- продолжительность работы с ЭВМ для инженеров и операторов не должна превышать 6 часов в день;

- уровень нагрузки за рабочую смену - до 40000 знаков;

- суммарное время регламентированных перерывов при 8 - часовой смене - 50 минут;

- продолжительность непрерывной работы с ЭВМ без регламентированных перерывов не должна превышать 2 часов;

- при 8-часовом рабочем дне перерывы следует устанавливать через 2 час от начала рабочей смены и через 1,5 - 2 час после обеденного перерыва продолжительностью 15 минут каждый или продолжительность 10 минут через каждый час работы.

5.2 Требования к ВДТ и персональным ЭВМ

Согласно СанПиН 2.2.2/2.4.1340-03 от 03.06.2003г., №118 должны выполнятся следующие требования к видеодисплейным терминалам и персональным электронно-вычислительным машинам:

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

- конструкция ВДТ, его дизайн и совокупность эргономических параметров должны обеспечить надежное и комфортное считывание отображаемой информации в условиях эксплуатации;

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

- для обеспечения надежного считывания информации соответствующей степени комфортности ее восприятия, должны быть определены оптимальные и допустимые диапазоны визуальных и технических параметров. Минимальная яркость знака (яркость фона) измеренная в темноте составляет 35 кд/м , максимальная 120 кд/м.;

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

- в технической документации на ВДТ должны быть установлены требования на визуальные параметры;

а) неравномерность яркости элементов знаков не более 25;

б) размер минимального элемента отображения (пикселя) для ВДТ: 0.3мм.

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

- конструкция ВДТ и ПЭВМ должна обеспечивать мощность экспозиционной дозы рентгеновского излучения в любой точке на расстоянии 0.05м. от экрана и корпуса ВДТ при любых положениях регулировочных устройств не должна превышать 7.74Е-12 А/кг, что соответствует эквивалентной дозе, равной 0.1 мбэр/час (100 мкр/час);

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

При любых положениях регулировочных устройств мощность эксплуатационной дозы рентгеновского излучения в любой точке на расстоянии 0,05 м, от экрана и корпуса ВДТ не должна превышать 7,74*10 А/кг, что соответствует эквивалентной дозе, равной 0,1 мбэр/ч (100 мкР/час).

5.3 Требования к помещениям для эксплуатации ВДТ и ПЭВМ

Помещения с ВДТ и ПЭВМ должны иметь естественное и искусственное освещение.

Естественное освещение должно обеспечивать коэффициент естественной освещенности (КЕО) не ниже 1.2% в зонах с устойчивым снежным покровом и не ниже 1,5% на остальной территории.

Площадь на одно рабочее место с ВДТ или ПЭВМ для взрослых пользователей должна составлять не менее 6.0 м2, объем - не менее 20 м3.

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

Для внутренней отделки интерьера помещений с ВДТ и ПЭВМ, должны использоваться диффузно-отражающие материалы с коэффициентом отражения для потолка - 0,7-0,8; для стен - 0,5-0,6; для пола - 0,3-0,5.

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

5.4 Требования к шуму и вибрации

При выполнении основной работы на ВДТ и ПЭВМ (диспетчерские, операторские, расчетные, кабинеты и посты управления, залы вычислительной техники и др.), во всех учебных и дошкольных помещениях с ВДТ и ПЭВМ уровень шума на рабочем месте не должен превышать 50 дБ.

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

Шумящее оборудование (АЦПУ, принтеры и т.п.), уровни шума которого превышают нормированные, должно находиться вне помещений с ВДТ и ПЭВМ.

5.5 Требования к освещению помещений и рабочих мест ВДТ и ПЭВМ

Освещенность на поверхности стола в зоне размещения рабочего документа должна быть 300-500 лк.

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

Следует ограничивать отраженную блесткость на рабочих поверхностях (экран, стол, клавиатура и др.) за счет правильного выбора светильников и расположения рабочих мест по отношению к источникам естественного и искусственного освещения, при этом яркость бликов на экране ВДТ и ПЭВМ не должна превышать 40 кд/м2 и яркость потолка, при применении системы отраженного освещения, не должна превышать 200 кд/м2.

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

Следует ограничивать неравномерность распределения яркости в поле зрения пользователя ВДТ и ПЭВМ, при этом соотношение яркости между рабочими поверхностями не должно превышать 3:1 - 5:1, а между рабочими поверхностями и поверхностями стен и оборудования 10:1.

Яркость светильников общего освещения в зоне углов излучения от 50 до 90 градусов с вертикалью в продольной и поперечной плоскостях должна составлять не более 200 кд/м2, защитный угол светильников должен быть не менее 40 градусов.

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

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

5.6 Требования к организации и оборудованию рабочих мест с ВДТ и ПЭВМ

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

Экран видеомонитора должен находиться от глаз пользователя на оптимальном расстоянии 600-700 мм, но не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов.

Высота рабочей поверхности стола для взрослых пользователей должна регулироваться в пределах 680-800 мм; при отсутствии такой возможности высота рабочей поверхности стола должна составлять 725 мм.

Модульными размерами рабочей поверхности стола для ВДТ и ПЭВМ, на основании которых должны рассчитываться конструктивные размеры, следует считать: ширину 800, 1000, 1200 и 1400 мм, глубину 800 и 1000 мм при регулируемой его высоте, равной 725 мм.

Конструкция стула должна обеспечивать:

- ширину и глубину поверхности сиденья не менее 400 мм;

- поверхности сиденья с закругленным передним краем;

- регулировку высоты поверхности сиденья в пределах 400-550 мм и углам наклона вперед до 15 град. и назад до 5 град.;

- высоту опорной поверхности спинки 300 20 мм, ширину - не менее 380 мм и радиус кривизны горизонтальной плоскости 400 мм.

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

Конструкция клавиатуры должна предусматривать:

- исполнение в виде отдельного устройства с возможностью свободного перемещения;

- опорное приспособление, позволяющее изменять угол наклона поверхности клавиатуры в пределах 5-15 градусов;

- высоту среднего ряда клавиш не более 30 мм;

- расположение часто используемых клавиш в центре, внизу и справа, редко используемых - вверху и слева;

- выделение цветом, размером, формой и местом расположения функциональных групп клавиш;

- минимальный размер клавиш 13 мм, оптимальный - 15 мм;

- клавиши с углублением в центре и шагом 19 плюс-минус 1 мм;

- расстояние между клавишами не менее 3 мм;

- одинаковый ход для всех клавиш с минимальным сопротивлением нажатию 0.25 Н и максимальным - не более 1.5 Н.

5.7 Требования к организации режима труда и отдыха при работе с ВДТ и ПЭВМ

Виды трудовой деятельности разделяются на 3 группы:

- группа А - работа по считыванию информации с экрана ВДТ или ПЭВМ с предварительным запросом;

- группа Б - работа по вводу информации;

- группа В - творческая работа в режиме диалога с ЭВМ.

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

Продолжительность непрерывной работы с ВДТ без регламентированного перерыва не должна превышать 2 часов.

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

5.8 Вопросы электробезопасности при работе с ВДТ и ПЭВМ

В ЭВМ источником опасности является электрическая часть, а именно входные цепи блока питания, который может быть подключен к сети промышленного тока напряжением 220В. частотой 50 Гц, с изолированной нейтралью. Выходные цепи блока питания составляют 15, 5 В. Следовательно, согласно ПЭУ 1.1.3 устройство относится к установкам с рабочим напряжением до 1000 В.

Использовавшееся помещение с ЭВМ относится к классу помещений без повышенной опасности с точки зрения поражения электрическим током. Температура окружающей среды +205С, относительная влажность воздуха 6020%. В помещении должны быть непроводящие полы, отсутствовать токопроводящая пыль, отсутствовать электрически активная среда, отсутствовать возможность одновременного прикосновения к металлическим частям прибора и заземляющему устройству, отсутствовать высокая температура и сырость (ПУЭ 1.1.13).

Для защиты от поражения электрическим током все токоведущие части должны быть защищены от случайных прикосновений кожухами (ПУЭ 1.1.32), корпус устройства должен быть заземлен. Заземление выполняется изолированным медным проводом сечением 1.5 мм2 (ПУЭ 1.7.78), который присоединяется к общей шине заземления с общим сечением 48 м2 при помощи сварки. Общая шина присоединяется к заземлению, сопротивление которого не должно превышать 4 Ом (ПУЭ 1.7.65). Питание устройства должно осуществляться от силового щита через автоматический предохранитель, срабатывающий при коротком замыкании нагрузки.

Эксплуатация устройства должна производиться персоналом, имеющим квалификацию по ТБ II (согласно ПТЭ). Работа по устранению неисправностей и наладка должна производиться персоналом с квалификационной группой по ТБ не ниже III (согласно ПТЭ) и только после снятия напряжения питания с устройства.

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

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

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

- фильтры от гармоник;

- блок бесперебойного питания.

5.9 Требования к пожарной безопасности

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

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

- в машинном зале должны быть размещены углекислотные огнетушители типов ОУ-2, ОУ-5, ОУ-8. Согласно типовым правилам пожарной безопасности на каждые 100 кв. метров площади помещения ВЦ должен приходиться один огнетушитель;

- в качестве вспомогательного средства тушения пожара могут использоваться гидрант или устройства с гибкими шлангами;

- для непрерывного контроля машинного зала и зоны хранения носителей информации необходимо установить систему обнаружения пожаров, для этого можно использовать комбинированные извещатели типа КИ-1 из расчета один извещатель на 100 м2 помещения. Меры пожарной безопасности определены в ГОСТ 18.06.2003 №313.

Пользователи допускаются к работе на персональных ЭВМ только после прохождения инструктажа по безопасности труда и пожарной безопасности в лаборатории в целом и на каждом рабочем месте.

Заключение

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

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

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

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

1. Р. Каллан. Основные концепции нейронных сетей. - Москва: «Вильямс», 2001г.

2. В.А.Головко Нейронные сети: обучение, организация и применение. - Москва: «Радиотехника», 2001г.

3. А.Н. Горбань, Д.А. Россиев Нейронные сети на персональном компьютере. - Новосибирск: «Наука», 1996г.

4. К.С. Хорстман, Г. Корнелл Java2: пер. с англ. - Москва : «Вильямс», 2004г.

5. Санитарно-эпидемиологические правила и нормативы. СанПиН 2.2.2/2.4.1340 - 03.

ПРИЛОЖЕНИЕ А

Листинг программного модуля, организующего работу всей программы

/**

* Класс <code> main</code> является главным классом, в которм

* создается окно программы, но все последующие действия скрыты

* в других классах

*/

import classWindow.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

public class main

{

/**

Конструктор класса <code> main</code>

@param String[] args параметры в командной строке при запуске приложения /не используются/

*/

public static void main (String[] args)

{

MainFrame frame1 = new MainFrame ();

frame1.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

frame1.show();

}

}

/**

Класс <code> MainFrame</code> создает окно, с предопределнными

параметрами (размеры, положение при первом запуске, расположение

компонентов внутри)

*/

class MainFrame extends JFrame

{

public MainFrame ()

{

Toolkit kit = Toolkit.getDefaultToolkit();

Dimension screenSize = kit.getScreenSize();

int screenHeight = screenSize.height;

int screenWidth = screenSize.width;

setLocation (screenWidth/3, screenHeight/3);

setSize (800, 600);

setTitle ("Neiron Frame");

setResizable(false);

Container contentPane = getContentPane ();

JMenuBar menuBar = new JMenuBar ();

MyMenu menu = new MyMenu (description, menuBar);

setJMenuBar(menuBar);

DrawPanel drPanel = new DrawPanel (description, menu);

ButonPanel butPanel = new ButonPanel (drPanel);

scrollPane = new JScrollPane (description);

GridBagLayout layout = new GridBagLayout ();

contentPane.setLayout (layout);

GridBagConstraints constraints = new GridBagConstraints ();

constraints.fill = GridBagConstraints.BOTH;

Insets ins = new Insets (5,5,5,5);

constraints.insets = ins;

constraints.weightx = 20;

constraints.weighty = 100;

constraints.gridx = 0;

constraints.gridy = 0;

constraints.gridwidth = 1;

constraints.gridheight = 1;

contentPane.add(butPanel, constraints);

constraints.weightx = 100;

constraints.weighty = 100;

constraints.gridx = 1;

constraints.gridy = 0;

constraints.gridwidth = 1;

constraints.gridheight = 1;

contentPane.add(drPanel, constraints);

constraints.weightx = 100;

constraints.weighty = 30;

constraints.gridx = 0;

constraints.gridy = 1;

constraints.gridwidth = GridBagConstraints.REMAINDER;

constraints.gridheight = GridBagConstraints.REMAINDER;

contentPane.add(scrollPane, constraints);

}

public final JTextArea description = new JTextArea ();

private JScrollPane scrollPane;

}

ПРИЛОЖЕНИЕ Б

Листинг программных модулей, описывающих нейронную сеть и слой сети

/**

Объект класса Net является моделью нейронной сети.

Сеть состоит из некоторого количества слоев, но как минимум

должны присутствовать входной и выходной слои.

*/

package classNet;

import classWindow.*;

import classNet.classLayer.*;

import java.util.*;

import javax.swing.*;

import classNeiron.*;

import java.awt.*;

import java.io.*;

public class Net

{

/**

Конструктор класса Net вызываемый при открытии Н.сети из файла

@param Frame owner - родительский компонент

@param String fileToOpen путь к файлу

*/

public Net (Frame owner, String fileToOpen)

{

try

{

ObjectInputStream inNet = new ObjectInputStream (new FileInputStream(fileToOpen));

int [] newSloi = (int[]) inNet.readObject();

in = newSloi[0];

subS = newSloi[1];

sub = new int [subS];

for (int i=0; i < subS; i++)

{

sub[i] = newSloi[i+2];

}

out = newSloi[2+subS];

stolbcov = newSloi[3+subS];

strok = newSloi[4+subS];

funkciya = newSloi[5+subS];

vvod = new VvodKartinki (owner, stolbcov, strok);

vvodCifr= new VvodCifr ( owner, out);

layers = subS+2;

massivLayers = new ArrayList (layers);

for (int i=0; i<layers; i++)

{

l = (Layer) inNet.readObject();

massivLayers.add(l);

}

inNet.close();

}

catch (Exception e)

{

e.printStackTrace();

}

}

/**

Конструктор класса Net вызываемый при создании сети по рисунку

@param Frame owner - родительский компонент

@param int aIn количество нейронов во входном слое

@param int aSubS количество скрытых слоев

@param int [] aSub количество нейронов в каждом из скрытых слоев

@param int aOut количество нейронов в выходном слое

*/

public Net (Frame owner, int aIn, int aSubS, int [] aSub, int aOut)

{

funkciya = JOptionPane.showOptionDialog (null,

"Выберите функцию активации\nесли окно будет просто закрыто, то будет установлена *Бинарная сигмоидальная*",

"Диалог",

JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[]

{"Бинарная\n сигмоидальная",

"Биполярная\n сигмоидальная"},"Бинарная\n сигмоидальная");

if (funkciya == JOptionPane.CLOSED_OPTION) funkciya = 0;

in = aIn;

subS = aSubS;

sub = new int [subS];

for (int i =0; i<subS; i++)

{

sub[i] = aSub[i];

}

out = aOut;

layers = 2 + subS;

massivLayers = new ArrayList ();

for (int i =0; i<layers; i++)

{

if (i == 0)

{

l = new Layer ("in", in, in, funkciya);

massivLayers.add(l);

}

else

{

if (i != layers-1)

{

Layer preL = (Layer)massivLayers.get(i-1);

int v = sub[i-1];

preL.setVIxodi(v);

l = new Layer ("sub", sub[i-1], preL.getVIxodi(), funkciya);

massivLayers.add(l);

}

else

{

Layer preL = (Layer)massivLayers.get(i-1);

preL.setVIxodi(out);

l = new Layer ("out", out, preL.getVIxodi(), funkciya);

massivLayers.add(l);

}

}

}

while (strok*stolbcov != in)

{

input = JOptionPane.showInputDialog ("Всего нейронов на входе "+in+"\nСколько будет столбцов?");

stolbcov = Integer.parseInt (input);

input = JOptionPane.showInputDialog ("Всего нейронов на входе "+in+"\nСколько будет строк?");

strok = Integer.parseInt (input);

}

vvod = new VvodKartinki (owner, stolbcov, strok);

vvodCifr= new VvodCifr ( owner, out);

}

/**

Отображает информацию о нейронной сети (количество слоев, количество нейронов

в каждом слое, а так же свойства каждого нейрона

@param JTextArea txtArea - текстовая область для отображения информации

*/

public void ShowNetInfo (JTextArea txtArea)

{

for (int i=0; i < layers; i++)

{

l = (Layer) massivLayers.get (i);

if (i == 0)

{

txtArea.append (" ВХОДНОЙ СЛОЙ \n");

txtArea.append (l.getInfo());

}

else

{

if (i != layers-1)

{

txtArea.append ("\n СКРЫТЫЙ СЛОЙ \n");

txtArea.append (l.getInfo());

}

else

{

txtArea.append ("\n ВЫХОДНОЙ СЛОЙ \n");

txtArea.append (l.getInfo());

}

}

}

txtArea.append ("\n");

}

/**

Сохраняет нейронную сеть как набор массивов: количество слоев

количество нейронов в каждом слое

каждый слой как массив нейронов

@param String fileToSave - путь к файлу, расширение которого net

*/

public void SaveNet (String fileToSave)

{

String fileName = fileToSave;

fileName.toLowerCase();

if (!fileName.endsWith(".net"))

{

int n = fileName.length();

fileName = fileName.substring(0,n) + ".net";

}

int [] sloi = new int [layers+6];

sloi[0] = in;

sloi[1] = subS;

for (int i = 0; i < subS; i++)

{

sloi [i+2] = sub[i];

}

sloi[2+subS] = out;

sloi[3+subS] = stolbcov;

sloi[4+subS] = strok;

sloi[5+subS] = funkciya;

try

{

ObjectOutputStream outNet = new ObjectOutputStream (new FileOutputStream(fileName));

outNet.writeObject (sloi);

for (int i=0; i < layers; i++)

{

l = (Layer) massivLayers.get (i);

outNet.writeObject (l);

}

outNet.close ();

}

catch (Exception e)

{

e.printStackTrace ();

}

}

/**

Отображает информацию о количестве нейронов во воходном слое

@return число нейронов

*/

public int getInputLayer ()

{

l = (Layer) massivLayers.get(0);

int tmp = l.getVIxodi();

return tmp;

}

/**

Выясняет реакцию сети на входное воздействие

@see classWindow.VvodKartinki#showIt ()

@see classWindow.VvodKartinki#getMassiv ()

@param JTextArea txtArea - текстовая область для вывода результатов

*/

public void MakeRas4et (JTextArea txtArea)

{

txtArea.append ("\n\n Будет расчет сети\n");

for (int i =0; i < layers; i++)

{

l = (Layer) massivLayers.get (i);

tempArray = new double[l.getVIxodi()];

if (i==0)

{

if(vvod.showIt())

{

tempArray = vvod.getMassiv();

}

else

{

txtArea.append ("\n П Р О И З О Ш Л А О Ш И Б К А \n");

return;

}

result = new double[l.getVIxodi()];

result = l.makeRas4et (i, tempArray);

}

else

{

tempArray = l.makeRas4et (i, result);

result = new double[l.getVIxodi()];

for (int j = 0; j<result.length; j++)

{

result[j] = tempArray[j];

}

}

for (int j=0; j<result.length; j++)

{

txtArea.append ("\nНА ВЫХОДЕ нейрнона "+(j+1)+" результат= "+result[j]+"\n");

}

}

VIvod = new VivodRez (result);

}

/**

Процесс обучения сети на основе вводимых далее пользователем данных @see

@param JTextArea txtArea - текстовая область для вывода результатов и критических сообщений

*/

public void Study (JTextArea txtArea)

{

txtArea.append ("\n\n Будет обучение сети\n");

input = JOptionPane.showInputDialog ("Введите величину допустимой среднеквадратичной ошибки");

Em = Double.parseDouble (input);

input = JOptionPane.showInputDialog ("Введите норму обучения, в пределах от 0 до 1");

normaObu4eniya = Double.parseDouble (input);

input = JOptionPane.showInputDialog ("Сколько будет образцов в эпохе?");

int epoxa = Integer.parseInt (input);

massivStudy = new ArrayList ();

l = (Layer) massivLayers.get (0);

stIn = l.getVIxodi();

l = (Layer) massivLayers.get (massivLayers.size()-1);

stOut = l.getVIxodi();

for (int j = 0; j < epoxa; j++)

{

studyArrayIN = new double [stIn];

if(vvod.showIt())

{

studyArrayIN = vvod.getMassiv();

}

else

{

txtArea.append ("\n П Р О И З О Ш Л А О Ш И Б К А \n");

return;


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

  • Обучение простейшей и многослойной искусственной нейронной сети. Метод обучения перцептрона по принципу градиентного спуска по поверхности ошибки. Реализация в программном продукте NeuroPro 0.25. Использование алгоритма обратного распространения ошибки.

    курсовая работа [1019,5 K], добавлен 05.05.2015

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

    презентация [98,6 K], добавлен 16.10.2013

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

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

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

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

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

    дипломная работа [3,0 M], добавлен 02.03.2010

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

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

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

    реферат [654,2 K], добавлен 09.06.2014

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

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

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

    реферат [158,2 K], добавлен 16.03.2011

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

    курсовая работа [249,3 K], добавлен 22.06.2011

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