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 <FourierRandomNumberGeneratorBase, 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); }
public TransformInfo(IHost host, ApproximatedKernelMappingEstimator.ColumnOptions column, int d, float avgDist) { Contracts.AssertValue(host); SrcDim = d; NewDim = column.Rank; host.CheckUserArg(NewDim > 0, nameof(column.Rank)); _useSin = column.UseCosAndSinBases; var seed = column.Seed; _rand = seed.HasValue ? RandomUtils.Create(seed) : RandomUtils.Create(host.Rand); _state = _rand.GetState(); var generator = column.Generator; _matrixGenerator = generator.GetRandomNumberGenerator(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); }
private ValueGetter <VBuffer <Float> > GetterFromVectorType(IRow input, int iinfo) { var getSrc = GetSrcGetter <VBuffer <Float> >(input, iinfo); var src = default(VBuffer <Float>); var featuresAligned = new AlignedArray(RoundUp(Infos[iinfo].TypeSrc.ValueCount, _cfltAlign), CpuMathUtils.GetVectorAlignment()); var productAligned = new AlignedArray(RoundUp(_transformInfos[iinfo].NewDim, _cfltAlign), CpuMathUtils.GetVectorAlignment()); return ((ref VBuffer <Float> dst) => { getSrc(ref src); TransformFeatures(Host, ref src, ref dst, _transformInfos[iinfo], featuresAligned, productAligned); }); }
private ValueGetter <VBuffer <Float> > GetterFromFloatType(IRow input, int iinfo) { var getSrc = GetSrcGetter <Float>(input, iinfo); var src = default(Float); var featuresAligned = new AlignedArray(RoundUp(1, _cfltAlign), CpuMathUtils.GetVectorAlignment()); var productAligned = new AlignedArray(RoundUp(_transformInfos[iinfo].NewDim, _cfltAlign), CpuMathUtils.GetVectorAlignment()); var oneDimensionalVector = new VBuffer <Float>(1, new Float[] { 0 }); return ((ref VBuffer <Float> dst) => { getSrc(ref src); oneDimensionalVector.Values[0] = src; TransformFeatures(Host, ref oneDimensionalVector, ref dst, _transformInfos[iinfo], featuresAligned, productAligned); }); }
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 generator = item.MatrixGenerator; if (generator == null) { generator = args.MatrixGenerator; } _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); }