Я хочу создать многослойную нейронную сеть с нуля. Сначала я создал 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
для вычисления вывода. Как мне заменить это?