1 / 1 / 0
Регистрация: 23.11.2013
Сообщений: 29
1

Многослойный персептрон. Функция активации

21.05.2015, 18:13. Показов 2879. Ответов 1
Метки нет (Все метки)

Доброго времени суток! Создаю однослойный персептрон с обратным распространением ошибки. Суть его работы, есть 28 входов (параметры сетевого соединения), и есть 9 типов атак, которые он должен распознать. Я написал программу с одним выходным слоем, руководитель хочет чтоб было 9 выходов. Подскажите, какой должен быть принцип работы? И как правильно использовать функцию активации, чем больше пытаюсь найти, тем больше запутываюсь.для чего нужна, как правильно настроить и какую взять
Код программы ниже
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import java.io.*;
import java.util.Scanner;
 
public class MLP {
    //размерность сети
    final int nEnters = 28;
    final int nHidden = 16;
    // final int nEnters = 2;
     //final int nHidden = 2;
    double[] enters; //входы
    double[] hidden; //скрытые нейроны
    double outer; //выходной нейрон;
    double[][] wEH; //от входов к скрытым
    double [] wHO;//от скрытых к выходным
   
    double [] pOuters={0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0};
    double [] pOuters2={0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};   
//конструктор многослойного персептрона
MLP() throws Exception{
    enters = new double [nEnters];
    hidden = new double [nHidden];
    wEH = new double [nEnters][nHidden];
    wHO = new double [nHidden]; //wHO = new double[10];
  init();  
  study();
  
  
 // File file2 = new File("J://obuch.txt");// создать файл для обучения
 File file2= new File("J://file4.txt");  
  //создаем поток для чтения файла
  Scanner in = new Scanner(file2);
  while (in.hasNext()){
  for(int p=0; p < nEnters;p++){
            enters[p] =in.nextDouble();} //необходим набор для обучения
            countOuter();//получение выходного значения
            //System.out.println(outer);
            if(outer<=0.00001)  System.out.println(0); //
            else System.out.println(1);//разобраться со значениями выходов
            //if ((pOuters2[p] -outer)<0.00001) System.out.println(pOuters2[p]);
            //else System.out.println(outer);
    //System.out.println(outer);        
  }
  //проверка работы(с входными данными)
}
  
//инициализация весовых коэффициентов
public void init (){
    //инициализация между входами и скрытым слоем
    for (int i=0; i<wEH.length; i++){
    for (int j=0; j<wEH[i].length; j++){
        wEH[i][j] = Math.random()*0.2+0.1;
    }
    }
    //инициализация между скрытым и выходными
    for(int i=0; i<wHO.length; i++){
        wHO[i] = Math.random()*0.2+0.1;
        }
    }
 
//}
//расчет выходных нейронов
public void countOuter(){
    for( int i=0; i<nHidden;  i++){
        hidden[i]=0;
        for(int j=0; j<nEnters; j++){
        hidden[i] += enters[j]*wEH[j][i]; 
        }
//  if (hidden[i] > 0) hidden[i] = 1; else hidden[i] = 0; 
    hidden[i] = 1/(1+Math.exp(-0.8*hidden[i]));
}
    outer=0; // разобраться с выходами
    for (int i=0; i<hidden.length; i++){
        outer += hidden[i]*wHO[i];
    }
    outer=1/(1+Math.exp(-0.8*outer));
    //if (outer >0) outer = 1; else outer =0;
    }
 
 
public void study() throws Exception{
    double [] err = new double [nHidden];
    double gError = 0;
    int shG=0;
    // File file1 = new File("J://obuch.txt");// создать файл для обучения
     File file1 = new File("J://file2.txt");
     Scanner pattern = new Scanner(file1);
    do {
        shG++;
        gError = 0;
        //for(int p=0; p < patterns.length;p++){
        //for(int i=0;i < enters.length;i++)
        while(pattern.hasNext()){
            for(int p=0; p< nEnters; p++){
            enters[p] = pattern.nextDouble();} //необходим набор для обучения
            countOuter();
            double lErr = pattern.nextDouble()-outer;//набор правильных результатов
                    gError+=Math.abs(lErr);
                    //System.out.println(lErr);
                 for(int i=0; i<hidden.length;i++)
                     err[i] = lErr*wHO[i];
                 for(int i=0; i<enters.length;i++){
                     for(int j=0; j< hidden.length;j++){
                             wEH[i][j] += 0.1 *err[j]*enters[i];
                     }
    }
                 
    for (int i=0; i< hidden.length; i++)
        wHO[i]+=0.1*lErr*hidden[i];
    }
        System.out.println(gError);
        } while (gError>=0.0001);
    System.out.println(shG);
//  for(int i=0;i<2;i++){
    //  System.out.print(wHO[i]);
    //}
}
    public static void main(String[] args) throws Exception {
    
        
        MLP mlp = new MLP();
            }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2015, 18:13
Ответы с готовыми решениями:

Персептрон. Исправить ошибки
Привет! Помогите исправить ошибку в методе обратного распространения ошибки: public class Main {...

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

многослойный персептрон
как на писать на языке делфи многослойный персептрон?

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

1
2881 / 2293 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
21.05.2015, 18:38 2
Ты плохо искал, точнее не искал совсем.
Я точно знаю, что по функции активации информации вагон в инете, даже на русском языке.
Говорю уверенно потому что сам искал, нашел и понял в свое время. А ты просто хочешь чтобы за тебя написали.

Этот код не твой, я узнаю куски этого кода, видел их на ютубе давно-давно.
Могу только подсказать что надо гуглить по словам "победитель получает все" и "сети Кохонена". Там чтива хватит на месяц.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2015, 18:38

Подскажите, что такое многослойный персептрон?
Что такое 5–4–4–3 feedforward multi-layer perceptron ?

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

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.