Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <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);
                }
            }
        }