public DeepBeliefNetwork(IStochasticFunction function, int inputsCount, params int[] hiddenNeurons)
: base(function, inputsCount, hiddenNeurons)
{
machines = new List<RestrictedBoltzmannMachine>();
// Create first layer
machines.Add(new RestrictedBoltzmannMachine(
hidden: new StochasticLayer(function, hiddenNeurons[0], inputsCount),
visible: new StochasticLayer(function, inputsCount, hiddenNeurons[0]))
);
// Create other layers
for (int i = 1; i < hiddenNeurons.Length; i++)
{
machines.Add(new RestrictedBoltzmannMachine(
hidden: new StochasticLayer(function, hiddenNeurons[i], hiddenNeurons[i - 1]),
visible: new StochasticLayer(function, hiddenNeurons[i - 1], hiddenNeurons[i])));
}
// Override AForge layers
layers = new Layer[machines.Count];
for (int i = 0; i < layers.Length; i++)
layers[i] = machines[i].Hidden;
}