コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
            }
        }