Example #1
0
        public void TrainerGeneratorBasicAdvancedParameterTest()
        {
            var context = new MLContext();

            var elementProperties = new Dictionary <string, object>()
            {
                { "LearningRate", 0.1f },
                { "NumLeaves", 1 },
                { "UseSoftmax", true }
            };
            PipelineNode  node            = new PipelineNode("LightGbmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline      pipeline        = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator   = new CodeGenerator(pipeline, null, null);
            var           actual          = codeGenerator.GenerateTrainerAndUsings();
            string        expectedTrainer = "LightGbm(new LightGbmBinaryTrainer.Options(){LearningRate=0.1f,NumLeaves=1,UseSoftmax=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            string        expectedUsing   = "using Microsoft.ML.Trainers.LightGbm;\r\n";

            Assert.Equal(expectedTrainer, actual.Item1);
            Assert.Equal(expectedUsing, actual.Item2[0]);
        }
Example #2
0
        public async Task Pipeline_With_ContinueOnError_Returns_Exceptions_On_All_Failures()
        {
            var pipelineNode = new PipelineNode <TestObjectA>
            {
                LocalOptions = new ExecutionOptions {
                    ContinueOnFailure = true
                }
            };

            pipelineNode.AddChild(new FaultingTestNodeA());
            pipelineNode.AddChild(new FaultingTestNodeA());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            IEnumerable <Exception> exceptions = result.GetFailExceptions();

            exceptions.Should().NotBeNull();
            exceptions.Count().Should().Be(2);
        }
Example #3
0
        public async Task When_Cancelling_Pipeline_At_First_Node_Then_Status_Is_NotRun()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var testNode1 = new SimpleTestNodeA1(true, false, true);
            var testNode2 = new SimpleTestNodeA2();

            pipelineNode.AddChild(testNode1);
            pipelineNode.AddChild(testNode2);

            var testObject = new TestObjectA();

            NodeResult result = await pipelineNode.ExecuteAsync(testObject);

            result.Status.Should().Be(NodeResultStatus.NotRun);
            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);

            testNode1.Status.Should().Be(NodeRunStatus.NotRun);
            testNode2.Status.Should().Be(NodeRunStatus.NotRun);
        }
Example #4
0
        public void TrainerComplexParameterTest()
        {
            var context = new MLContext();

            var elementProperties = new Dictionary <string, object>()
            {
                { "Booster", new CustomProperty()
                  {
                      Properties = new Dictionary <string, object>(), Name = "TreeBooster"
                  } },
            };
            PipelineNode  node            = new PipelineNode("LightGbmBinary", PipelineNodeType.Trainer, new string[] { "Label" }, default(string), elementProperties);
            Pipeline      pipeline        = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator   = new CodeGenerator(pipeline, null, null);
            var           actual          = codeGenerator.GenerateTrainerAndUsings();
            string        expectedTrainer = "LightGbm(new LightGbmBinaryTrainer.Options(){Booster=new TreeBooster(){},LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            var           expectedUsings  = "using Microsoft.ML.Trainers.LightGbm;\r\n";

            Assert.Equal(expectedTrainer, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
        }
Example #5
0
        public async Task Can_Add_Base_Type_Pipeline_Node_To_Inherited_Type_Pipeline()
        {
            var testNode = new SimpleTestNodeA1();

            var pipeline = new PipelineNode <TestObjectA>();

            pipeline.AddChild(testNode);

            var testNode2   = new SimpleTestNodeASub1();
            var pipelineSub = new PipelineNode <TestObjectASub>();

            pipelineSub.AddChild(testNode2);
            pipelineSub.AddChild(pipeline);

            var testObject = new TestObjectASub();

            var result = await pipeline.ExecuteAsync(testObject);

            testNode.Status.Should().Be(NodeRunStatus.Completed);
            result.Status.Should().Be(NodeResultStatus.Succeeded);
        }
Example #6
0
        public async Task Pipeline_Overall_Result_Subject_Equals_Changed_Subject()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var node1 = new SimpleTestNodeA1();
            var node2 = new SubjectChangingNode1();
            var node3 = new SimpleTestNodeA2();

            pipelineNode.AddChild(node1);
            pipelineNode.AddChild(node2);
            pipelineNode.AddChild(node3);

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);

            var childResults = result.ChildResults.ToList();

            result.Subject.Should().NotBeSameAs(testObject);
            result.Subject.Should().BeSameAs(childResults[1].Subject);
        }
