|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.11.2018, 16:16 | #11 |
Пользователь
Регистрация: 14.11.2018
Сообщений: 89
|
Больше нейронов в скрытом слое. Графика нет. когда сеть проходит выборку, считает правильные и неправильные ответы и % правильных. Обучаю до 75% правильных ответов.
ЫЫЫЫЫЫ
|
15.11.2018, 16:34 | #12 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
75% чот мало, не особо лучше рандомного да/нет ) Особенно если проверяется и обучается на тех же данных.
А там нет библиотек что ли? Зачем все с 0 реализовывать?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
15.11.2018, 19:27 | #13 |
Пользователь
Регистрация: 14.11.2018
Сообщений: 89
|
Библиотеки есть. Но для полного понимания картины решил с нуля, ну и чтоб жизнь легкой не казалась. Каким образом лучше преобразовать данные? я использую:
double x_min2=-2000; double x_max2=2000; double d12=-0.9; double d22=0.9; if((Close[i+2]-Close[i+3])>0){ x1=1;}else{ x1=0;} if((Close[i+3]-Close[i+4])>0){ x2=1;}else{ x2=0;} if((Close[i+4]-Close[i+5])>0){ x3=1;}else{ x3=0;} if((Close[i+5]-Close[i+6])>0){ x4=1;}else{ x4=0;} x5=1;
ЫЫЫЫЫЫ
|
15.11.2018, 20:02 | #14 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Z-score normalization часто используют например.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
15.11.2018, 20:10 | #15 |
Пользователь
Регистрация: 14.11.2018
Сообщений: 89
|
У меня так:
NormalizeDouble(Переменная, Digits); Сколько знаков после запятой лучше взять?(Digits)
ЫЫЫЫЫЫ
|
15.11.2018, 20:46 | #16 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Это округление, а не нормализация.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
16.11.2018, 10:32 | #17 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
17.11.2018, 10:58 | #18 |
Пользователь
Регистрация: 14.11.2018
Сообщений: 89
|
Раз тут есть знающие люди есть, подскажите ошибки в алгоритме. Код выложу частями, раз всем лень скачивать файл.
w1=(((rand()-x_min)*(d2-d1))/(x_max-x_min))+d1; w2=(((rand()-x_min)*(d2-d1))/(x_max-x_min))+d1; w3=(((rand()-x_min)*(d2-d1))/(x_max-x_min))+d1; ... w42=(((rand()-x_min)*(d2-d1))/(x_max-x_min))+d1; подбираю веса рандомно к диапазону от -0,5 до +0,5 по формуле. double x_min=0; double x_max=32767; double d1=-0.5; double d2=0.5; Входы сети if((Close[i+3]-Close[i+4])>0){ x1=1;}else{ x1=0;} if((Close[i+4]-Close[i+5])>0){ x2=1;}else{ x2=0;} if((Close[i+5]-Close[i+6])>0){ x3=1;}else{ x3=0;} if((Close[i+6]-Close[i+7])>0){ x4=1;}else{ x4=0;} подается 0 или 1 в зависимости от знака //первый скрытый слой 7 нейронов net1 = x1 * w1 + x2 * w8 + x3 * w15 + x4 * w22 + x5 * w29 ; net2 = x1 * w2 + x2 * w9 + x3 * w16 + x4 * w23 + x5 * w30 ; net3 = x1 * w3 + x2 * w10 + x3 * w17 + x4 * w24 + x5 * w31 ; net4 = x1 * w4 + x2 * w11 + x3 * w18 + x4 * w25 + x5 * w32 ; net5 = x1 * w5 + x2 * w12 + x3 * w19 + x4 * w26 + x5 * w33 ; net6 = x1 * w6 + x2 * w13 + x3 * w20 + x4 * w27 + x5 * w34 ; net7 = x1 * w7 + x2 * w14 + x3 * w21 + x4 * w28 + x5 * w35 ; out1 = NormalizeDouble(1 / (1+ MathPow( 2.718281828 , (- net1) )),5) ; out2 = NormalizeDouble(1 / (1+ MathPow( 2.718281828 , (- net2) )),5) ; out3 = NormalizeDouble(1 / (1+ MathPow( 2.718281828 , (- net3) )),5) ; out4 = NormalizeDouble(1 / (1+ MathPow( 2.718281828 , (- net4) )),5) ; out5 = NormalizeDouble(1 / (1+ MathPow( 2.718281828 , (- net5) )),5) ; out6 = NormalizeDouble(1 / (1+ MathPow( 2.718281828 , (- net6) )),5) ; out7 = NormalizeDouble(1 / (1+ MathPow( 2.718281828 , (- net7) )),5) ; //выходной слой net = out1 * w36 + out2 * w37 + out3 * w38 + out4 * w39 + out5 * w40 + out6 * w41 + out7 * w42 ; out = NormalizeDouble(1 / (1+ MathPow( 2.718281828 , (- net) )),5) ; Считаю ошибку выходного сигнала if((out<0.5 && Close[i+1]<Close[i+2])|| (out>=0.5 && Close[i+1]>Close[i+2]))// правильные ответы { Pcmd++; } //---обучение методом обратного распространения ошибок if(out<0.5 && Close[i+1]>=Close[i+2])//неправильные ответы { PcmdLb++; error = 1 - out;//ошибка сети } if(out>=0.5 && Close[i+1]<=Close[i+2])//неправильные ответы { PcmdLs++; error = 0 - out;//ошибка сети } delta = error * (out*(1-out)); //дельта считаю дельту каждого нейрона и обновляю веса w36 = w36 + out1 * delta * out * a ; w37 = w37 + out2 * delta * out * a ; w38 = w38 + out3 * delta * out * a ; w39 = w39 + out4 * delta * out * a ; w40 = w40 + out5 * delta * out * a ; w41 = w41 + out6 * delta * out * a ; w42 = w42 + out7 * delta * out * a ; delta1 = delta * w36 ; delta2 = delta * w37 ; delta3 = delta * w38 ; delta4 = delta * w39 ; delta5 = delta * w40 ; delta6 = delta * w41 ; delta7 = delta * w42 ; w1 = w1 + x1 * delta1 * out1 * a ; w2 = w2 + x1 * delta2 * out2 * a ; w3 = w3 + x1 * delta3 * out3 * a ; w4 = w4 + x1 * delta4 * out4 * a ; w5 = w5 + x1 * delta5 * out5 * a ; w6 = w6 + x1 * delta6 * out6 * a ; w7 = w7 + x1 * delta7 * out7 * a ; w8 = w8 + x2 * delta1 * out1 * a ; w9 = w9 + x2 * delta2 * out2 * a ; w10 = w10 + x2 * delta3 * out3 * a ; w11 = w11 + x2 * delta4 * out4 * a ; w12 = w12 + x2 * delta5 * out5 * a ; w13 = w13 + x2 * delta6 * out6 * a ; w14 = w14 + x2 * delta7 * out7 * a ; w15 = w15 + x3 * delta1 * out1 * a ; w16 = w16 + x3 * delta2 * out2 * a ; w17 = w17 + x3 * delta3 * out3 * a ; w18 = w18 + x3 * delta4 * out4 * a ; w19 = w19 + x3 * delta5 * out5 * a ; w20 = w20 + x3 * delta6 * out6 * a ; w21 = w21 + x3 * delta7 * out7 * a ; w22 = w22 + x4 * delta1 * out1 * a ; w23 = w23 + x4 * delta2 * out2 * a ; w24 = w24 + x4 * delta3 * out3 * a ; w25 = w25 + x4 * delta4 * out4 * a ; w26 = w26 + x4 * delta5 * out5 * a ; w27 = w27 + x4 * delta6 * out6 * a ; w28 = w28 + x4 * delta7 * out7 * a ; w29 = w29 + x5 * delta1 * out1 * a ; w30 = w30 + x5 * delta2 * out2 * a ; w31 = w31 + x5 * delta3 * out3 * a ; w32 = w32 + x5 * delta4 * out4 * a ; w33 = w33 + x5 * delta5 * out5 * a ; w34 = w34 + x5 * delta6 * out6 * a ; w35 = w35 + x5 * delta7 * out7 * a ; а- скорость обучения
ЫЫЫЫЫЫ
Последний раз редактировалось Alex11223; 17.11.2018 в 11:06. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Комментарии по коду нейронной сети | lexflax | C++ Builder | 5 | 15.11.2018 20:16 |
Обучение нейронной сети | sonataprado | Общие вопросы C/C++ | 0 | 29.09.2011 20:43 |
имитация нейронной сети | linan | Помощь студентам | 1 | 06.05.2011 16:48 |
Очень нужна помощь в написании программы на Delphi по предмету Сети ЭВМ | G@rGul'YA | Помощь студентам | 1 | 20.07.2009 09:58 |
Нужна помощь в написании ПО | sergunya999 | Фриланс | 20 | 07.07.2009 17:26 |