Ejemplo n.º 1
0
 //適当な値の配列を作る
 public static void GetRealArray(Real[] result, Real max = 1, Real min = 0)
 {
     for (int i = 0; i < result.Length; i++)
     {
         result[i] = (max - min) * Broth.Random() - min;
     }
 }
Ejemplo n.º 2
0
        //初期値が入力されなかった場合、この関数で初期化を行う
        public static void InitHeNorm(NdArray <Real> array, Real masterScale = 1)
        {
            Real s = masterScale * Math.Sqrt(2.0f / array.Length);

            for (int i = 0; i < array.Data.Length; i++)
            {
                array.Data[i] = Broth.RandomNormal(s);
            }
        }
Ejemplo n.º 3
0
        public static void InitXavier(NdArray <Real> array)
        {
            Real fanOut = array.Shape.Length > 1 ? array.Shape[array.Shape.Length - 2] : array.Shape[array.Shape.Length - 1];
            Real fanIn  = array.Shape[array.Shape.Length - 1];

            Real n = (fanIn + fanOut) / 2.0f;

            Real limit = Math.Sqrt(3.0f / n);

            for (int i = 0; i < array.Data.Length; i++)
            {
                array.Data[i] = (limit * 2.0f) * Broth.Random() - limit;
            }
        }
Ejemplo n.º 4
0
        // 平均mu, 標準偏差sigmaの正規分布乱数を得る。Box-Muller法による。
        public static Real RandomNormal(Real sigma = 1, Real mu = 0)
        {
            Real boxMuller2;

            if (!_flip)
            {
                _beta       = Broth.Random() * Math.PI * 2;
                _boxMuller1 = Math.Sqrt(-2 * Math.Log(Broth.Random()));
                boxMuller2  = Math.Sin(_beta);
            }
            else
            {
                boxMuller2 = Math.Cos(_beta);
            }

            _flip = !_flip;

            return(sigma * _boxMuller1 * boxMuller2 + mu);
        }
Ejemplo n.º 5
0
        // 平均mu, 標準偏差sigmaの正規分布乱数を得る
        public static Real RandomNormal(Real sigma = 1, Real mu = 0)
        {
            Real boxMuller = Math.Sqrt(-2 * Math.Log(Broth.Random())) * Math.Sin(2 * Math.PI * Broth.Random());

            return(sigma * boxMuller + mu);
        }