/// <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()); }
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()); }
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(); } }