public static Network CreateNetworkMaxout(GPUModule module, int minibatchSize) { var net = new Network(module, minibatchSize: minibatchSize); net.AddInputLayer(Constants.TOTAL_VALUE_COUNT, sparseDataSize: minibatchSize * RawRecord.FEATURE_COUNT * 2); net.AddLabelLayer(1); var fc1 = net.AddFullyConnectedLayer(128, "FC1"); fc1.Weights.InitValuesUniformCPU(0.1f); fc1.L2Regularization = 0.00001f; fc1.RegularizationRatio = 10; net.AddMaxoutLayer("MAXOUT1", groupsize: 4); var fc2 = net.AddFullyConnectedLayer(256, "FC2"); fc2.Weights.InitValuesUniformCPU(0.1f); net.AddMaxoutLayer("MAXOUT2", groupsize: 2); net.AddDropoutLayer(); var sm = net.AddSoftmaxLayer(2, "SMAX"); sm.Weights.InitValuesUniformCPU(0.1f); return(net); }
static void Main(string[] args) { var config = new NetworkConfiguration( CostFunctionType.Quadratic, new FlatDecayer(0.5), 28, 1); var network = new Network(config); network.AddConvolutionalLayer(5, 5, LearningRateAnnealerType.Adagrad); network.AddPoolingLayer(2); network.AddDetectorLayer(ActivatorType.LogisticActivator); network.AddConvolutionalLayer(5, 3, LearningRateAnnealerType.Adagrad); network.AddPoolingLayer(2); network.AddDetectorLayer(ActivatorType.LogisticActivator); network.AddFullyConnectedLayer(5, ActivatorType.LogisticActivator, LearningRateAnnealerType.Adagrad); network.AddFullyConnectedLayer(4, ActivatorType.LogisticActivator, LearningRateAnnealerType.Adagrad); foreach (var item in MnistReader.ReadTrainingData()) { var data = item.Data.ConvertPixels(); var input = new double[1, data.GetLength(0), data.GetLength(1)]; for (int i = 0; i < data.GetLength(0); i++) { for (int j = 0; j < data.GetLength(1); j++) { input[0, i, j] = data[i, j]; } } var error = network.TrainModel(input, GetTargetOutput(item.Label)); } }