Skip to content

Commit 3cacc45

Browse files
srsaggamDmitry-A
authored andcommitted
Suggested changes to progress bar (dotnet#335)
* progressbar * added progressbar and refactoring * reverted * revert sign assembly * added headers and removed exception rethrow * bug fixes and updates to UI * added friendly name printing for metric * formatting
1 parent b9c4f5f commit 3cacc45

File tree

3 files changed

+39
-25
lines changed

3 files changed

+39
-25
lines changed

src/mlnet/CodeGenerator/CodeGenerationHelper.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,9 @@ public void GenerateCode()
8686
{
8787
ForegroundColor = ConsoleColor.Yellow,
8888
ForegroundColorDone = ConsoleColor.DarkGreen,
89-
BackgroundColor = ConsoleColor.DarkGray,
90-
BackgroundCharacter = '\u2593'
89+
BackgroundColor = ConsoleColor.Gray,
90+
ProgressCharacter = '\u2593',
91+
BackgroundCharacter = '─',
9192
};
9293
var wait = TimeSpan.FromSeconds(settings.MaxExplorationTime);
9394
using (var pbar = new FixedDurationBar(wait, "", options))
@@ -114,9 +115,10 @@ public void GenerateCode()
114115

115116
if (t.IsCompleted == false)
116117
{
117-
logger.Log(LogLevel.Info, "Waiting for the last iteration to complete ...");
118+
string originalMessage = pbar.Message;
119+
pbar.Message = " Waiting for the last iteration to complete ...";
120+
t.Wait();
118121
}
119-
t.Wait();
120122
}
121123

122124
}

src/mlnet/Utilities/ConsolePrinter.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,25 @@ internal static void PrintMetrics(int iteration, string trainerName, RegressionM
3434

3535
internal static void PrintBinaryClassificationMetricsHeader(LogLevel logLevel)
3636
{
37-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
37+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
3838
logger.Log(logLevel, $"{Strings.MetricsForBinaryClassModels}");
39-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
39+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
4040
logger.Log(logLevel, $"{" ",-4} {"Trainer",-35} {"Accuracy",9} {"AUC",8} {"AUPRC",8} {"F1-score",9} {"Best",8} {"Duration",9}");
4141
}
4242

4343
internal static void PrintMulticlassClassificationMetricsHeader(LogLevel logLevel)
4444
{
45-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
45+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
4646
logger.Log(logLevel, $"{Strings.MetricsForMulticlassModels}");
47-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
47+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
4848
logger.Log(logLevel, $"{" ",-4} {"Trainer",-35} {"AccuracyMicro",14} {"AccuracyMacro",14} {"Best",14} {"Duration",9}");
4949
}
5050

5151
internal static void PrintRegressionMetricsHeader(LogLevel logLevel)
5252
{
53-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
53+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
5454
logger.Log(logLevel, $"{Strings.MetricsForRegressionModels}");
55-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
55+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
5656
logger.Log(logLevel, $"{" ",-4} {"Trainer",-35} {"R2-Score",9} {"LossFn",12} {"Absolute-loss",15} {"Squared-loss",15} {"RMS-loss",12} {"Best",12} {"Duration",9}");
5757
}
5858

@@ -70,61 +70,61 @@ internal static void PrintTopNHeader(int count)
7070

7171
internal static void ExperimentResultsHeader(LogLevel logLevel, string mltask, string datasetName, string labelName, string time, int numModelsExplored)
7272
{
73-
logger.Log(logLevel, $"===============================Experiment Results===================================");
74-
logger.Log(logLevel, $"------------------------------------------------------------------------------------");
73+
logger.Log(logLevel, $"==============================================Experiment Results==================================================");
74+
logger.Log(logLevel, $"------------------------------------------------------------------------------------------------------------------");
7575
logger.Log(logLevel, $"{"ML Task",-7} : {mltask,-20}");
7676
logger.Log(logLevel, $"{"Dataset",-7}: {datasetName,-25}");
7777
logger.Log(logLevel, $"{"Label",-6} : {labelName,-25}");
7878
logger.Log(logLevel, $"{"Exploration time",-20} : {time} Secs");
7979
logger.Log(logLevel, $"{"Total number of models explored",-30} : {numModelsExplored}");
80-
logger.Log(logLevel, $"------------------------------------------------------------------------------------");
80+
logger.Log(logLevel, $"------------------------------------------------------------------------------------------------------------------");
8181
}
8282
internal static void PrintIterationSummary(IEnumerable<RunResult<BinaryClassificationMetrics>> results, BinaryClassificationMetric optimizationMetric, int count)
8383
{
8484
var metricsAgent = new BinaryMetricsAgent(optimizationMetric);
8585
var topNResults = RunResultUtil.GetTopNRunResults(results, metricsAgent, count);
86-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
86+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
8787
logger.Log(LogLevel.Info, $"Top {topNResults?.Count()} models explored ");
88-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
88+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
8989
PrintBinaryClassificationMetricsHeader(LogLevel.Info);
9090
int i = 0;
9191
foreach (var result in topNResults)
9292
{
9393
PrintMetrics(++i, result.TrainerName, result.ValidationMetrics, metricsAgent.GetScore(result.ValidationMetrics), result.RuntimeInSeconds, LogLevel.Info);
9494
}
95-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
95+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
9696
}
9797

9898
internal static void PrintIterationSummary(IEnumerable<RunResult<RegressionMetrics>> results, RegressionMetric optimizationMetric, int count)
9999
{
100100
var metricsAgent = new RegressionMetricsAgent(optimizationMetric);
101101
var topNResults = RunResultUtil.GetTopNRunResults(results, metricsAgent, count);
102-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
102+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
103103
logger.Log(LogLevel.Info, $"Top {topNResults?.Count()} models explored ");
104-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
104+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
105105
PrintRegressionMetricsHeader(LogLevel.Info);
106106
int i = 0;
107107
foreach (var result in topNResults)
108108
{
109109
PrintMetrics(++i, result.TrainerName, result.ValidationMetrics, metricsAgent.GetScore(result.ValidationMetrics), result.RuntimeInSeconds, LogLevel.Info);
110110
}
111-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
111+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
112112
}
113113

114114
internal static void PrintIterationSummary(IEnumerable<RunResult<MultiClassClassifierMetrics>> results, MulticlassClassificationMetric optimizationMetric, int count)
115115
{
116116
var metricsAgent = new MultiMetricsAgent(optimizationMetric);
117117
var topNResults = RunResultUtil.GetTopNRunResults(results, metricsAgent, count);
118-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
118+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
119119
logger.Log(LogLevel.Info, $"Top {topNResults?.Count()} models explored ");
120-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
120+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
121121
PrintMulticlassClassificationMetricsHeader(LogLevel.Info);
122122
int i = 0;
123123
foreach (var result in topNResults)
124124
{
125125
PrintMetrics(++i, result.TrainerName, result.ValidationMetrics, metricsAgent.GetScore(result.ValidationMetrics), result.RuntimeInSeconds, LogLevel.Info);
126126
}
127-
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------");
127+
logger.Log(LogLevel.Info, $"------------------------------------------------------------------------------------------------------------------");
128128
}
129129
}
130130
}

