feat: add automated model creation
This commit is contained in:
parent
6c9dd9164b
commit
2fd2e54401
17
.build.yml
Normal file
17
.build.yml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
image: fedora
|
||||||
|
packages:
|
||||||
|
- dotnet
|
||||||
|
sources:
|
||||||
|
- git@git.sr.ht:~jkcclemens/NoSoliciting
|
||||||
|
tasks:
|
||||||
|
- build: |
|
||||||
|
cd NoSoliciting/NoSoliciting.Trainer
|
||||||
|
dotnet build -c Release
|
||||||
|
- test: |
|
||||||
|
cd NoSoliciting/NoSoliciting.Trainer
|
||||||
|
./bin/Release/net5/NoSoliciting.Trainer test data.csv
|
||||||
|
- create-model: |
|
||||||
|
cd NoSoliciting/NoSoliciting.Trainer
|
||||||
|
./bin/Release/net5/NoSoliciting.Trainer create-model data.csv
|
||||||
|
artifacts:
|
||||||
|
- NoSoliciting/NoSoliciting.Trainer/model.zip
|
|
@ -26,8 +26,21 @@ namespace NoSoliciting.Trainer {
|
||||||
"blu",
|
"blu",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private enum Mode {
|
||||||
|
Test,
|
||||||
|
CreateModel,
|
||||||
|
Interactive,
|
||||||
|
InteractiveFull,
|
||||||
|
}
|
||||||
|
|
||||||
private static void Main(string[] args) {
|
private static void Main(string[] args) {
|
||||||
var full = args[0] == "create";
|
var mode = args[0] switch {
|
||||||
|
"test" => Mode.Test,
|
||||||
|
"create-model" => Mode.CreateModel,
|
||||||
|
"interactive" => Mode.Interactive,
|
||||||
|
"interactive-full" => Mode.InteractiveFull,
|
||||||
|
_ => throw new ArgumentException("invalid argument"),
|
||||||
|
};
|
||||||
var path = "../../../data.csv";
|
var path = "../../../data.csv";
|
||||||
|
|
||||||
if (args.Length > 1) {
|
if (args.Length > 1) {
|
||||||
|
@ -121,11 +134,16 @@ namespace NoSoliciting.Trainer {
|
||||||
.Append(ctx.MulticlassClassification.Trainers.SdcaMaximumEntropy(exampleWeightColumnName: "Weight"))
|
.Append(ctx.MulticlassClassification.Trainers.SdcaMaximumEntropy(exampleWeightColumnName: "Weight"))
|
||||||
.Append(ctx.Transforms.Conversion.MapKeyToValue("PredictedLabel"));
|
.Append(ctx.Transforms.Conversion.MapKeyToValue("PredictedLabel"));
|
||||||
|
|
||||||
var train = full ? df : ttd.TrainSet;
|
var train = mode switch {
|
||||||
|
Mode.Test => ttd.TrainSet,
|
||||||
|
Mode.CreateModel => df,
|
||||||
|
Mode.Interactive => ttd.TrainSet,
|
||||||
|
Mode.InteractiveFull => df,
|
||||||
|
};
|
||||||
|
|
||||||
var model = pipeline.Fit(train);
|
var model = pipeline.Fit(train);
|
||||||
|
|
||||||
if (full) {
|
if (mode == Mode.CreateModel) {
|
||||||
var savePath = Path.Join(parentDir.FullName, "model.zip");
|
var savePath = Path.Join(parentDir.FullName, "model.zip");
|
||||||
ctx.Model.Save(model, train.Schema, savePath);
|
ctx.Model.Save(model, train.Schema, savePath);
|
||||||
}
|
}
|
||||||
|
@ -168,7 +186,9 @@ namespace NoSoliciting.Trainer {
|
||||||
Console.WriteLine($"Macro acc: {eval.MacroAccuracy * 100}");
|
Console.WriteLine($"Macro acc: {eval.MacroAccuracy * 100}");
|
||||||
Console.WriteLine($"Micro acc: {eval.MicroAccuracy * 100}");
|
Console.WriteLine($"Micro acc: {eval.MicroAccuracy * 100}");
|
||||||
|
|
||||||
if (full) {
|
switch (mode) {
|
||||||
|
case Mode.Test:
|
||||||
|
case Mode.CreateModel:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user