dotnet / dotnet/machinelearning-modelbuilder
Performance tips for auto-generated files by ML.NET Model Builder
- Lingua principale
- Dockerfile
- Stelle
- 285
- Fork
- 66
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
**System Information (please complete the following information):**
- Model Builder Version: 17.15.0.2337001
- Visual Studio Version: 17.8.1
**Describe the bug**
Poorly written code is found in the files `MLModel.training.cs` and `MLModel.consumption.cs`, specifically violations of [CA1851](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1851) redundant checks, and unnecessary logic.
**To Reproduce**
Steps to reproduce the behavior:
1. Create a new project
2. Add a new Machine Learning Model (MLModel)
3. Choose the scenario **Image Classification**
4. Perform necessary actions to progress to **Consume**
5. Add a **Console app**
6. Examine the code generated by the generator in the files `MLModel.training.cs`, `MLModel.consumption.cs`
**Expected behavior**
In the file `MLModel.consumption.cs`, the method `GetSortedScoresWithLabels`:
Instead of:
```C#
var labelNames = GetLabels(result);
Dictionary labledScores = new Dictionary();
for (int i = 0; i < labelNames.Count(); i++)
{
// Map the names to the predicted result score array
var labelName = labelNames.ElementAt(i);
labledScores.Add(labelName.ToString(), unlabeledScores[i]);
}
```
I suggest:
```C#
var labelNames = GetLabels(result);
int i = 0;
using var labelEnumerator = labelNames.GetEnumerator();
Dictionary labledScores = new Dictionary();
while (labelEnumerator.MoveNext())
{
// Map the names to the predicted result score array
var labelName = labelEnumerator.Current;
labledScores.Add(labelName, unlabeledScores[i]);
i++;
}
```
In the file `MLModel.training.cs`, the method `LoadImageFromFolder`:
Instead of:
```C#
foreach (DirectoryInfo directory in subDirectories)
{
var imageList = directory.EnumerateFiles().Where(f => allowedImageExtensions.Contains(f.Extension.ToLower()));
if (imageList.Count() > 0)
{
res.AddRange(imageList.Select(i => new ModelInput
{
Label = directory.Name,
ImageSource = File.ReadAllBytes(i.FullName),
}));
}
}
```
I suggest:
```C#
foreach (DirectoryInfo directory in subDirectories)
{
res.AddRange(directory.EnumerateFiles()
.Where(f => allowedImageExtensions.Contains(f.Extension.ToLower()))
.Select(i => new ModelInput
{
Label = directory.Name,
ImageSource = File.ReadAllBytes(i.FullName),
}));
}
```
**Screenshots**
-
**Additional context**
-
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Direzione di ricerca
Riproduci il workflow Image Classification in Model Builder e ispeziona i file generati MLModel.training.cs e MLModel.consumption.cs, concentrandoti su LoadImageFromFolder e GetSortedScoresWithLabels. Confronta l'enumerazione generata e la logica di caricamento delle immagini con i controlli ridondanti segnalati, quindi verifica che il codice generato eviti tali controlli preservando il proprio output e comportamento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- csharp
- Ambito
- machine-learning, tooling
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 38/100