src/mlnet/Utilities/ProgressHandlers.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ private void UpdateBestResult(RunResult<RegressionMetrics> iterationResult)
4747
if (MetricComparator(GetScore(iterationResult), GetScore(bestResult), isMaximizing) > 0)
4848
{
4949
bestResult = iterationResult;
50-
progressBar.Message = $"Best {this.optimizationMetric} : {GetScore(bestResult)} , Best Algorithm : {iterationResult.TrainerName}";
50+
progressBar.Message = $"Best {this.optimizationMetric} : {GetScore(bestResult):F2} , Best Algorithm : {bestResult.TrainerName}, Last Algorithm : {bestResult.TrainerName}";
51+
}
52+
else
53+
{
54+
progressBar.Message = $"Best {this.optimizationMetric} : {GetScore(bestResult):F2} , Best Algorithm : {bestResult.TrainerName}, Last Algorithm : {iterationResult.TrainerName}";
5155
}
5256
}
5357
}
@@ -82,7 +86,11 @@ private void UpdateBestResult(RunResult<BinaryClassificationMetrics> iterationRe
8286
if (MetricComparator(GetScore(iterationResult), GetScore(bestResult), isMaximizing) > 0)
8387
{
8488
bestResult = iterationResult;
85-
progressBar.Message = $"Best {this.optimizationMetric} : {GetScore(bestResult)} , Best Algorithm : {iterationResult.TrainerName}";
89+
progressBar.Message = $"Best {this.optimizationMetric} : {GetScore(bestResult):F2} , Best Algorithm : {bestResult.TrainerName}, Last Algorithm : {bestResult.TrainerName}";
90+
}
91+
else
92+
{
93+
progressBar.Message = $"Best {this.optimizationMetric} : {GetScore(bestResult):F2} , Best Algorithm : {bestResult.TrainerName}, Last Algorithm : {iterationResult.TrainerName}";
8694
}
8795
}
8896
}
@@ -117,7 +125,11 @@ private void UpdateBestResult(RunResult<MultiClassClassifierMetrics> iterationRe
117125
if (MetricComparator(GetScore(iterationResult), GetScore(bestResult), isMaximizing) > 0)
118126
{
119127
bestResult = iterationResult;
120-
progressBar.Message = $"Best {this.optimizationMetric} : {GetScore(bestResult)} , Best Algorithm : {iterationResult.TrainerName}";
128+
progressBar.Message = $"Best {this.optimizationMetric} : {GetScore(bestResult):F2} , Best Algorithm : {bestResult.TrainerName}, Last Algorithm : {bestResult.TrainerName}";
129+
}
130+
else
131+
{
132+
progressBar.Message = $"Best {this.optimizationMetric} : {GetScore(bestResult):F2} , Best Algorithm : {bestResult.TrainerName}, Last Algorithm : {iterationResult.TrainerName}";
121133
}
122134
}
123135
}

0 commit comments

Comments
 (0)