public Linear( int inputCount, int outputCount, bool noBias = false, Array initialW = null, Array initialb = null, CompressibleActivation activation = null, string name = FUNCTION_NAME, string[] inputNames = null, string[] outputNames = null, bool gpuEnable = false ) : base( FUNCTION_NAME, activation, new[] { new KeyValuePair <string, string>(PARAM_NAME, PARAM_VALUE) }, name, inputNames, outputNames, gpuEnable) { OutputCount = outputCount; InputCount = inputCount; Weight = new NdArray(outputCount, inputCount); Weight.Name = Name + ".Weight"; NoBias = noBias; Parameters = new NdArray[noBias ? 1 : 2]; if (initialW == null) { Initializer.InitWeight(Weight); } else { Weight.Data = Real.GetArray(initialW); } Parameters[0] = Weight; if (!noBias) { Bias = new NdArray(outputCount); Bias.Name = Name + ".Bias"; if (initialb != null) { Bias.Data = Real.GetArray(initialb); } Parameters[1] = Bias; } SetArray(Weight.Name, Weight); SetArray(Bias.Name, Bias); }
private static void HandleGPU(bool verbose, Stopwatch sw, CompressibleActivation ca, NdArray nArray) { sw.Restart(); NdArray[] gradArrayGpu = ca.Forward(verbose, nArray); sw.Stop(); if (verbose) { RILogManager.Default?.SendDebug("Forward [Gpu] : " + (sw.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L))).ToString("n0") + "μs"); } gradArrayGpu[0].Grad = gradArrayGpu[0].Data; sw.Restart(); ca.Backward(verbose, gradArrayGpu); sw.Stop(); if (verbose) { RILogManager.Default?.SendDebug("Backward[Gpu] : " + (sw.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L))).ToString("n0") + "μs"); } }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Initializes a new instance of the KelpNet.Functions.Connections.Deconvolution2D class. /// </summary> /// /// <param name="verbose"> True to verbose. </param> /// <param name="inputChannels"> The input channels. </param> /// <param name="outputChannels"> The output channels. </param> /// <param name="kSize"> The size. </param> /// <param name="subSample"> (Optional) The sub sample. </param> /// <param name="trim"> (Optional) The trim. </param> /// <param name="noBias"> (Optional) True to no bias. </param> /// <param name="initialW"> (Optional) The initial w. </param> /// <param name="initialb"> (Optional) The initialb. </param> /// <param name="activation"> (Optional) The activation. </param> /// <param name="name"> (Optional) The name. </param> /// <param name="inputNames"> (Optional) List of names of the inputs. </param> /// <param name="outputNames"> (Optional) List of names of the outputs. </param> /// <param name="gpuEnable"> (Optional) True if GPU enable. </param> //////////////////////////////////////////////////////////////////////////////////////////////////// public Deconvolution2D(bool verbose, int inputChannels, int outputChannels, int kSize, int subSample = 1, int trim = 0, bool noBias = false, [CanBeNull] Array initialW = null, [CanBeNull] Array initialb = null, [CanBeNull] CompressibleActivation activation = null, [CanBeNull] string name = FUNCTION_NAME, [CanBeNull] string[] inputNames = null, [CanBeNull] string[] outputNames = null, bool gpuEnable = false) : base(verbose, FUNCTION_NAME, activation, new [] { new KeyValuePair <string, string>(PARAM_NAME, PARAM_VALUE) }, name, inputNames, outputNames, gpuEnable) { _kWidth = kSize; _kHeight = kSize; _trimX = trim; _trimY = trim; _subSampleX = subSample; _subSampleY = subSample; NoBias = noBias; Parameters = new NdArray[noBias ? 1 : 2]; OutputCount = outputChannels; InputCount = inputChannels; Initialize(initialW, initialb); }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Initializes a new instance of the KelpNet.Functions.Connections.Deconvolution2D class. /// </summary> /// /// <param name="verbose"> True to verbose. </param> /// <param name="inputChannels"> The input channels. </param> /// <param name="outputChannels"> The output channels. </param> /// <param name="kSize"> The size. </param> /// <param name="subSample"> (Optional) The sub sample. </param> /// <param name="trim"> (Optional) The trim. </param> /// <param name="noBias"> (Optional) True to no bias. </param> /// <param name="initialW"> (Optional) The initial w. </param> /// <param name="initialb"> (Optional) The initialb. </param> /// <param name="activation"> (Optional) The activation. </param> /// <param name="name"> (Optional) The name. </param> /// <param name="inputNames"> (Optional) List of names of the inputs. </param> /// <param name="outputNames"> (Optional) List of names of the outputs. </param> /// <param name="gpuEnable"> (Optional) True if GPU enable. </param> //////////////////////////////////////////////////////////////////////////////////////////////////// public Deconvolution2D(bool verbose, int inputChannels, int outputChannels, Size kSize, Size subSample = new Size(), Size trim = new Size(), bool noBias = false, [CanBeNull] Array initialW = null, [CanBeNull] Array initialb = null, [CanBeNull] CompressibleActivation activation = null, [CanBeNull] string name = FUNCTION_NAME, [CanBeNull] string[] inputNames = null, [CanBeNull] string[] outputNames = null, bool gpuEnable = false) : base(verbose, FUNCTION_NAME, activation, new [] { new KeyValuePair <string, string>(PARAM_NAME, PARAM_VALUE) }, name, inputNames, outputNames, gpuEnable) { if (subSample == Size.Empty) { subSample = new Size(1, 1); } if (trim == Size.Empty) { trim = new Size(0, 0); } _kWidth = kSize.Width; _kHeight = kSize.Height; _trimX = trim.Width; _trimY = trim.Height; NoBias = noBias; _subSampleX = subSample.Width; _subSampleY = subSample.Height; Parameters = new NdArray[noBias ? 1 : 2]; OutputCount = outputChannels; InputCount = inputChannels; Initialize(initialW, initialb); }
public Convolution2D(int inputChannels, int outputChannels, Size kSize, Size stride = new Size(), Size pad = new Size(), bool noBias = false, Array initialW = null, Array initialb = null, CompressibleActivation activation = null, string name = FUNCTION_NAME, string[] inputNames = null, string[] outputNames = null, bool gpuEnable = false) : base(FUNCTION_NAME, activation, new[] { new KeyValuePair <string, string>(PARAM_NAME, PARAM_VALUE) }, name, inputNames, outputNames, gpuEnable) { if (pad == Size.Empty) { pad = new Size(0, 0); } if (stride == Size.Empty) { stride = new Size(1, 1); } _kWidth = kSize.Width; _kHeight = kSize.Height; _strideX = stride.Width; _strideY = stride.Height; _padX = pad.Width; _padY = pad.Height; NoBias = noBias; Parameters = new NdArray[noBias ? 1 : 2]; OutputCount = outputChannels; InputCount = inputChannels; Initialize(initialW, initialb); }
public Convolution2D(int inputChannels, int outputChannels, int kSize, int stride = 1, int pad = 0, bool noBias = false, Array initialW = null, Array initialb = null, CompressibleActivation activation = null, string name = FUNCTION_NAME, string[] inputNames = null, string[] outputNames = null, bool gpuEnable = false) : base(FUNCTION_NAME, activation, new[] { new KeyValuePair <string, string>(PARAM_NAME, PARAM_VALUE) }, name, inputNames, outputNames, gpuEnable) { _kWidth = kSize; _kHeight = kSize; _strideX = stride; _strideY = stride; _padX = pad; _padY = pad; NoBias = noBias; Parameters = new NdArray[noBias ? 1 : 2]; OutputCount = outputChannels; InputCount = inputChannels; Initialize(initialW, initialb); }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Initializes a new instance of the KelpNet.Functions.Connections.Linear class. /// </summary> /// /// <param name="verbose"> True to verbose. </param> /// <param name="inputCount"> Number of inputs. </param> /// <param name="outputCount"> Number of outputs. </param> /// <param name="noBias"> (Optional) True to no bias. </param> /// <param name="initialW"> (Optional) The initial w. </param> /// <param name="initialb"> (Optional) The initialb. </param> /// <param name="activation"> (Optional) The activation. </param> /// <param name="name"> (Optional) The name. </param> /// <param name="inputNames"> (Optional) List of names of the inputs. </param> /// <param name="outputNames"> (Optional) List of names of the outputs. </param> /// <param name="gpuEnable"> (Optional) True if GPU enable. </param> //////////////////////////////////////////////////////////////////////////////////////////////////// public Linear(bool verbose, int inputCount, int outputCount, bool noBias = false, [CanBeNull] Array initialW = null, [CanBeNull] Array initialb = null, [CanBeNull] CompressibleActivation activation = null, [CanBeNull] string name = FUNCTION_NAME, [CanBeNull] string[] inputNames = null, [CanBeNull] string[] outputNames = null, bool gpuEnable = false) : base(verbose, FUNCTION_NAME, activation, new[] { new KeyValuePair <string, string>(PARAM_NAME, PARAM_VALUE) }, name, inputNames, outputNames, gpuEnable) { Verbose = verbose; OutputCount = outputCount; InputCount = inputCount; Weight = new NdArray(outputCount, inputCount) { Name = Name + " Weight" }; NoBias = noBias; Parameters = new NdArray[noBias ? 1 : 2]; if (initialW == null) { Initializer.InitWeight(Weight); } else { Weight.Data = Real.GetArray(initialW); } Parameters[0] = Weight; if (Verbose) { RILogManager.Default?.ViewerSendWatch(Name + " Weight", Weight.Length <= 30 ? Weight : Weight.Shape.Length); } if (!noBias) { Bias = new NdArray(outputCount) { Name = Name + " Bias" }; if (initialb != null) { Bias.Data = Real.GetArray(initialb); } Parameters[1] = Bias; if (Verbose) { RILogManager.Default?.ViewerSendWatch(Name + " Bias", Bias.Length <= 30 ? Bias : Bias.Shape.Length); } } }