Beispiel #1
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;
            }
        }