ImageClassificationTrainer Classe

Definizione

Oggetto IEstimator<TTransformer> per il training di una rete neurale profonda (DNN) per classificare le immagini.

public sealed class ImageClassificationTrainer : Microsoft.ML.Trainers.TrainerEstimatorBase<Microsoft.ML.Data.MulticlassPredictionTransformer<Microsoft.ML.Vision.ImageClassificationModelParameters>,Microsoft.ML.Vision.ImageClassificationModelParameters>
type ImageClassificationTrainer = class
    inherit TrainerEstimatorBase<MulticlassPredictionTransformer<ImageClassificationModelParameters>, ImageClassificationModelParameters>
Public NotInheritable Class ImageClassificationTrainer
Inherits TrainerEstimatorBase(Of MulticlassPredictionTransformer(Of ImageClassificationModelParameters), ImageClassificationModelParameters)
Ereditarietà

Commenti

Per creare questo trainer, usare ImageClassification.

Colonne di input e output

I dati della colonna dell'etichetta di input devono essere di tipo chiave e la colonna di funzionalità deve essere un vettore di dimensioni variabili di Byte.

Questo formatore restituisce le colonne seguenti:

Nome colonna di output Tipo di colonna Descrizione
Score Vettore diSingle Punteggi di tutte le classi. Un valore superiore indica una maggiore probabilità di cadere nella classe associata. Se l'elemento i-th ha il valore più grande, l'indice dell'etichetta stimata sarebbe i.Nota che i è indice in base zero.
PredictedLabel tipo di chiave L'indice dell'etichetta stimata. Se il valore è i, l'etichetta effettiva potrebbe essere la categoria i-esima nel tipo di etichetta di input con valori key.

Caratteristiche del trainer

Attività di Machine Learning Classificazione multiclasse
È necessaria la normalizzazione? No
È necessaria la memorizzazione nella cache? No
NuGet richiesto oltre a Microsoft.ML Microsoft.ML.Vision e SciSharp.TensorFlow.Redist/ SciSharp.TensorFlow.Redist-Windows-GPU / SciSharp.TensorFlow.Redist-Linux-GPU
Esportabile in ONNX No

Uso delle API basate su TensorFlow

Per eseguire qualsiasi API basata ML.Net su TensorFlow, è prima necessario aggiungere una dipendenza NuGet dalla libreria redist TensorFlow. Attualmente sono disponibili due versioni che è possibile usare. Una che viene compilata per il supporto della GPU e una che include solo il supporto della CPU.

Solo CPU

TensorFlow basato sulla CPU è attualmente supportato in:

  • Linux
  • MacOS
  • Windows

Per ottenere l'uso di TensorFlow sulla CPU solo per eseguire una dipendenza NuGet da SciSharp.TensorFlow.Redist v1.14.0

Supporto GPU

TensorFlow basato su GPU è attualmente supportato in:

  • Windows
  • Linux A partire da ora TensorFlow non supporta l'esecuzione su GPU per MacOS, quindi non è possibile supportare attualmente questa operazione.

Prerequisiti

Per un elenco di GPU compatibili con Nvidia, è necessario avere almeno una GPU compatibile con CUDA.

Installare CUDA v10.1 e CUDNN v7.6.4.

Assicurarsi di installare CUDA v10.1, non altre versioni più recenti. Dopo aver scaricato CUDNN v7.6.4 .zip file e decomprimerlo, è necessario eseguire questa procedura:

copy <CUDNN_zip_files_path>\cuda\bin\cudnn64_7.dll to <YOUR_DRIVE>\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin

Per lo sviluppo C/C++:

Copy <CUDNN_zip_files_path>\cuda\ include\cudnn.h to <YOUR_DRIVE>\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include

Copy <CUDNN_zip_files_path>\cuda\lib\x64\cudnn.lib to <YOUR_DRIVE>\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64

Per ulteriori dettagli in cuDNN, è possibile seguire la guida all'installazione cuDNN.

Utilizzo

Per usare TensorFlow con il supporto della GPU, prendere una dipendenza NuGet dal pacchetto seguente a seconda del sistema operativo:

  • Windows -> SciSharp.TensorFlow.Redist-Windows-GPU
  • Linux -> SciSharp.TensorFlow.Redist-Linux-GPU

Nessuna modifica del codice deve essere necessaria per sfruttare la GPU per le operazioni TensorFlow.

Risoluzione dei problemi

Se la GPU non è in grado di usare la GPU dopo aver aggiunto TensorFlow NuGet basato su GPU, assicurarsi che sia presente solo una dipendenza dalla versione basata sulla GPU. Se si ha una dipendenza da entrambi i NuGet, la CPU basata su TensorFlow verrà invece eseguita.

Dettagli dell'algoritmo di training

Esegue il training di una rete neurale profonda (DNN) sfruttando un modello pre-sottoposto a training esistente, ad esempio Resnet50, allo scopo di classificare le immagini. La tecnica è stata ispirata dall'esercitazione sulla classificazione delle immagini di training di TensorFlow

Campi

FeatureColumn

Colonna di funzionalità prevista dal trainer.

(Ereditato da TrainerEstimatorBase<TTransformer,TModel>)
LabelColumn

Colonna etichetta prevista dal trainer. Può essere null, che indica che l'etichetta non viene usata per il training.

(Ereditato da TrainerEstimatorBase<TTransformer,TModel>)
WeightColumn

Colonna di peso prevista dal trainer. Può essere null, che indica che il peso non viene usato per il training.

(Ereditato da TrainerEstimatorBase<TTransformer,TModel>)

Proprietà

Info

Informazioni ausiliarie sul formatore in termini di capacità e requisiti.

Metodi

Finalize()

Oggetto IEstimator<TTransformer> per il training di una rete neurale profonda (DNN) per classificare le immagini.

Fit(IDataView, IDataView)

Esegue il training di un oggetto ImageClassificationTrainer usando i dati di training e di convalida, restituisce un ImageClassificationModelParametersoggetto .

Fit(IDataView)

Esegue il training e restituisce un ITransformeroggetto .

(Ereditato da TrainerEstimatorBase<TTransformer,TModel>)
GetOutputSchema(SchemaShape)

Oggetto IEstimator<TTransformer> per il training di una rete neurale profonda (DNN) per classificare le immagini.

(Ereditato da TrainerEstimatorBase<TTransformer,TModel>)

Metodi di estensione

AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment)

Aggiungere un "checkpoint di memorizzazione nella cache" alla catena di stima. Ciò garantisce che gli estimatori downstream vengano sottoposti a training sui dati memorizzati nella cache. È utile avere un checkpoint di memorizzazione nella cache prima dei training che accettano più passaggi di dati.

WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>)

Dato un stimatore, restituire un oggetto wrapping che chiamerà un delegato una volta Fit(IDataView) chiamato. Spesso è importante che un stimatore restituisca informazioni su ciò che è stato adatto, che è il motivo per cui il Fit(IDataView) metodo restituisce un oggetto tipizzato in modo specifico, anziché solo un oggetto generale ITransformer. Tuttavia, allo stesso tempo, IEstimator<TTransformer> sono spesso formati in pipeline con molti oggetti, quindi potrebbe essere necessario creare una catena di stima tramite EstimatorChain<TLastTransformer> dove lo stimatore per cui si vuole ottenere il trasformatore è sepolto da qualche parte in questa catena. Per questo scenario, è possibile collegare questo metodo a un delegato che verrà chiamato una volta chiamato fit.

Si applica a