|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jan 2013
Сообщений: 18
|
Нейронная сеть на action script, не обучается
Добрый день, уважаемые!
прошу у Вас помощи, ибо 3й день я не могу найти ошибку в написанном мной алгоритме обучения нейросети, казалось бы проще уже не бывает: гомогенная нейронная сеть с биполярной сигмоидной функцией и обучением при помощи обратного распространения ошибки... один нейрон учится командам AND и OR, однако стоит добавить еще один слой и попытаться обучить команде XOR, как сетка начинает ворочить носом и и выдавать что угодно, лишь бы не "исключающе или" (структура сети для XOR сделана совершенно стандартная, из книжек). p.s. не нашел более подходящего раздела, ибо исходники у меня на Action Script'e p.s.s. если появитятся добрые люди, имеющие возможность и желание помочь, выложу исходники и литературу, на которую я опирался при написании своей программы, а также опишу всю структуру нейросети, чтобы Вам не пришлось сидеть и разбираться что у меня к чему (код обучения, кстати, с коментариями). p.s.s.s. если честно я на панике, это часть моего диплома, защита приддипломной практики которого будет 7 числа =( Добавлено через 19 минут конено, у меня есть и примеры и код. проект лежит в дроп боксе, могу дать ссылку функция обучения сети: public function train():void{ var iter:int = 0; while (iter++<1000){ for (var ei:int = 0; ei < learningInputArray.length; ei++){//обход обучающих примеров //прямой прогон var output:Number = computeResult(learningInputArray[ei].inputSignalArray); var realOutput:Number = learningInputArray[ei].realOutput; for (var li:int = neuralLayerArray.length - 1; li >= 0; li--){//обход слоев сети var neuralLayer:NeuralLayer = neuralLayerArray[li]; for (var ni:int = 0; ni < neuralLayer.neuronArray.length; ni++){// обход нейронов в сети var neuron:Neuron = neuralLayer.neuronArray[ni]; var inputSignal:Signaller; var delta:Number = 0; var error:Number = 0; if (li == neuralLayerArray.length - 1){//если выходной слой: //расчет ошибки: error = output - realOutput; } else {//если скрытый слой: error = 0; //расчет распространения ошибки: var nextNeuralLayer:NeuralLayer = neuralLayerArray[li+1]; for (var nnl:int = 0; nnl<nextNeuralLayer.neuronArray.length; nnl++){ var learnedNeuron:Neuron = nextNeuralLayer.neuronArray[nnl]; error += 0.5*learnedNeuron.learningError * learnedNeuron.synapticPowerArray[ni] * (1 - learnedNeuron.outputSignal*learnedNeuron.outputSignal); } } neuron.learningError = error; //корректировка входных весов нейрона: for (var spah:int = 0; spah<neuron.synapticPowerArray.length; spah++){ inputSignal = neuron.inputSignalArray[spah]; neuron.synapticPowerArray[spah] = neuron.synapticPowerArray[spah] - 0.5*error*(1 - neuron.outputSignal*neuron.outputSignal)*inputSignal.outputSignal; } //корректировка активационного барьера: neuron.activationBarrier = neuron.activationBarrier + 0.5*error*(1 - neuron.outputSignal*neuron.outputSignal) trace("first layer"); } } } } } override public function compute(v:Number):Number{ var e:Number = Math.E; return 2/(1 + Math.pow(e, (-1*v)))-1; } Последний раз редактировалось KokoZzz; 03.05.2013 в 14:00. |
Часовой пояс GMT +4, время: 18:42. |
|
« Предыдущая тема | Следующая тема » |
Теги |
actionscript 3.0 , neural network , xor |
|
|