【问题标题】:Is this a neural network这是一个神经网络吗
【发布时间】:2018-02-19 00:31:32
【问题描述】:

过去 2 天我一直在观看有关神经网络的 youtube 视频。

特别是,我一直在尝试实现一种会随着时间而发展的遗传算法,但是,大多数视频似乎都集中在经过训练然后用于分类的神经网络上。

感到困惑,我决定简单地尝试实现网络的基本结构,并将其编码为 JS,为方便起见。

function sigmoid (x) { return  1 / (1 + Math.E ** -x); }
function Brain(inputs, hiddens, outputs) {
    this.weights = {
        hidden: [],
        output: []
    };

    for (var i = hiddens; i--;) {
        this.weights.hidden[i] = [];
        for (var w = inputs; w--;) this.weights.hidden[i].push(Math.random());
    }
    for (var i = outputs; i--;) {
        this.weights.output[i] = [];
        for (var w = hiddens; w--;) this.weights.output[i].push(Math.random());
    }
}

Brain.prototype.compute = function(inputs) {
    var hiddenInputs = [];
    for (var i = this.weights.hidden.length; i--;) {
        var dot = 0;
        for (var w = inputs.length; w--;) dot += inputs[w] * this.weights.hidden[i][w];
        hiddenInputs[i] = sigmoid(dot);
    }

    var outputs = [];
    for (var i = this.weights.output.length; i--;) {
        var dot = 0;
        for (var w = this.weights.hidden.length; w--;) dot += hiddenInputs[w] * this.weights.output[i][w];
        outputs[i] = sigmoid(dot);
    }
    return outputs;
}

var brain = new Brain(1,2,1);
brain.compute([1]);

我成功地获得了 0 到 1 之间的值。而且,当我使用特定的权重时,对于恒定输入,我每次都获得相同的值。

  1. 我在代码中使用的术语好吗?

  2. 我担心我可能只是观察到误报,而实际上并没有前馈。

  3. sigmoid 函数是否合适?我应该将它用于遗传/进化算法吗?

我注意到我得到的结果只在 0.5 和 1 之间;

【问题讨论】:

    标签: javascript algorithm neural-network genetic-algorithm


    【解决方案1】:

    要将神经网络与遗传算法相结合,您的最佳选择可能是 NEAT。这个算法在JS中有一个很好的实现叫做'Neataptic',你应该可以在github上找到它。

    将 GA 与 ANN 结合时,您通常不仅要调整权重,还要调整结构。

    Sigmoid 激活对于 GA 来说是可以的,但在许多情况下您还需要其他激活函数,您可以在 wikipedia 上找到一小部分激活函数或创建自己的激活函数。

    【讨论】:

      猜你喜欢
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 2017-05-21
      • 2018-09-24
      • 2012-11-03
      • 2019-12-06
      • 1970-01-01
      相关资源
      最近更新 更多