private static NeuralNetwork InitializeNeuralNetwork(int seed) { Random random = new Random(seed == 0 ? new Random().Next() : seed); float RandomWeight() => (float)(random.NextDouble() * 2 - 1); Layer prevLayer; InputLayer li = new InputLayer(3, 5); prevLayer = li; ConvolutionalLayer l0 = new ConvolutionalLayer(8, 2, 1, 0, prevLayer, ActivationFunctions.ReLU(true)); prevLayer = l0; prevLayer.InitializeWeights(RandomWeight); ConvolutionalLayer l2 = new ConvolutionalLayer(16, 2, 1, 0, prevLayer, ActivationFunctions.ReLU(true)); prevLayer = l2; prevLayer.InitializeWeights(RandomWeight); FullyConnectedLayer l7 = new FullyConnectedLayer(16, prevLayer, ActivationFunctions.Sigmoid(1)); prevLayer = l7; prevLayer.InitializeWeights(RandomWeight); FullyConnectedLayer l8 = new FullyConnectedLayer(10, prevLayer, ActivationFunctions.SoftMax(1)); prevLayer = l8; prevLayer.InitializeWeights(RandomWeight); return(new NeuralNetwork(li, l0, l2, l7, l8)); }
private static NeuralNetwork InitializeNeuralNetwork(int seed) { Random random = new Random(seed == 0 ? new Random().Next() : seed); float RandomWeight() => (float)(random.NextDouble() * 2 - 1); Layer prevLayer; InputLayer li = new InputLayer(28, 28); prevLayer = li; ConvolutionalLayer l0 = new ConvolutionalLayer(15, 5, 1, 0, prevLayer, ActivationFunctions.ReLU(true)); prevLayer = l0; prevLayer.InitializeWeights(RandomWeight); MaxPoolingLayer l1 = new MaxPoolingLayer(2, 2, prevLayer); prevLayer = l1; ConvolutionalLayer l2 = new ConvolutionalLayer(30, 4, 1, 0, prevLayer, ActivationFunctions.ReLU(true)); prevLayer = l2; prevLayer.InitializeWeights(RandomWeight); MaxPoolingLayer l3 = new MaxPoolingLayer(3, 2, prevLayer); prevLayer = l3; ConvolutionalLayer l4 = new ConvolutionalLayer(45, 2, 2, 0, prevLayer, ActivationFunctions.ReLU(true)); prevLayer = l4; prevLayer.InitializeWeights(RandomWeight); MaxPoolingLayer l5 = new MaxPoolingLayer(2, 1, prevLayer); prevLayer = l5; FullyConnectedLayer l6 = new FullyConnectedLayer(64, prevLayer, ActivationFunctions.Sigmoid(1)); prevLayer = l6; prevLayer.InitializeWeights(RandomWeight); FullyConnectedLayer l7 = new FullyConnectedLayer(32, prevLayer, ActivationFunctions.Sigmoid(1)); prevLayer = l7; prevLayer.InitializeWeights(RandomWeight); FullyConnectedLayer l8 = new FullyConnectedLayer(10, prevLayer, ActivationFunctions.SoftMax(1)); prevLayer = l8; prevLayer.InitializeWeights(RandomWeight); return(new NeuralNetwork(li, l0, l1, l2, l3, l4, l5, l6, l7, l8)); }