Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 12.03.2019
Сообщений: 3
1

Нейронная сеть на JAVA

12.03.2019, 19:13. Показов 6212. Ответов 6

Author24 — интернет-сервис помощи студентам
Здравствуйте дорогие обитатели форума. Захотелось попробовать изучить нейро сети. Выбрал java так как знаком с ним больше всего. Возникло много вопросов. Нейросеть первая и простая, подскажите кто-что может. Заранее спасибо.
Во-первых сам код:
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
123
124
125
126
127
128
129
class Inputlayer {
    private int sizeInLay;
    private int inputArray[];
    Inputlayer(int count) {
        sizeInLay = count;
        inputArray = new int[count];
    }
    int getSizeInputLay() {
        return sizeInLay;
    }
    Inputlayer setInLay(int value[], Inputlayer inLay) {
        if (value.length == sizeInLay) {
            for (int i = 0; i < sizeInLay; i++) {
                inputArray[i] = value[i];
            }
        }
        return inLay;
    }
}
class HiddenLayer {
    private double weightN;
    private double weightLI[][];
    private double weightLO[][];
    private int sizeHiLay;
    HiddenLayer(int size) {
        sizeHiLay = size;
        int inputArray[] = new int[size];
    }
    void setCom(Inputlayer inLay, OutputLayer outLay, int size) {
        int sizeInLay = inLay.getSizeInputLay();
        int sizeOutLay = outLay.getSizeOutputLay();
        weightLI = new double[sizeInLay][size]; 
        weightLO = new double[sizeOutLay][size];
        for (int i = 0; i < sizeInLay; i++) {
            for (int j = 0; j < size; j++) {
                weightN = (1 + (int) (Math.random() * 98)) / 100;
                weightLI[i][j] = weightN;
            }
        }
        for (int i = 0; i < sizeOutLay; i++) {
            for (int j = 0; j < size; j++) {
                weightN = (1 + (int) (Math.random() * 98)) / 100;
                weightLO[i][j] = weightN;
            }
        }
    }
    double[][] getWeightLI() {
        return weightLI;
    }
    double[][] getWeightLO() {
        return weightLO;
    }
    int getSizeHiLay() {
        return sizeHiLay;
    }
}
class OutputLayer {
    private int sizeOutLay;
    OutputLayer(int count) {
        sizeOutLay = count;
        int outputArray[] = new int[count];
    }
    int getSizeOutputLay() {
        return sizeOutLay;
    }
}
class ValCalc {
    static double calcV(HiddenLayer hiLay, Inputlayer inLay, OutputLayer outLay, int value[]) {
        double[][] weightLI = hiLay.getWeightLI();
        double[][] weightLO = hiLay.getWeightLO();
        int sizein = inLay.getSizeInputLay();
        int sizehi = hiLay.getSizeHiLay();
        int sizeout = outLay.getSizeOutputLay();
        double val_1[][] = new double[sizein][sizehi];
        for(int i = 0; i < sizein; i++) {
            for (int j = 0; j < sizehi; j++) {
                val_1[i][j] = weightLI[i][j] * value[i];
            }
        }
        double end[] = new double[sizehi];
        int k = 0;
        for(int i = 0; i < sizehi; i++) {
            double zero = val_1[k][i];
            for (int j = 1; j < sizein; j++) {
                zero = val_1[j][i] + zero;
            }
            end[i] = zero;
            k++;
        }
        double summK = 0;
        int ind = 0;
        for (double i: end) {
            summK = 1 / (1 + Math.exp(-i));
            for (double j[]: weightLO) {
                for (double u: j){
                    try {
                        end[ind] =  u * i; 
                        ind++;
                    } catch (ArrayIndexOutOfBoundsException exc) {
                        System.out.println(end.length);
                        System.out.println(weightLO.length);
                        System.out.println("i - " + i);
                        System.out.println("j - " + j);
                        System.out.println("sizeout - " + sizeout);
                    }
                }
            }
        }
        
        double zeroO = end[0];
        for (int c = 1; c < end.length; c++) {
            zeroO = zeroO + end[c];
        }
        zeroO = 1 / (1 + Math.exp(-zeroO));
        return zeroO;
    }
}
class Neunet {
    public static void main (String args[]) {
        Inputlayer inLay = new Inputlayer(2);
        HiddenLayer hiLay = new HiddenLayer(2);
        OutputLayer outLay = new OutputLayer(1);
        int value[] = {1,0};
        inLay = inLay.setInLay(value,inLay);
        hiLay.setCom(inLay,outLay,2);
        double outV = ValCalc.calcV(hiLay, inLay, outLay, value);
        System.out.println(outV);
    }
}
Вот в этом куске
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (double i: end) {
            summK = 1 / (1 + Math.exp(-i));
            for (double j[]: weightLO) {
                for (double u: j){
                    try {
                        end[ind] =  u * i; 
                        ind++;
                    } catch (ArrayIndexOutOfBoundsException exc) {
                        System.out.println(end.length);
                        System.out.println(weightLO.length);
                        System.out.println("i - " + i);
                        System.out.println("j - " + j);
                        System.out.println("sizeout - " + sizeout);
                    }
                }
            }
        }
