public static IConvLayer ToConvLayer(this CnnLayer layer) { switch (layer.LayerType) { case (byte)LayerType.CovolutionalLayer: var convLayer = new ConvolutionalLayer { Kernels = new List <double[][][]>(), KernelPadding = 0, KernelStride = 1, KernelSize = layer.KernelHeight }; var weights = layer.Weights.Weights.Split(';'); for (int i = 0; i < layer.KernelsCount; ++i) { var kernels = new double[layer.FeatureMapsCountIn][][]; for (int j = 0; j < layer.FeatureMapsCountIn; ++j) { kernels[j] = new double[layer.KernelHeight][]; for (int a = 0; a < layer.KernelHeight; ++a) { kernels[j][a] = new double[layer.KernelWidth]; for (int b = 0; b < layer.KernelWidth; ++b) { kernels[j][a][b] = double.Parse(weights[j * layer.KernelHeight * layer.KernelWidth + a * layer.KernelWidth + b]); } } } convLayer.Kernels.Add(kernels); } return(convLayer); case (byte)LayerType.PoolingLayer: var poolingLayer = new PollingLayer(layer.KernelHeight, 0, 1); return(poolingLayer); case (byte)LayerType.ReluLayer: var reluLayer = new ReLuLayer(); return(reluLayer); default: throw new Exception(); } }
public static IConvLayer Create(int neuronsCount = 0, int inputMapsCount = 0, int kernelsCount = 0, byte layerType = 0, double lr = 0, int prevNeuronsCount = 0) { switch (layerType) { case (byte)LayerType.CovolutionalLayer: var convLayer = new ConvolutionalLayer { Kernels = new List <double[][][]>(), LearningRate = lr, KernelPadding = 0, KernelStride = 1, KernelSize = 3 }; var kernels = new double[inputMapsCount][][]; for (int i = 0; i < kernelsCount; ++i) { for (int j = 0; j < inputMapsCount; ++j) { kernels[j] = CreateKernel(3, neuronsCount); } convLayer.Kernels.Add(kernels); } return(convLayer); case (byte)LayerType.PoolingLayer: var poolingLayer = new PollingLayer(2, 0, 1); return(poolingLayer); case (byte)LayerType.ReluLayer: var reluLayer = new ReLuLayer(); return(reluLayer); default: throw new Exception(); } }