ImageClassificationTrainer Classe

Definição

Para IEstimator<TTransformer> treinar uma DNN (Rede Neural Profunda) para classificar imagens.

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)
Herança

Comentários

Para criar esse treinador, use ImageClassification.

Colunas de entrada e saída

Os dados da coluna do rótulo de entrada devem ser de tipo de chave e a coluna de recurso deve ser um vetor de tamanho variável de Byte.

Este treinador gera as seguintes colunas:

Nome da coluna de saída Tipo de Coluna Descrição
Score Vetor deSingle As pontuações de todas as classes. Valor mais alto significa maior probabilidade de cair na classe associada. Se o elemento i-th tiver o maior valor, o índice de rótulo previsto será i.Observe que eu é um índice baseado em zero.
PredictedLabel Tipo de chave O índice do rótulo previsto. Se o valor for i, o rótulo real será a categoria i-th no tipo de rótulo de entrada com valor de chave.

Características do Treinador

Tarefa de machine learning Classificação multiclasse
A normalização é necessária? No
O cache é necessário? No
NuGet necessário além de Microsoft.ML Microsoft.ML.Vision e SciSharp.TensorFlow.Redist / SciSharp.TensorFlow.Redist-Windows-GPU / SciSharp.TensorFlow.Redist-Linux-GPU
Exportável para ONNX No

Usando APIs baseadas em TensorFlow

Para executar as APIs de ML.Net baseadas no TensorFlow, primeiro você deve adicionar uma dependência do NuGet à biblioteca redista tensorFlow. Atualmente, há duas versões que você pode usar. Uma que é compilada para suporte à GPU e outra que tem suporte apenas para CPU.

Somente CPU

Atualmente, há suporte para TensorFlow baseado em CPU em:

  • Linux
  • MacOS
  • Windows

Para fazer o TensorFlow funcionar na CPU, basta usar uma dependência do NuGet em SciSharp.TensorFlow.Redist v1.14.0

Suporte de GPU

Atualmente, há suporte para TensorFlow baseado em GPU em:

  • Windows
  • Linux A partir de agora, o TensorFlow não dá suporte à execução em GPUs para MacOS, portanto, não podemos dar suporte a isso no momento.

Pré-requisitos

Você deve ter pelo menos uma GPU compatível com CUDA, para obter uma lista de GPUs compatíveis, consulte o Guia da Nvidia.

Instale o CUDA v10.1 e CUDNN v7.6.4.

Instale o CUDA v10.1, não qualquer outra versão mais recente. Depois de baixar o arquivo cudnn v7.6.4 .zip e descompactá-lo, você precisa executar as seguintes etapas:

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

Para desenvolvimento em 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 obter mais detalhes em cuDNN, você pode seguir o guia de instalação cuDNN.

Usage

Para usar o TensorFlow com suporte à GPU, use uma dependência do NuGet no seguinte pacote, dependendo do sistema operacional:

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

Nenhuma modificação de código deve ser necessária para aproveitar a GPU para operações tensorFlow.

Solução de problemas

Se você não conseguir usar sua GPU depois de adicionar o TensorFlow NuGet baseado em GPU, verifique se há apenas uma dependência na versão baseada em GPU. Se você tiver uma dependência em ambos os NuGets, o TensorFlow baseado em CPU será executado.

Detalhes do algoritmo de treinamento

Treina uma DNN (Rede Neural Profunda) aproveitando um modelo pré-treinado existente, como o Resnet50, com a finalidade de classificar imagens. A técnica foi inspirada no tutorial de classificação de imagem de retreinamento do TensorFlow

Campos

Nome Description
FeatureColumn

A coluna de recursos que o treinador espera.

(Herdado de TrainerEstimatorBase<TTransformer,TModel>)
LabelColumn

A coluna de rótulo que o treinador espera. Pode ser null, o que indica que o rótulo não é usado para treinamento.

(Herdado de TrainerEstimatorBase<TTransformer,TModel>)
WeightColumn

A coluna de peso que o treinador espera. Pode ser null, o que indica que o peso não é usado para treinamento.

(Herdado de TrainerEstimatorBase<TTransformer,TModel>)

Propriedades

Nome Description
Info

Informações auxiliares sobre o treinador em termos de seus recursos e requisitos.

Métodos

Nome Description
Finalize()

Para IEstimator<TTransformer> treinar uma DNN (Rede Neural Profunda) para classificar imagens.

Fit(IDataView, IDataView)

Treina um ImageClassificationTrainer usando dados de treinamento e validação, retorna um ImageClassificationModelParameters.

Fit(IDataView)

Treina e retorna um ITransformer.

(Herdado de TrainerEstimatorBase<TTransformer,TModel>)
GetOutputSchema(SchemaShape)

Para IEstimator<TTransformer> treinar uma DNN (Rede Neural Profunda) para classificar imagens.

(Herdado de TrainerEstimatorBase<TTransformer,TModel>)

Métodos de Extensão

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

Acrescente um 'ponto de verificação de cache' à cadeia do avaliador. Isso garantirá que os avaliadores downstream serão treinados em relação aos dados armazenados em cache. É útil ter um ponto de verificação de cache antes dos treinadores que têm várias passagens de dados.

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

Dado um avaliador, retorne um objeto de encapsulamento que chamará um delegado uma vez Fit(IDataView) chamado. Geralmente, é importante que um avaliador retorne informações sobre o que estava em forma, e é por isso que o Fit(IDataView) método retorna um objeto especificamente tipado, em vez de apenas um geral ITransformer. No entanto, ao mesmo tempo, IEstimator<TTransformer> muitas vezes são formados em pipelines com muitos objetos, portanto, talvez seja necessário criar uma cadeia de avaliadores por meio EstimatorChain<TLastTransformer> de onde o avaliador para o qual queremos obter o transformador está enterrado em algum lugar nessa cadeia. Para esse cenário, podemos por meio desse método anexar um delegado que será chamado assim que o ajuste for chamado.

Aplica-se a