Ejemplo n.º 1
0
        public override void Update(NDArray labels, NDArray preds)
        {
            if (labels == null)
            {
                throw new ArgumentNullException(nameof(labels));
            }
            if (preds == null)
            {
                throw new ArgumentNullException(nameof(preds));
            }

            Logging.CHECK_EQ(labels.GetShape().Count, 1);

            var len       = labels.GetShape()[0];
            var predData  = new mx_float[len];
            var labelData = new mx_float[len];

            preds.ArgmaxChannel().SyncCopyToCPU(predData);
            labels.SyncCopyToCPU(labelData);

            for (var i = 0; i < len; ++i)
            {
                this.SumMetric += Math.Abs(predData[i] - labelData[i]) < float.Epsilon ? 1 : 0;
                this.NumInst   += 1;
            }
        }
Ejemplo n.º 2
0
 protected override void CreateState(int index, NDArray weight)
 {
     this._Mean[index] = new NDArray(weight.GetShape());
     this._Mean[index].Set(0);
     this._Var[index] = new NDArray(weight.GetShape());
     this._Var[index].Set(0);
 }
Ejemplo n.º 3
0
 protected override void CreateState(int index, NDArray weight)
 {
     this._AccG[index] = new NDArray(weight.GetShape(), weight.GetContext());
     this._AccG[index].Set(0);
     this._AccDelta[index] = new NDArray(weight.GetShape(), weight.GetContext());
     this._AccDelta[index].Set(0);
 }
 protected override void CreateState(int index, NDArray weight)
 {
     this._N[index] = new NDArray(weight.GetShape());
     this._N[index].Set(0);
     this._G[index] = new NDArray(weight.GetShape());
     this._G[index].Set(0);
     this._Delta[index] = new NDArray(weight.GetShape());
     this._Delta[index].Set(0);
 }
Ejemplo n.º 5
0
        public override void Update(NDArray labels, NDArray preds)
        {
            if (labels == null)
            {
                throw new ArgumentNullException(nameof(labels));
            }
            if (preds == null)
            {
                throw new ArgumentNullException(nameof(preds));
            }

            var len       = labels.GetShape()[0];
            var m         = preds.GetShape()[1];
            var predData  = new mx_float[len * m];
            var labelData = new mx_float[len];

            preds.SyncCopyToCPU(predData);
            labels.SyncCopyToCPU(labelData);

            for (var i = 0; i < len; ++i)
            {
                // ToDo: (int)(i * m + labelData[i]) is no problem?
                this.SumMetric += (float)(-Math.Log(Math.Max(predData[(int)(i * m + labelData[i])], Epsilon)));
                this.NumInst   += 1;
            }
        }
Ejemplo n.º 6
0
 protected static void CheckLabelShapes(NDArray labels, NDArray preds, bool strict = false)
 {
     if (strict)
     {
         Logging.CHECK_EQ(new Shape(labels.GetShape()), new Shape(preds.GetShape()));
     }
     else
     {
         Logging.CHECK_EQ(labels.Size, preds.Size);
     }
 }
Ejemplo n.º 7
0
 protected override void CreateState(int index, NDArray weight)
 {
     if (!this.Params.ContainsKey("momentum"))
     {
         this._States[index] = null;
     }
     else
     {
         this._States[index] = new NDArray(weight.GetShape(), weight.GetContext());
         this._States[index].Set(0);
     }
 }
Ejemplo n.º 8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="lhs">first input</param>
        /// <param name="rhs">second input</param>
        /// <returns>returns new symbol</returns>
        public static NDArray GreaterEqual(NDArray lhs, float rhs)
        {
            float[] rhsdata = new float[lhs.Size];
            for (ulong i = 0; i < lhs.Size; i++)
            {
                rhsdata[i] = rhs;
            }


            NDArray rhsArray = new NDArray(rhsdata, new Shape(lhs.GetShape()));

            return(new Operator("_greater_equal")
                   .SetInput("lhs", lhs)
                   .SetInput("rhs", rhsArray)
                   .Invoke().First());
        }
Ejemplo n.º 9
0
        protected virtual void InitBilinear(NDArray array)
        {
            var shape  = new Shape(array.GetShape());
            var size   = (int)shape.Size;
            var weight = new float[size];
            var f      = Math.Ceiling(shape[3] / 2.0f);
            var c      = (2 * f - 1 - f % 2) / (2.0 * f);

            for (var i = 0; i < size; ++i)
            {
                var x = i % shape[3];
                var y = (i / shape[3]) % shape[2];
                weight[i] = (float)((1 - Math.Abs(x / f - c)) * (1 - Math.Abs(y / f - c)));
            }

            array.SyncCopyFromCPU(weight);
        }
Ejemplo n.º 10
0
        public override void Operator(string name, NDArray array)
        {
            var shape   = new Shape(array.GetShape());
            var hwScale = 1.0f;

            if (shape.Dimension > 2)
            {
                for (uint i = 2; i < shape.Dimension; ++i)
                {
                    hwScale *= shape[i];
                }
            }

            var @in    = shape[1] * hwScale;
            var @out   = shape[0] * hwScale;
            var factor = 1.0f;

            switch (this.Factor)
            {
            case FactorType.Average:
                factor = (@in + @out) / 2.0f;
                break;

            case FactorType.In:
                factor = @in;
                break;

            case FactorType.Out:
                factor = @out;
                break;
            }

            var scale = (float)Math.Sqrt(this.Magnitude / factor);

            switch (this.Rand)
            {
            case RandType.Uniform:
                NDArray.SampleUniform(-scale, scale, array);
                break;

            case RandType.Gaussian:
                NDArray.SampleGaussian(0, scale, array);
                break;
            }
        }