Правильный способ расчета выхода слоя в нейронной сети - PullRequest
0 голосов
/ 05 января 2020

Я хочу создать многослойную нейронную сеть с нуля. Сначала я создал Neuron класс для связи со входами и создания одного выхода:

Наиболее важные функции в Neuron классе:

    public double feedForward(double[] inputs) {
        validateInputs(inputs); // check if array is empty or null
        double weightedSum = weightedSum(inputs);
        return this.activationFunction.computeOutcome(weightedSum); //interface for activation function
    }

    private double weightedSum(double[] inputs) {
        double temp = 0.0;
        for (int i = 0; i < this.numOfInputs; i++) {
            temp += inputs[i] * this.weights[i];
        }
        return temp + this.bias;
    }

Затем я хотел обобщить Neuron, поэтому я создал класс NetworkLayer, в котором хранится множество Neuron с. Это должно иметь функциональность для получения результата на основе каждого Neuron feedForward(inputs[]) вызова. Но я сомневаюсь, как мне точно рассчитать этот результат. Должен ли отдельный слой иметь свою собственную функцию активации, веса и смещения? Потому что теперь у меня есть эта функциональность внутри NetworkLayer, и я не уверен, что это хороший подход:

    public double[] feedForward(double[] inputs) {
        double[] outputs = new double[this.neurons.length];
        for (int i = 0; i < this.neurons.length; i++) {
            outputs[i] = this.neurons[i].feedForward(inputs);
        }
        double ffVal = new Neuron(inputs.length, 0, new RandomNormal(), new BinaryStepFunction()).feedForward(outputs);
        Arrays.fill(outputs, ffVal);
        return outputs;
    }

Я думаю, что я не должен создавать еще один Neuron для вычисления вывода. Как мне заменить это?

...