ImageClassificationTrainer Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
O IEstimator<TTransformer> para 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
-
TrainerEstimatorBase<MulticlassPredictionTransformer<ImageClassificationModelParameters>,ImageClassificationModelParameters>ImageClassificationTrainer
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 do tipo 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 seria i.Observe que eu é um índice baseado em zero. |
PredictedLabel |
tipo de chave | O índice do rótulo previsto. Se seu valor for i, o rótulo real será a iº categoria no tipo de rótulo de entrada com valor de chave. |
Características do Treinador
Ferramenta 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 em TensorFlow, você deve primeiro adicionar uma dependência NuGet na biblioteca redist 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 que o TensorFlow funcione na CPU apenas tudo o que é para usar uma dependência 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 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.
Uso
Para usar o TensorFlow com suporte de 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 do 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 em vez disso.
Detalhes do algoritmo de treinamento
Treina uma DNN (Deep Neural Network) 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
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 |
WeightColumn |
A coluna de peso que o treinador espera. Pode ser |
Propriedades
Info |
Informações auxiliares sobre o treinador em termos de suas funcionalidades e requisitos. |
Métodos
Finalize() |
O IEstimator<TTransformer> para treinar uma DNN (Rede Neural Profunda) para classificar imagens. |
Fit(IDataView, IDataView) |
Treina um ImageClassificationTrainer uso de dados de treinamento e validação, retorna um ImageClassificationModelParameters. |
Fit(IDataView) |
Treina e retorna um ITransformer. (Herdado de TrainerEstimatorBase<TTransformer,TModel>) |
GetOutputSchema(SchemaShape) |
O IEstimator<TTransformer> para treinar uma DNN (Rede Neural Profunda) para classificar imagens. (Herdado de TrainerEstimatorBase<TTransformer,TModel>) |
Métodos de Extensão
AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment) |
Acrescente um "ponto de verificação de cache" à cadeia de estimativas. Isso garantirá que os estimadores 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 fazem várias passagens de dados. |
WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>) |
Dado um estimador, retorne um objeto de encapsulamento que chamará um delegado uma vez Fit(IDataView) chamado. Geralmente, é importante que um estimador 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 construir uma cadeia de estimadores por meio EstimatorChain<TLastTransformer> de onde o estimador para o qual queremos que o transformador seja enterrado em algum lugar nesta cadeia. Para esse cenário, podemos por meio desse método anexar um delegado que será chamado quando fit for chamado. |