выдаёт, что индекс выходит за пределы массива.
Во вторых, на выходном нейроне всегда одно число(перекомпилировать пробовал) хотя вроде использую Math.random() для расстановки весов.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2019, 19:13
Ответы с готовыми решениями:

Нейронная сеть
в джава новичек, недавно написал калькулятор) хочу написать бота http://agar.io/ управляемого...

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

Локальная сеть java
Здравствуйте! Помогите пожалуйста разобраться: есть клиент-серверное приложение(обычный чат)....

Java клиент/сервер через TOR сеть
Доброго времени. Подскажите такую штуку - есть ли библиотеки Java для работы с TOR сетями, в...

6
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.03.2019, 19:49 2
Цитата Сообщение от lehagagog Посмотреть сообщение
catch (ArrayIndexOutOfBoundsException exc)
не надо так делать и вообще весь кусок какой-то ад адовый, я вообще не понимаю, что там происходит
1
0 / 0 / 0
Регистрация: 12.03.2019
Сообщений: 3
12.03.2019, 20:15  [ТС] 3
В этом куске я прогоняю значения скрытого слоя через функцию активации. Согласен что делать так не надо просто хотел посмотреть что там происходит. Если сможете поправить то вот суть куска: каждый элемент массива end прогоняется через функцию активации
Java
1
summK = 1 / (1 + Math.exp(-i));
. После чего значение в массиве end должно умножаться на соответствующие значение в массиве weightLO(пока писал суть понял что в коде допустил логическую ошибку умножая каждый элемент массива end на все элементы массива weightLO хотя нужно на конкретные). Вот и все
Второй вопрос остается открытым
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
12.03.2019, 21:15 4
Цитата Сообщение от lehagagog Посмотреть сообщение
Захотелось попробовать изучить нейро сети. Выбрал java так как знаком с ним больше всего.
Так себе выбор. Лучше б Python взял. Но если уж хочется, то зачем костылять костыли? https://deeplearning4j.org/

Добавлено через 47 секунд
Или там http://neuroph.sourceforge.net/
0
0 / 0 / 0
Регистрация: 12.03.2019
Сообщений: 3
12.03.2019, 21:19  [ТС] 5
Спасибо, знаю что питон лидер в этой области, но мне главное понять как их строить, собственно поэтому вариант с различными библиотеками отпадает. А python, насколько мне известно, выбирают из-за его скорости, я же не собираюсь городить высоконагруженные нейронки, а взял то, что мне удобнее.
0
729 / 435 / 66
Регистрация: 22.12.2013
Сообщений: 2,292
Записей в блоге: 19
01.10.2019, 08:22 6
Вот еще opensource библиотека java. Библиотека разработана в первую очередь для обработки текста с применением машинного обучения:
http://mallet.cs.umass.edu/
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 5
27.01.2020, 14:52 7
Привет, ну что тебе удалось написать нейронную сеть?
0
27.01.2020, 14:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2020, 14:52
Помогаю со студенческими работами здесь

Нейронная сеть
Зачем здесь нужны w01 , w02, w03, w04 ? где они участвуют?

Нейронная сеть
Обучить нейронную сеть, проект почти полностью доделан осталось дописать несколько методов,...

Нейронная сеть
Добрый день. Помогите, пожалуйста с решением задачи Код(исходные данные) для задачи P =...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru