• output value . Sigmoid neurons are similar to perceptrons, but modified so that small changes in their weights and bias cause only a small change in their output.


     http://neuralnetworksanddeeplearning.com/chap1.html

     . Sigmoid neurons are similar to perceptrons, but modified so that small changes in their weights and bias cause only a small change in their output.

    http://neuralnetworksanddeeplearning.com/chap3.html

    // This is a paper.js widget to show a single neuron learning.  In
    // particular, the widget is used to show the learning slowdown that
    // occurs when the output is saturated.
    //
    // The same basic widget is used several times, in slightly different
    // configurations.  paper.js makes it somewhat complex to reuse the
    // code, so I have simply duplicated the code.  This can give rise to
    // bugs if one is not careful to keep the code in sync, so I have
    // separated the code into two pieces.
    //
    // The first piece is the header code.  This changes between widgets.
    // It sets up things like the starting weight, bias, cost function,
    // and so on -- things which may vary betweens widgets.
    //
    // The second piece is the body code.  This is almost exactly the same
    // for the different widgets.  Note, however, that the costGraphX and
    // epochX variables change name, due to a bug in the way paperjs
    // handles scope.
    //
    // We can make these changes by searching on costGraph1 and replacing
    // with costGraph2, costGraph3 etc, by replacing epoch1 with epoch2,
    // epoch3 etc, and by replcacing cost1 with cost2, cost3 etc.
    //
    // This separation makes it easy to maintain the duplicated code.
    
    // HEADER CODE
    
    var startingWeight = 0.6;
    var startingBias = 0.9;
    var eta = 0.15;
    var numFrames = 300;
    
    quadratic_cost = {
        fn: function(a) {return a*a/2;},
        derivative: function(a) {return a*a*(1-a);},
        scaling: 240 // used to scale on the graph
    }
    
    cross_entropy_cost = {
        fn: function(a) {return -Math.log(1-a);},
        derivative: function(a) {return 1/(1-a);},
        scaling: 30
    }
    
    cost1 = quadratic_cost;
    
    // A path for the graph.  
    costGraph1 = new Path();
    costGraph1.strokeColor = "#2A6EA6";
    
    
    // BODY CODE
    
    // STATIC ELEMENTS
    //
    // Note that this includes some paper.js items which will later be
    // modified, e.g., the variables output and weightText.  This section
    // merely sets the static parts of the elements.
    
    var input = new PointText(new Point(8, 40));
    input.fontSize = 18;
    input.content = "Input: 1.0";
    
    arrow(new Point(100, 35), new Point(230, 35), 0.8); // input arrow
    
    var neuron = new Path.Circle(new Point(260, 35), 30);
    neuron.strokeColor = "black";
    
    arrow(new Point(290, 35), new Point(380, 35), 0.8); // output arrow
    
    // The output text's content will be set dynamically, later
    var output = new PointText(new Point(390, 40)); 
    output.fontSize = 18;
    
    // The weight text and bar
    var weightText = new PointText(new Point(120, 52));
    weightText.fontSize=14;
    var weightBar = new Path.Rectangle(new Rectangle(120, 57, 90, 9));
    weightBar.strokeColor = "grey";
    weightBar.strokeWidth = 1;
    var weightTick = new Path(new Point(165, 57), new Point(165, 71));
    weightTick.strokeColor = "black";
    var weightSlider = new Path.Line(
        new Point(165, 61.5), new Point(165+weight*20, 61.5));
    weightSlider.strokeColor = "#2A6EA6";
    weightSlider.strokeWidth = 9;
    
    // The bias text and bar
    var biasText = new PointText(new Point(230, 82));
    biasText.fontSize = 14;
    var biasBar = new Path.Rectangle(new Rectangle(230, 88, 90, 9));
    biasBar.strokeColor = "grey";
    biasBar.strokeWidth = 1;
    var biasTick = new Path(new Point(275, 88), new Point(275, 102));
    biasTick.strokeColor = "black";
    var biasSlider = new Path.Line(
        new Point(275, 92.5), new Point(275+bias*20, 92.5));
    biasSlider.strokeColor = "#2A6EA6";
    biasSlider.strokeWidth = 9;
    
    // Axes for the graph
    arrow(new Point(100, 250), new Point(100, 120));
    arrow(new Point(100, 250), new Point(130+numFrames/2, 250));
    
    // Labels on the axes
    var costText = new PointText(new Point(60, 145));
    costText.fontSize = 18;
    costText.content = "Cost";
    
    var epoch1LabelText = new PointText(new Point(140+numFrames/2, 255));
    epoch1LabelText.fontSize = 18;
    epoch1LabelText.content = "Epoch";
    
    // Marker for the current epoch
    var epoch1Tick = new Path(new Point(100, 250), new Point(100, 255));
    epoch1Tick.strokeColor = "black";
    
    var epoch1Number = new PointText(new Point(100, 267));
    epoch1Number.fontSize = 14;
    epoch1Number.justification = "center";
    
    // We group the epochTick and epochNumber, to make it easy to move
    epoch1 = new Group([epoch1Tick, epoch1Number]);
    
    // Initialize the dynamic elements.  It's convenient to do this in a
    // function, so that function can also be called upon a (re)start of
    // the widget.
    
    var weight, bias;
    initDynamicElements();
    
    function initDynamicElements() {
        weight = startingWeight;
        bias = startingBias;
        weightText.content = paramContent("w = ", weight);
        weightSlider.segments[1].point.x = 165+weight*20;
        biasText.content = paramContent("b = ", bias);
        biasSlider.segments[1].point.x = 275+bias*20;
        output.content = outputContent(weight, bias);
        epoch1.position.x = 100;
        epoch1Number.content = "0";
        costGraph1.removeSegments();
    }
    
    function paramContent(s, x) {
        sign = (x >= 0)? "+": "";
        return s+sign+x.toFixed(2);
    }
    
    // The run button
    
    var runBox = new Path.Rectangle(new Rectangle(430, 230, 60, 30), 5);
    runBox.fillColor = "#dddddd";
    
    var runText = new PointText(new Point(460, 250));
    runText.justification = "center";
    runText.fontSize = 18;
    runText.content = "Run";
    
    var runIcon = new Group([runBox, runText]);
    
    runIcon.onMouseEnter = function(event) {
        runBox.fillColor = "#aaaaaa";
    }
    
    runIcon.onMouseLeave = function(event) {
        runBox.fillColor = "#dddddd";
    }
    
    var playing = false;
    var count = 0;
    
    runIcon.onClick = function(event) {
        initDynamicElements();
        this.visible = false;
        weight = startingWeight;
        bias = startingBias;
        playing = true;
    }
    
    // The actual procedure
    
    function onFrame(event) {
        if (playing) {
    	a = outputValue(weight, bias);
    	delta = cost1.derivative(a);
    	weight += -eta*delta;
    	bias += -eta*delta;
    	weightText.content = paramContent("w = ", weight);
    	weightSlider.segments[1].point.x = 165+weight*20;
    	biasText.content = paramContent("b = ", bias);
    	biasSlider.segments[1].point.x = 275+bias*20;
    	output.content = outputContent(weight, bias);
    	if (count % 2 === 0) {epoch1.position.x += 1;}
    	costGraph1.add(new Point(epoch1.position.x, 250-cost1.scaling*cost1.fn(a)));
    	epoch1Number.content = count;
    	count += 1;
    	if (count > numFrames) {
    	    count = 0;
    	    runIcon.visible = true;
    	    playing = false;
    	}
    	}
    }
    
    function outputValue(weight, bias) {
        return sigmoid(weight+bias);
    }
    
    function outputContent(weight, bias) {
        return "Output: "+outputValue(weight, bias).toFixed(2);
    }
    
    function sigmoid(z) {
        return 1/(1+Math.exp(-z));
    }
    
    function arrow(point1, point2, width, color) {
        if (typeof width === 'undefined') {width=1};
        if (typeof color === 'undefined') {color='black'};
        delta = point1 - point2;
        n = delta/delta.length;
        nperp = new Point(-n.y, n.x);
        line = new Path(point1, point2);
        line.strokeColor = color;
        line.strokeWidth = width;
        arrow_stroke_1 = new Path(point2, point2+(n+nperp)*6);
        arrow_stroke_1.strokeWidth = width;
        arrow_stroke_1.strokeColor = color;
        arrow_stroke_2 = new Path(point2, point2+(n-nperp)*6);
        arrow_stroke_2.strokeWidth = width;
        arrow_stroke_2.strokeColor = color;
    }
    

      

    http://neuralnetworksanddeeplearning.com/js/saturation4.js

    // This is a paper.js widget to show a single neuron learning.  In
    // particular, the widget is used to show the learning slowdown that
    // occurs when the output is saturated.
    //
    // The same basic widget is used several times, in slightly different
    // configurations.  paper.js makes it somewhat complex to reuse the
    // code, so I have simply duplicated the code.  This can give rise to
    // bugs if one is not careful to keep the code in sync, so I have
    // separated the code into two pieces.
    //
    // The first piece is the header code.  This changes between widgets.
    // It sets up things like the starting weight, bias, cost function,
    // and so on -- things which may vary betweens widgets.
    //
    // The second piece is the body code.  This is almost exactly the same
    // for the different widgets.  Note, however, that the costGraphX and
    // epochX variables change name, due to a bug in the way paperjs
    // handles scope.
    //
    // We can make these changes by searching on costGraph1 and replacing
    // with costGraph2, costGraph3 etc, and by replacing epoch1 with
    // epoch2, epoch3 etc.
    //
    // This separation makes it easy to maintain the duplicated code.
    
    // HEADER CODE
    
    var startingWeight = 2.0;
    var startingBias = 2.0;
    var eta = 0.005;
    var numFrames = 300;
    
    quadratic_cost = {
        fn: function(a) {return a*a/2;},
        derivative: function(a) {return a*a*(1-a);},
        scaling: 240 // used to scale on the graph
    }
    
    cross_entropy_cost = {
        fn: function(a) {return -Math.log(1-a);},
        derivative: function(a) {return 1/(1-a);},
        scaling: 30
    }
    
    cost4 = cross_entropy_cost;
    
    // A path for the graph.  
    costGraph4 = new Path();
    costGraph4.strokeColor = "#2A6EA6";
    
    
    // BODY CODE
    
    // STATIC ELEMENTS
    //
    // Note that this includes some paper.js items which will later be
    // modified, e.g., the variables output and weightText.  This section
    // merely sets the static parts of the elements.
    
    var input = new PointText(new Point(8, 40));
    input.fontSize = 18;
    input.content = "Input: 1.0";
    
    arrow(new Point(100, 35), new Point(230, 35), 0.8); // input arrow
    
    var neuron = new Path.Circle(new Point(260, 35), 30);
    neuron.strokeColor = "black";
    
    arrow(new Point(290, 35), new Point(380, 35), 0.8); // output arrow
    
    // The output text's content will be set dynamically, later
    var output = new PointText(new Point(390, 40)); 
    output.fontSize = 18;
    
    // The weight text and bar
    var weightText = new PointText(new Point(120, 52));
    weightText.fontSize=14;
    var weightBar = new Path.Rectangle(new Rectangle(120, 57, 90, 9));
    weightBar.strokeColor = "grey";
    weightBar.strokeWidth = 1;
    var weightTick = new Path(new Point(165, 57), new Point(165, 71));
    weightTick.strokeColor = "black";
    var weightSlider = new Path.Line(
        new Point(165, 61.5), new Point(165+weight*20, 61.5));
    weightSlider.strokeColor = "#2A6EA6";
    weightSlider.strokeWidth = 9;
    
    // The bias text and bar
    var biasText = new PointText(new Point(230, 82));
    biasText.fontSize = 14;
    var biasBar = new Path.Rectangle(new Rectangle(230, 88, 90, 9));
    biasBar.strokeColor = "grey";
    biasBar.strokeWidth = 1;
    var biasTick = new Path(new Point(275, 88), new Point(275, 102));
    biasTick.strokeColor = "black";
    var biasSlider = new Path.Line(
        new Point(275, 92.5), new Point(275+bias*20, 92.5));
    biasSlider.strokeColor = "#2A6EA6";
    biasSlider.strokeWidth = 9;
    
    // Axes for the graph
    arrow(new Point(100, 250), new Point(100, 120));
    arrow(new Point(100, 250), new Point(130+numFrames/2, 250));
    
    // Labels on the axes
    var costText = new PointText(new Point(60, 145));
    costText.fontSize = 18;
    costText.content = "Cost";
    
    var epoch4LabelText = new PointText(new Point(140+numFrames/2, 255));
    epoch4LabelText.fontSize = 18;
    epoch4LabelText.content = "Epoch";
    
    // Marker for the current epoch
    var epoch4Tick = new Path(new Point(100, 250), new Point(100, 255));
    epoch4Tick.strokeColor = "black";
    
    var epoch4Number = new PointText(new Point(100, 267));
    epoch4Number.fontSize = 14;
    epoch4Number.justification = "center";
    
    // We group the epochTick and epochNumber, to make it easy to move
    epoch4 = new Group([epoch4Tick, epoch4Number]);
    
    // Initialize the dynamic elements.  It's convenient to do this in a
    // function, so that function can also be called upon a (re)start of
    // the widget.
    
    var weight, bias;
    initDynamicElements();
    
    function initDynamicElements() {
        weight = startingWeight;
        bias = startingBias;
        weightText.content = paramContent("w = ", weight);
        weightSlider.segments[1].point.x = 165+weight*20;
        biasText.content = paramContent("b = ", bias);
        biasSlider.segments[1].point.x = 275+bias*20;
        output.content = outputContent(weight, bias);
        epoch4.position.x = 100;
        epoch4Number.content = "0";
        costGraph4.removeSegments();
    }
    
    function paramContent(s, x) {
        sign = (x >= 0)? "+": "";
        return s+sign+x.toFixed(2);
    }
    
    // The run button
    
    var runBox = new Path.Rectangle(new Rectangle(430, 230, 60, 30), 5);
    runBox.fillColor = "#dddddd";
    
    var runText = new PointText(new Point(460, 250));
    runText.justification = "center";
    runText.fontSize = 18;
    runText.content = "Run";
    
    var runIcon = new Group([runBox, runText]);
    
    runIcon.onMouseEnter = function(event) {
        runBox.fillColor = "#aaaaaa";
    }
    
    runIcon.onMouseLeave = function(event) {
        runBox.fillColor = "#dddddd";
    }
    
    var playing = false;
    var count = 0;
    
    runIcon.onClick = function(event) {
        initDynamicElements();
        this.visible = false;
        weight = startingWeight;
        bias = startingBias;
        playing = true;
    }
    
    // The actual procedure
    
    function onFrame(event) {
        if (playing) {
    	a = outputValue(weight, bias);
    	delta = cost4.derivative(a);
    	weight += -eta*delta;
    	bias += -eta*delta;
    	weightText.content = paramContent("w = ", weight);
    	weightSlider.segments[1].point.x = 165+weight*20;
    	biasText.content = paramContent("b = ", bias);
    	biasSlider.segments[1].point.x = 275+bias*20;
    	output.content = outputContent(weight, bias);
    	if (count % 2 === 0) {epoch4.position.x += 1;}
    	costGraph4.add(new Point(epoch4.position.x, 250-cost4.scaling*cost4.fn(a)));
    	epoch4Number.content = count;
    	count += 1;
    	if (count > numFrames) {
    	    count = 0;
    	    runIcon.visible = true;
    	    playing = false;
    	}
    	}
    }
    
    function outputValue(weight, bias) {
        return sigmoid(weight+bias);
    }
    
    function outputContent(weight, bias) {
        return "Output: "+outputValue(weight, bias).toFixed(2);
    }
    
    function sigmoid(z) {
        return 1/(1+Math.exp(-z));
    }
    
    function arrow(point1, point2, width, color) {
        if (typeof width === 'undefined') {width=1};
        if (typeof color === 'undefined') {color='black'};
        delta = point1 - point2;
        n = delta/delta.length;
        nperp = new Point(-n.y, n.x);
        line = new Path(point1, point2);
        line.strokeColor = color;
        line.strokeWidth = width;
        arrow_stroke_1 = new Path(point2, point2+(n+nperp)*6);
        arrow_stroke_1.strokeWidth = width;
        arrow_stroke_1.strokeColor = color;
        arrow_stroke_2 = new Path(point2, point2+(n-nperp)*6);
        arrow_stroke_2.strokeWidth = width;
        arrow_stroke_2.strokeColor = color;
    }
    

      

  • 相关阅读:
    面向对象 :类的创建以及应用
    面向对象(1)
    HTML 表单和验证事件2
    HTML 表单和验证事件
    html的导航制作
    静态网页的window.document对象
    JavaScript的DOM操作
    Java Script基础
    静态网页的格式布局
    构造函数
  • 原文地址:https://www.cnblogs.com/rsapaper/p/7561677.html
Copyright © 2020-2023  润新知