Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Искусственная нейронная сеть для прогноза, Помогите создать 
:(
    Опции темы
Hopeless
Дата 3.11.2007, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Здраствуйте. Вопрос наверно не совсем сюда надо ставить но все же..

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

Сначала я создал нейронную сеть в Matlab2007 - вот m-файл
Код

net=newcf([1 12; 1 21],[20 1],{'logsig' 'purelin'})
net.trainParam.epochs=10000;
net.trainParam.goal=0.0000004;
net = train(net,inputdata,outputdata);
Y=sim(net,inputdata);
abs(Y-outputdata)
x=1:1:length(outputdata);
figure;
plot(x,outputdata,x,Y,'o')

Здесь каскадная нейронная сеть прямого распространения с двумя слоями - два входа и один выход.
В первом слое 20 нейронов с сигмоидной функцией активации, во втором 1 с линейной.
Она дала хороший результат. Но я никак не могу создать такую же нейросеть для этих же данных на Java, а скомпилировать этот m-файл с помощью MATLAB Builder for Java я не могу потому как m-файлы этого toolbox Матлаба скомпилировать нельзя (это написано на их сайте).. Или я чего-то не понял...

При использовании класов http://aydingurel.brinkster.net/neural/ моя сеть ведет себя странно - сначала погрешность уменьшается а потом ростет..
Код

package neural;
import java.io.*;

public class example1 {
  public static void main(String args[]) {

    //  construct a Randomizer object using a seed
    Randomizer randomizer = new Randomizer(4);

    // create a net using a configuration file
    System.out.println("Creating the net");
    NeuralNet mynet = new NeuralNet("D:\\test2.nnc", randomizer);

    // create a pattern set with 2 input and 1 output values.
    // randomly choose 80% of data for training, 10% for cross validation, 10% for testing.

    PatternSet mypatterns = new PatternSet("D:\\t.csv", 2, 1, .8, .1, .1, randomizer);

    // display the error rate before training
    System.out.println("\n\nError ratio before training: " + mynet.CrossValErrorRatio(mypatterns) );

    while ( mynet.CrossValErrorRatio(mypatterns) > 0.0001 ) {
      mynet.BatchTrainPatterns(mypatterns.trainingpatterns, .8);
      System.out.println("Training the net. Error ratio: " + mynet.CrossValErrorRatio(mypatterns) );
    }

    // check the error using test data
    System.out.println("Error ratio of the test data: " + mynet.TestErrorRatio(mypatterns) );

    System.out.println("Training is over");
    // note that this was the easiest function to learn. if we had chosen another function
    // instead of y = x1 + x2, we would need much more training.

    // now that the training is over, save the weights of the net.
    System.out.println("Saving the weights\n");
    try{mynet.SaveWeights("D:\\example1.nnw");}catch(IOException e){}

    // clean up the objects
    mypatterns = null;
    mynet = null;
    randomizer = null;

    ///Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/Ї\_/

    // now recreate the net using previously saved data and
    // use the trained net to calculate some numbers.
    // You could use this part in a separate java class.

    // recreate the net
    randomizer = new Randomizer();
    System.out.println("Recreating the net");
    mynet = new NeuralNet("D:\\example1.nnc", randomizer);
    mynet.LoadWeights("example1.nnw");

    // and test it
    double[] inputs = {1, 1};
    double[] outputs = mynet.Output(inputs); // Although there will be only one output.
    System.out.println("1 1 = " + outputs[0]);

    System.out.println("1 2 = " + mynet.Output(new double[]{1,2})[0]);
    System.out.println("1 3= " + mynet.Output(new double[]{1,3})[0]);
  }
}


Файл test2.nnc имеет вот такие записи
#neurons;23
// for axonfamily, 't' stands for tanh; 'g' for logistic, 'l' for linear
// type;ID;layer;flatness;axonfamily;momentum;learningrate
// Input layer:
i;0;0
i;1;0
// hidden layer
n;2;1;1;g;0.5;1
n;3;1;1;g;0.5;1
n;4;1;1;g;0.5;1
n;5;1;1;g;0.5;1
n;6;1;1;g;0.5;1
n;7;1;1;g;0.5;1
n;8;1;1;g;0.5;1
n;9;1;1;g;0.5;1
n;10;1;1;g;0.5;1
n;11;1;1;g;0.5;1
n;12;1;1;g;0.5;1
n;13;1;1;g;0.5;1
n;14;1;1;g;0.5;1
n;15;1;1;g;0.5;1
n;16;1;1;g;0.5;1
n;17;1;1;g;0.5;1
n;18;1;1;g;0.5;1
n;19;1;1;g;0.5;1
n;20;1;1;g;0.5;1
n;21;1;1;g;0.5;1
// output layer
n;22;2;1;l;0.5;1
// synapses
#synapses;60
// type; ID; sourceunit; targetunit
s;0;0;2
s;1;0;3
s;2;0;4
s;3;0;5
s;4;0;6
s;5;0;7
s;6;0;8
s;7;0;9
s;8;0;10
s;9;0;11
s;10;0;12
s;11;0;13
s;12;0;14
s;13;0;15
s;14;0;16
s;15;0;17
s;16;0;18
s;17;0;19
s;18;0;20
s;19;0;21
s;20;1;2
s;21;1;3
s;22;1;4
s;23;1;5
s;24;1;6
s;25;1;7
s;26;1;8
s;27;1;9
s;28;1;10
s;29;1;11
s;30;1;12
s;31;1;13
s;32;1;14
s;33;1;15
s;34;1;16
s;35;1;17
s;36;1;18
s;37;1;19
s;38;1;20
s;39;1;21
s;40;2;22
s;41;3;22
s;42;4;22
s;43;5;22
s;44;6;22
s;45;7;22
s;46;8;22
s;47;9;22
s;48;10;22
s;49;11;22
s;50;12;22
s;51;13;22
s;52;14;22
s;53;15;22
s;54;16;22
s;55;17;22
s;56;18;22
s;57;19;22
s;58;20;22
s;59;21;22


Еще я пробовал библиотеки JOONE и NeuralJ. Но первая очень долго приближается к заданой точности (я так и не дождался), а вторая доходит до ошибки которая потом уже не уменьшается.
Наверное я просто не умею создавать эти сети..  smile Помогите, пожалуйста.

Прилагаю данные на которых я обучаю сеть. Там первие два столбца это входы а третий - выход 

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  t.zip 0,81 Kb
PM MAIL   Вверх
Crot
Дата 10.11.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 31.1.2004

Репутация: 1
Всего: 3



Я в своё время делал программу по нейронной сети, как раз на Java.
Сеть обучалась по алгоритм обратного распространения ошибки.

Погляди, может чем поможет.

Присоединённый файл ( Кол-во скачиваний: 55 )
Присоединённый файл  Krasikov_Neuro.rar 25,58 Kb
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1067 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.