Нужно сделать прямое распространение сигнала сети. В качестве самой сети я использую массив массивов нейронов (каждый вложенный массив представляет из себя слой сети).
Вотpublic void forwardPropagation(ArrayList<Double> inputData)
{
int layersCount = neuronLayers.size();
for (int i = 0; i < layersCount; i++)
{
ArrayList<Neuron> layer = neuronLayers.get(i);
//если первый, входной слой
if (i == 0)
for (int j = 0; j < layer.size(); j++)
{
Neuron neuron = layer.get(j);
neuron.neuronValue = inputData.get(j);
layer.set(j, neuron);
}
else
{
ArrayList<Neuron> prevLayer = neuronLayers.get(i-1);
for (int j = 0; j < layer.size(); j++)
{
Neuron neuron = layer.get(j);
double sum = 0;
for (int k = 0; k < neuron.inputWeights.size(); k++)
{
Neuron prevNeuron = prevLayer.get(k);
sum += prevNeuron.neuronValue * neuron.inputWeights.get(k);
}
neuron.neuronValue = neuron.activate(sum);
layer.set(j, neuron);
}
}
this.neuronLayers.set(i, layer);
}
}
функция для прямого распространения.
Когда я хочу узнать ответ, то я возвращаю последний слой сети (в отдельном методе) и вывожу эти значения. Проблема в том, что в независимости от входных данных, сеть выдает один и тот же ответ. Когда я решил просмотреть значения нейронов, то выяснил, что значения входного слоя не соответствуют входным данным, думаю, что проблема в этом.
Почему не присваиваются значения входному слою?
P.S. Код нейрона могу выложить по просьбе