private static Function CreateMLPClassifier(DeviceDescriptor device, int numOutputClasses, int hiddenLayerDim, Function input, string classifierName) { Function dense1 = CNTKHelper.Dense(input, hiddenLayerDim, device, Activation.Sigmoid, ""); Function classifierOutput = CNTKHelper.Dense(dense1, numOutputClasses, device, Activation.None, classifierName); return(classifierOutput); }
/// <summary> /// Create convolution neural network /// </summary> /// <param name="features">input feature variable</param> /// <param name="outDims">number of output classes</param> /// <param name="device">CPU or GPU device to run the model</param> /// <param name="classifierName">name of the classifier</param> /// <returns>the convolution neural network classifier</returns> static Function CreateConvolutionalNeuralNetwork(Variable features, int inputLayers, int outDims, DeviceDescriptor device, string classifierName) { // 28x28x1 -> 14x14x4 int kernelWidth1 = 3, kernelHeight1 = 3, outFeatureMapCount1 = 4; int hStride1 = 2, vStride1 = 2; int poolingWindowWidth1 = 3, poolingWindowHeight1 = 3; Function pooling1 = ConvolutionWithMaxPooling(features, device, kernelWidth1, kernelHeight1, inputLayers, outFeatureMapCount1, hStride1, vStride1, poolingWindowWidth1, poolingWindowHeight1); // 14x14x4 -> 7x7x8 int kernelWidth2 = 3, kernelHeight2 = 3, numInputChannels2 = outFeatureMapCount1, outFeatureMapCount2 = 8; int hStride2 = 2, vStride2 = 2; int poolingWindowWidth2 = 3, poolingWindowHeight2 = 3; Function pooling2 = ConvolutionWithMaxPooling(pooling1, device, kernelWidth2, kernelHeight2, numInputChannels2, outFeatureMapCount2, hStride2, vStride2, poolingWindowWidth2, poolingWindowHeight2); Function denseLayer = CNTKHelper.Dense(pooling2, outDims, device, Activation.None, classifierName); return(denseLayer); }