示例#1
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="inputWidth"></param>
 /// <param name="inputHeight"></param>
 /// <param name="receptiveFieldWidth"></param>
 /// <param name="receptiveFieldHeight"></param>
 /// <param name="offsetWidth"></param>
 /// <param name="offsetHeight"></param>
 /// <param name="activationFunctionType">激活函数类型,1:tanh,2:PReLU,3:Sigmoid</param>
 /// <param name="inputCount"></param>
 /// <param name="outputCount"></param>
 public CnnKernel(int inputWidth, int inputHeight, int receptiveFieldWidth, int receptiveFieldHeight,
                  int offsetWidth, int offsetHeight, ActivationFunctionTypes activationFunctionType, int inputCount, int outputCount, bool standardization)
 {
     this.receptiveFieldWidth     = receptiveFieldWidth;
     this.receptiveFieldHeight    = receptiveFieldHeight;
     this.inputWidth              = inputWidth;
     this.inputHeight             = inputHeight;
     this.offsetWidth             = offsetWidth;
     this.offsetHeight            = offsetHeight;
     this.ActivationFunctionType  = activationFunctionType;
     this.InputCount              = inputCount;
     this.OutputCount             = outputCount;
     this.Standardization         = standardization;
     this.ConvolutionKernelWidth  = Convert.ToInt32(Math.Ceiling((inputWidth - receptiveFieldWidth) / (double)offsetWidth)) + 1;
     this.ConvolutionKernelHeight = Convert.ToInt32(Math.Ceiling((inputHeight - receptiveFieldHeight) / (double)offsetHeight)) + 1;
     ShareWeight     = new List <double[, ]>();
     meanDeltaWeight = new List <double[, ]>();
     for (int i = 0; i < inputCount; i++)
     {
         ShareWeight.Add(new double[receptiveFieldWidth, receptiveFieldHeight]);
         meanDeltaWeight.Add(new double[receptiveFieldWidth, receptiveFieldHeight]);
     }
     meanListDeltaWeight = new List <List <double[, ]> >();
     meanListDeltaOffset = new List <double>();
     InitShareWeight();
 }
示例#2
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="InputCount"></param>
 /// <param name="OutputCount"></param>
 /// <param name="activationFunctionType">激活函数类型,1:tanh,2:PReLU,3:Sigmoid</param>
 public CnnFullLayer(int InputCount, int OutputCount, ActivationFunctionTypes activationFunctionType, bool standardization)
 {
     this.InputCount             = InputCount;
     this.OutputCount            = OutputCount;
     this.ActivationFunctionType = activationFunctionType;
     this.Standardization        = standardization;
     InputWeight         = new double[OutputCount, InputCount];
     OutputOffset        = new double[OutputCount];
     meanDeltaWeight     = new double[OutputCount, InputCount];
     meanDeltaOffset     = new double[OutputCount];
     meanListDeltaWeight = new List <double[, ]>();
     meanListDeltaOffset = new List <double[]>();
     InitInputWeight();
 }
示例#3
0
 //Called from the neural net, sets the outputs based on node's connections
 //Used for the hidden layers and final output layer
 public void SetOutput(ActivationFunctionTypes activationFunctionUsed)
 {
     output = 0;
     //Cycle through all the inputs into this node
     foreach (var nodeConnection in inputConnections)
     {
         //Add them together, including the weighting for each individual node
         SumInput(nodeConnection);
     }
     //Add the node's bias on to outputs
     output += bias;
     //Adjust the data so we receive sensible results
     ActivationTanH(output);
 }
示例#4
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="inputWidth"></param>
 /// <param name="inputHeight"></param>
 /// <param name="receptiveFieldWidth"></param>
 /// <param name="receptiveFieldHeight"></param>
 /// <param name="poolingType">池化类型,1:平均池化(Mean Pooling),2:最大值池化(Max Pooling)</param>
 public CnnPooling(int inputWidth, int inputHeight, int receptiveFieldWidth, int receptiveFieldHeight,
                   ActivationFunctionTypes activationFunctionType, PoolingTypes poolingType, int inputCount, int outputCount)
 {
     this.receptiveFieldWidth     = receptiveFieldWidth;
     this.receptiveFieldHeight    = receptiveFieldHeight;
     this.inputWidth              = inputWidth;
     this.inputHeight             = inputHeight;
     this.ActivationFunctionType  = activationFunctionType;
     this.PoolingType             = poolingType;
     this.InputCount              = inputCount;
     this.OutputCount             = outputCount;
     this.ConvolutionKernelWidth  = Convert.ToInt32(Math.Ceiling(inputWidth / (double)receptiveFieldWidth));
     this.ConvolutionKernelHeight = Convert.ToInt32(Math.Ceiling(inputHeight / (double)receptiveFieldWidth));
     OutputPoolingMax             = new int[ConvolutionKernelWidth, ConvolutionKernelHeight];
     InitShareWeight();
 }