/// <summary>
        /// Given a predictor type returns a set of all permissible learners (with their sweeper params, if defined).
        /// </summary>
        /// <returns>Array of viable learners.</returns>
        public static SuggestedRecipe.SuggestedLearner[] AllowedLearners(IHostEnvironment env, MacroUtils.TrainerKinds trainerKind)
        {
            //not all learners advertised in the API are available in CORE.
            var catalog = ModuleCatalog.CreateInstance(env);
            var availableLearnersList = catalog.AllEntryPoints().Where(
                x => x.InputKinds?.FirstOrDefault(i => i == typeof(CommonInputs.ITrainerInput)) != null);

            var learners     = new List <SuggestedRecipe.SuggestedLearner>();
            var type         = typeof(CommonInputs.ITrainerInput);
            var trainerTypes = typeof(Experiment).Assembly.GetTypes()
                               .Where(p => type.IsAssignableFrom(p) &&
                                      MacroUtils.IsTrainerOfKind(p, trainerKind));

            foreach (var tt in trainerTypes)
            {
                var sweepParams = AutoMlUtils.GetSweepRanges(tt);
                var epInputObj  = (CommonInputs.ITrainerInput)tt.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { });
                var sl          = new SuggestedRecipe.SuggestedLearner
                {
                    PipelineNode = new TrainerPipelineNode(epInputObj, sweepParams),
                    LearnerName  = tt.Name
                };

                if (sl.PipelineNode != null && availableLearnersList.FirstOrDefault(l => l.Name.Equals(sl.PipelineNode.GetEpName())) != null)
                {
                    learners.Add(sl);
                }
            }

            return(learners.ToArray());
        }
예제 #2
0
        public TransformPipelineNode(CommonInputs.ITransformInput entryPointObj,
                                     IEnumerable <TlcModule.SweepableParamAttribute> sweepParams = null,
                                     CommonInputs.ITrainerInput subTrainerObj = null)
        {
            var newEp = CloneEntryPoint(entryPointObj);

            _entryPointObj = newEp ?? entryPointObj;
            if (subTrainerObj != null)
            {
                _subTrainerObj = CloneEntryPoint(subTrainerObj);
            }
            SweepParams = sweepParams?.Select(p => p.Clone()).ToArray() ??
                          AutoMlUtils.GetSweepRanges(_entryPointObj.GetType());
        }
예제 #3
0
        public TrainerPipelineNode(CommonInputs.ITrainerInput entryPointObj,
                                   IEnumerable <TlcModule.SweepableParamAttribute> sweepParams = null,
                                   ParameterSet hyperParameterSet = null)
        {
            var newEp = CloneEntryPoint(entryPointObj);

            _entryPointObj = newEp ?? entryPointObj;
            SweepParams    = sweepParams?.Select(p => p.Clone()).ToArray() ??
                             AutoMlUtils.GetSweepRanges(_entryPointObj.GetType());
            HyperSweeperParamSet = hyperParameterSet?.Clone();

            // Make sure sweep params and param set are consistent.
            if (HyperSweeperParamSet != null)
            {
                PropagateParamSetValues(HyperSweeperParamSet, SweepParams);
                UpdateProperties();
            }
        }