ImageClassificationTrainer Clase

Definición

IEstimator<TTransformer> para entrenar una red neuronal profunda (DNN) para clasificar imágenes.

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)
Herencia

Comentarios

Para crear este instructor, use ImageClassification.

Columnas de entrada y salida

Los datos de columna de etiqueta de entrada deben ser de tipo clave y la columna de característica debe ser un vector de tamaño variable de Byte.

Este instructor genera las siguientes columnas:

Nombre de columna de salida Tipo de columna Descripción
Score Vector deSingle Puntuaciones de todas las clases. Un valor más alto indica mayor probabilidad de que caigan en la clase asociada. Si el elemento i-th tiene el valor más grande, el índice de la etiqueta de predicción sería i. Tenga en cuenta que i es el índice de base cero.
PredictedLabel Tipo de clave Índice de la etiqueta de predicción. Si su valor es i, la etiqueta real sería la categoría de i-th en el tipo de etiqueta de entrada con valores de clave.

Características del entrenador

Tarea de Machine Learning Clasificación multiclase
¿Se requiere normalización? No
¿Se requiere el almacenamiento en caché? No
NuGet necesario además de Microsoft.ML Microsoft.ML.Vision y SciSharp.TensorFlow.Redist / SciSharp.TensorFlow.Redist-Windows-GPU / SciSharp.TensorFlow.Redist-Linux-GPU
Exportable a ONNX No

Uso de las API basadas en TensorFlow

Para ejecutar las API de ML.Net basadas en TensorFlow, primero debe agregar una dependencia de NuGet en la biblioteca redist de TensorFlow. Actualmente hay dos versiones que puede usar. Uno que se compila para la compatibilidad con GPU y otro que solo admite CPU.

Solo CPU

TensorFlow basado en CPU se admite actualmente en:

  • Linux
  • MacOS
  • Windows

Para que TensorFlow funcione solo en la CPU, todo lo que es tomar una dependencia de NuGet en SciSharp.TensorFlow.Redist v1.14.0

Compatibilidad con GPU

TensorFlow basado en GPU se admite actualmente en:

  • Windows
  • Linux a partir de ahora TensorFlow no admite la ejecución en GPU para MacOS, por lo que no podemos admitir esto actualmente.

Requisitos previos

Debe tener al menos una GPU compatible con CUDA para obtener una lista de GPU compatibles, consulte la Guía de Nvidia.

Instale CUDA v10.1 y CUDNN v7.6.4.

Asegúrese de instalar CUDA v10.1, y no cualquier otra versión más reciente. Después de descargar el archivo .zip CUDNN v7.6.4 y desempaquetarlo, debe realizar los pasos siguientes:

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

Para el desarrollo de 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

Para obtener más información en cuDNN, puede seguir la guía de instalación de cuDNN.

Uso

Para usar TensorFlow con compatibilidad con GPU, tome una dependencia de NuGet en el siguiente paquete en función del sistema operativo:

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

No es necesario modificar el código para aprovechar la GPU para las operaciones de TensorFlow.

Solución de problemas

Si no puede usar la GPU después de agregar el NuGet de TensorFlow basado en GPU, asegúrese de que solo hay una dependencia en la versión basada en GPU. Si tiene una dependencia en ambos NuGets, se ejecutará tensorFlow basado en CPU en su lugar.

Detalles del algoritmo de entrenamiento

Entrena una red neuronal profunda (DNN) aprovechando un modelo previamente entrenado, como Resnet50, para clasificar imágenes. La técnica se inspiró en el tutorial de clasificación de imágenes de reentrenamiento de TensorFlow

Campos

FeatureColumn

Columna de características que espera el instructor.

(Heredado de TrainerEstimatorBase<TTransformer,TModel>)
LabelColumn

Columna de etiqueta que espera el instructor. Puede ser null, que indica que la etiqueta no se usa para el entrenamiento.

(Heredado de TrainerEstimatorBase<TTransformer,TModel>)
WeightColumn

Columna de peso que espera el entrenador. Puede ser null, lo que indica que el peso no se usa para el entrenamiento.

(Heredado de TrainerEstimatorBase<TTransformer,TModel>)

Propiedades

Info

Información auxiliar sobre el instructor en términos de sus capacidades y requisitos.

Métodos

Finalize()

IEstimator<TTransformer> para entrenar una red neuronal profunda (DNN) para clasificar imágenes.

Fit(IDataView)

Entrena y devuelve un ITransformer.

(Heredado de TrainerEstimatorBase<TTransformer,TModel>)
Fit(IDataView, IDataView)

Entrena un ImageClassificationTrainer mediante datos de entrenamiento y validación, devuelve un ImageClassificationModelParameters.

GetOutputSchema(SchemaShape)

IEstimator<TTransformer> para entrenar una red neuronal profunda (DNN) para clasificar imágenes.

(Heredado de TrainerEstimatorBase<TTransformer,TModel>)

Métodos de extensión

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

Anexe un "punto de control de almacenamiento en caché" a la cadena del estimador. Esto garantizará que los estimadores de nivel inferior se entrenarán con los datos almacenados en caché. Resulta útil tener un punto de control de almacenamiento en caché antes de que los instructores tomen varios pases de datos.

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

Dado un estimador, devuelva un objeto de ajuste que llamará a un delegado una vez Fit(IDataView) que se llame. A menudo, es importante que un estimador devuelva información sobre lo que cabe, por lo que el Fit(IDataView) método devuelve un objeto con tipo específico, en lugar de simplemente un general ITransformer. Sin embargo, al mismo tiempo, IEstimator<TTransformer> a menudo se forman en canalizaciones con muchos objetos, por lo que es posible que tengamos que crear una cadena de estimadores a través EstimatorChain<TLastTransformer> de donde el estimador para el que queremos obtener el transformador está enterrado en algún lugar de esta cadena. En ese escenario, podemos a través de este método adjuntar un delegado al que se llamará una vez que se llame a fit.

Se aplica a