Beispiel #1
0
            public RowCursor(IChannelProvider provider, Bindings bindings, IRowCursor input, bool[] active)
                : base(provider, input)
            {
                Ch.CheckValue(bindings, nameof(bindings));
                Ch.CheckValue(input, nameof(input));
                Ch.CheckParam(active == null || active.Length == bindings.ColumnCount, nameof(active));

                _bindings = bindings;
                _active   = active;
                var length = _bindings.InfoCount;

                _getters      = new Delegate[length];
                _values       = new Float[length];
                _rngs         = new TauswortheHybrid[length];
                _lastCounters = new long[length];
                for (int iinfo = 0; iinfo < length; iinfo++)
                {
                    _getters[iinfo] = _bindings.UseCounter[iinfo] ? MakeGetter() : (Delegate)MakeGetter(iinfo);
                    if (!_bindings.UseCounter[iinfo] && IsColumnActive(_bindings.MapIinfoToCol(iinfo)))
                    {
                        _rngs[iinfo]         = new TauswortheHybrid(_bindings.States[iinfo]);
                        _lastCounters[iinfo] = -1;
                    }
                }
            }
Beispiel #2
0
            public TransformInfo(IHostEnvironment env, ModelLoadContext ctx, string directoryName)
            {
                env.AssertValue(env);

                // *** Binary format ***
                // int: d (number of untransformed features)
                // int: NewDim (number of transformed features)
                // bool: UseSin
                // uint[4]: the seeds for the pseudo random number generator.

                SrcDim = ctx.Reader.ReadInt32();

                NewDim = ctx.Reader.ReadInt32();
                env.CheckDecode(NewDim > 0);

                _useSin = ctx.Reader.ReadBoolByte();

                var length = ctx.Reader.ReadInt32();

                env.CheckDecode(length == 4);
                _state = TauswortheHybrid.State.Load(ctx.Reader);
                _rand  = new TauswortheHybrid(_state);

                env.CheckDecode(ctx.Repository != null &&
                                ctx.LoadModelOrNull <IFourierDistributionSampler, SignatureLoadModel>(env, out _matrixGenerator, directoryName));

                // initialize the transform matrix
                int roundedUpD           = RoundUp(NewDim, _cfltAlign);
                int roundedUpNumFeatures = RoundUp(SrcDim, _cfltAlign);

                RndFourierVectors = new AlignedArray(roundedUpD * roundedUpNumFeatures, CpuMathUtils.GetVectorAlignment());
                RotationTerms     = _useSin ? null : new AlignedArray(roundedUpD, CpuMathUtils.GetVectorAlignment());
                InitializeFourierCoefficients(roundedUpNumFeatures, roundedUpD);
            }
Beispiel #3
0
            public TransformInfo(IHost host, ColumnInfo column, int d, float avgDist)
            {
                Contracts.AssertValue(host);

                SrcDim = d;
                NewDim = column.NewDim;
                host.CheckUserArg(NewDim > 0, nameof(column.NewDim));
                _useSin = column.UseSin;
                var seed = column.Seed;

                _rand  = seed.HasValue ? RandomUtils.Create(seed) : RandomUtils.Create(host.Rand);
                _state = _rand.GetState();

                var generator = column.Generator;

                _matrixGenerator = generator.CreateComponent(host, avgDist);

                int roundedUpD           = RoundUp(NewDim, _cfltAlign);
                int roundedUpNumFeatures = RoundUp(SrcDim, _cfltAlign);

                RndFourierVectors = new AlignedArray(roundedUpD * roundedUpNumFeatures, CpuMathUtils.GetVectorAlignment());
                RotationTerms     = _useSin ? null : new AlignedArray(roundedUpD, CpuMathUtils.GetVectorAlignment());

                InitializeFourierCoefficients(roundedUpNumFeatures, roundedUpD);
            }
Beispiel #4
0
            public TransformInfo(IHost host, Column item, Arguments args, int d, Float avgDist)
            {
                Contracts.AssertValue(host);

                SrcDim = d;
                NewDim = item.NewDim ?? args.NewDim;
                host.CheckUserArg(NewDim > 0, nameof(item.NewDim));
                _useSin = item.UseSin ?? args.UseSin;
                var seed = item.Seed ?? args.Seed;

                _rand  = seed.HasValue ? RandomUtils.Create(seed) : RandomUtils.Create(host.Rand);
                _state = _rand.GetState();

                var sub = item.MatrixGenerator;

                if (!sub.IsGood())
                {
                    sub = args.MatrixGenerator;
                }
                _matrixGenerator = sub.CreateInstance(host, avgDist);

                int roundedUpD           = RoundUp(NewDim, CfltAlign);
                int roundedUpNumFeatures = RoundUp(SrcDim, CfltAlign);

                RndFourierVectors = new AlignedArray(roundedUpD * roundedUpNumFeatures, CpuMathUtils.Vector128Alignment);
                RotationTerms     = _useSin ? null : new AlignedArray(roundedUpD, CpuMathUtils.Vector128Alignment);

                InitializeFourierCoefficients(roundedUpNumFeatures, roundedUpD);
            }
Beispiel #5
0
 private void EnsureValue(ref long lastCounter, ref Float value, TauswortheHybrid rng)
 {
     Ch.Assert(lastCounter <= Input.Position);
     while (lastCounter < Input.Position)
     {
         value = rng.NextSingle();
         lastCounter++;
     }
 }
        protected override IRowCursor GetRowCursorCore(Func <int, bool> predicate, IRandom rand = null)
        {
            // We do not use the input random because this cursor does not support shuffling.
            var        rgen   = new TauswortheHybrid(_state);
            var        input  = Source.GetRowCursor(predicate, _shuffleInput ? new TauswortheHybrid(rgen) : null);
            IRowCursor cursor = new RowCursor(this, input, rgen);

            if (_poolSize > 1)
            {
                cursor = ShuffleTransform.GetShuffledCursor(Host, _poolSize, cursor, new TauswortheHybrid(rgen));
            }
            return(cursor);
        }
        protected override DataViewRowCursor GetRowCursorCore(IEnumerable <DataViewSchema.Column> columnsNeeded, Random rand = null)
        {
            // We do not use the input random because this cursor does not support shuffling.
            var rgen  = new TauswortheHybrid(_state);
            var input = Source.GetRowCursor(columnsNeeded, _shuffleInput ? new TauswortheHybrid(rgen) : null);
            DataViewRowCursor cursor = new Cursor(this, input, rgen);

            if (_poolSize > 1)
            {
                cursor = RowShufflingTransformer.GetShuffledCursor(Host, _poolSize, cursor, new TauswortheHybrid(rgen));
            }
            return(cursor);
        }