Team Ai
Apppublic

RustX/Autonomous_Driving_Simulation

sourceHugging Faceupdated 3y agoView on Hugging Face
3likes
network.js87 linesDownload Raw Back to root
1class NeuralNetwork{2    constructor(neuronCounts){3        this.levels=[];4        for(let i=0;i<neuronCounts.length-1;i++){5            this.levels.push(new Level(6                neuronCounts[i],neuronCounts[i+1]7            ));8        }9    }10 11    static feedForward(givenInputs,network){12        let outputs=Level.feedForward(13            givenInputs,network.levels[0]);14        for(let i=1;i<network.levels.length;i++){15            outputs=Level.feedForward(16                outputs,network.levels[i]);17        }18        return outputs;19    }20 21    static mutate(network,amount=1){22        network.levels.forEach(level => {23            for(let i=0;i<level.biases.length;i++){24                level.biases[i]=lerp(25                    level.biases[i],26                    Math.random()*2-1,27                    amount28                )29            }30            for(let i=0;i<level.weights.length;i++){31                for(let j=0;j<level.weights[i].length;j++){32                    level.weights[i][j]=lerp(33                        level.weights[i][j],34                        Math.random()*2-1,35                        amount36                    )37                }38            }39        });40    }41}42 43class Level{44    constructor(inputCount,outputCount){45        this.inputs=new Array(inputCount);46        this.outputs=new Array(outputCount);47        this.biases=new Array(outputCount);48 49        this.weights=[];50        for(let i=0;i<inputCount;i++){51            this.weights[i]=new Array(outputCount);52        }53 54        Level.#randomize(this);55    }56 57    static #randomize(level){58        for(let i=0;i<level.inputs.length;i++){59            for(let j=0;j<level.outputs.length;j++){60                level.weights[i][j]=Math.random()*2-1;61            }62        }63 64        for(let i=0;i<level.biases.length;i++){65            level.biases[i]=Math.random()*2-1;66        }67    }68 69    static feedForward(givenInputs,level){70        level.inputs=[...givenInputs];71 72        for(let i=0;i<level.outputs.length;i++){73            let sum=074            for(let j=0;j<level.inputs.length;j++){75                sum+=level.inputs[j]*level.weights[j][i];76            }77 78            if(sum>level.biases[i]){79                level.outputs[i]=1;80            }else{81                level.outputs[i]=0;82            }83        }84 85        return level.outputs;86    }87}