public virtual double[] Compute(double[] input)
{
// local variable to avoid mutlithread conflicts
double[] output = input;
// compute each layer
for (int i = 0; i < layers.Length; i++)
{
output = layers[i].Compute(output);
}
// assign output property as well (works correctly for single threaded usage)
this.output = output;
return output;
}