js 编写神经网络

 

 

更新代码:2016.11.14 

全部代码实现了,B P算法。

 

所有论文公式晦涩难懂,特别是我们这种已经把微积分还给老师的人来说

 

总结下几个重要公式:

 

输出层每个细胞元:

误差=(目标值-输出值)*输出值*(1-输出值)

新权重=现在的权重+(学习率*上一个层每个细胞的输出值* 误差)

 

隐藏层每个细胞元:

误差=与之相连的下一层(输出层)的误差*与之相连的下一层(输出层)的权重

新权重=现在的权重++(学习率*上一个层每个细胞的输出值* 误差)

 

 

以上公式不包换:

动量项

自适应学习率

陡度印字

 

迭代的方式也不是卷积网络

 

此文章会持续更新,直到变完整

 

项目地址:https://github.com/roertech/neural

 

暂时没有上传代码。测试成功后会共享

 

 

 

   /****************************************** */
  //***产生随机数  * */  
 /****************************************** */
 var RandomClamped = (function randomclamped() {           
  function constructor() {
    this.arr=Math.round(((Math.random())*2-1)*100)/100; 
  }
  constructor.prototype ={
       constructor :constructor,
         get:function(){ return this.arr;}
     };
  return constructor;
})(); 
  
  
   /****************************************** */
  //***迭代   * */  
 /****************************************** */
   var Iterator = (function iterator() {           
  function constructor(arr) {
    this.arr=arr;
   this.length=arr.length;
   this.index=0; 
  }
  constructor.prototype ={
       constructor :constructor,
         hasNext:function(x){ 
           if (x==undefined){
                x=0;
              } 
                return this.index ERROR_THRESHOLD )
   {
     //return false if there are any problems
     if (!this.NetworkTrainingEpoch(SetIn, SetOut))
     {
       return false;
     }
    console.log('当前误差:'+this.m_dErrorSum+';训练中,次数为'+this.m_iNumEpochs)
     this.m_iNumEpochs++;
   event.emit('getAlldata',this.m_vecLayers);
      
     //console.log(this.getAlldata())
      

     //call the render routine to display the error sum
    //InvalidateRect(hwnd, NULL, TRUE);
if (this.m_iNumEpochs>2000){

    return
  }
		// UpdateWindow(hwnd);
   }

   m_bTrained = true;
   
   return true;
       },

       getAlldata:function(){
  this.m_dActivation=0;//该神经细胞的激励值
    this.m_dError=0;//误差值
    this.m_vecWeight=new Array();
    var data=new Array()
    
         for (var i=0; i 0)  // 创建网络的各个层
           {
                //创建第一个隐藏层
              this.m_vecLayers.push(new SNeuronLayer(this.m_NeuronsPerHiddenLyr,this.m_NumInputs));
                for(var i=0; i0)
         {
            inputs = outputs;
         }//第一次循环计算隐藏层的输出值

    outputs=[];
    cWeight = 0;
    // 对每个神经细胞,求输入*对应权重乘积之总和。并将总和抛给S形函数,以计算输出
   for (var j=0; j

 

 

 

 


 

 

 

你可能感兴趣的:(js 编写神经网络)