Example #7
0
        public async Task Adding_State_To_A_Node_Is_Available_In_Global_Context()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new FuncNode <TestObjectA>
            {
                ExecutedFunc = ctxt =>
                {
                    ctxt.State.Foo = "Bar";
                    return(Task.FromResult(NodeResultStatus.Succeeded));
                }
            });

            var testObject = new TestObjectA();
            var context    = new ExecutionContext <TestObjectA>(testObject);
            var result     = await pipelineNode.ExecuteAsync(context);

            result.Status.Should().Be(NodeResultStatus.Succeeded);

            Assert.Equal("Bar", context.State.Foo);
        }
Example #8
0
        private void SetRequiredNugetPackages(IEnumerable <PipelineNode> trainerNodes, ref bool includeLightGbmPackage,
                                              ref bool includeMklComponentsPackage, ref bool includeFastTreePackage,
                                              ref bool includeImageTransformerPackage, ref bool includeImageClassificationPackage, ref bool includeRecommenderPackage)
        {
            foreach (var node in trainerNodes)
            {
                PipelineNode currentNode = node;
                if (currentNode.Name == TrainerName.Ova.ToString())
                {
                    currentNode = (PipelineNode)currentNode.Properties["BinaryTrainer"];
                }

                if (_lightGbmTrainers.Contains(currentNode.Name))
                {
                    includeLightGbmPackage = true;
                }
                else if (_mklComponentsTrainers.Contains(currentNode.Name))
                {
                    includeMklComponentsPackage = true;
                }
                else if (_fastTreeTrainers.Contains(currentNode.Name))
                {
                    includeFastTreePackage = true;
                }
                else if (_imageTransformers.Contains(currentNode.Name))
                {
                    includeImageTransformerPackage = true;
                }
                else if (_imageClassificationTrainers.Contains(currentNode.Name))
                {
                    includeImageClassificationPackage = true;
                }
                else if (_recommendationTrainers.Contains(currentNode.Name))
                {
                    includeRecommenderPackage = true;
                }
            }
        }
Example #9
0
        public async void When_Cancelling_Pipeline_At_Later_Node_Then_Status_Is_Success()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var testNode1 = new SimpleTestNodeA1();
            var testNode2 = new SimpleTestNodeA1(true, false, true);
            var testNode3 = new SimpleTestNodeA2();

            pipelineNode.AddChild(testNode1);
            pipelineNode.AddChild(testNode2);
            pipelineNode.AddChild(testNode3);

            var testObject = new TestObjectA();

            NodeResult result = await pipelineNode.ExecuteAsync(testObject);

            result.Status.ShouldEqual(NodeResultStatus.Succeeded);
            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);

            testNode1.Status.ShouldEqual(NodeRunStatus.Completed);
            testNode2.Status.ShouldEqual(NodeRunStatus.NotRun);
            testNode3.Status.ShouldEqual(NodeRunStatus.NotRun);
        }
Example #10
0
        public async void Pipeline_Node_Results_Following_Subject_Change_Node_Return_Changed_Subject()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var node1 = new SimpleTestNodeA1();
            var node2 = new SubjectChangingNode1();
            var node3 = new SimpleTestNodeA2();

            pipelineNode.AddChild(node1);
            pipelineNode.AddChild(node2);
            pipelineNode.AddChild(node3);

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);

            var childResults = result.ChildResults.ToList();

            childResults[0].Subject.ShouldBeSameAs(testObject);
            childResults[1].Subject.ShouldNotBeSameAs(testObject);
            childResults[2].Subject.ShouldNotBeSameAs(testObject);
            childResults[1].Subject.ShouldEqual(childResults[2].Subject);
        }
Example #11
0
 public LinearSvm(PipelineNode node) : base(node)
 {
 }
Example #12
0
 public FastTreeTweedie(PipelineNode node) : base(node)
 {
 }
Example #13
0
 public FastTreeRegression(PipelineNode node) : base(node)
 {
 }
Example #14
0
 public FastTreeClassification(PipelineNode node) : base(node)
 {
 }
Example #15
0
 public FastForestRegression(PipelineNode node) : base(node)
 {
 }