Partilhar via


Avaliação do modelo em Windows

Atualmente, CNTK fornece bibliotecas em C++, C#/.NET, Python e Java para carregar e avaliar modelos em Windows. A partir de v2.1, CNTK também suporta Plataforma Universal do Windows (UWP).

Utilização de API gerido por C#/.NET

A Biblioteca CNTK fornece uma biblioteca gerida (.NET) para avaliação de modelos CNTK na CPU e GPU utilizando C# e outras línguas .NET. O pacote NuGet CNTK. O CPUOnly foi concebido para a execução no CPU, e o CNTK. A GPU foi concebida para a execução em dispositivos com GPU NVIDIA. Consulte a página Do Pacote NuGet sobre detalhes sobre como instalar CNTK Pacotes NuGet da Biblioteca. Por favor, note que Visual Studio 2017 é necessário e a plataforma alvo na propriedade do projeto deve ser X64.

A API gerida CNTK Biblioteca permite-lhe carregar e avaliar modelos pré-treinados em dispositivos especificados (CPU ou GPU). Também fornece diferentes maneiras de ajudá-lo a preparar dados de entrada e saída no vetor denso, um quente ou formato CSC escasso. Os dados de entrada podem ser uma única amostra, um lote de múltiplas amostras, uma sequência de amostras, ou um lote de sequências com comprimentos variáveis. Uma descrição detalhada sobre o formato de lote e sequência pode ser encontrada na página CNTK Concepts. Após avaliação, a API fornece métodos convenientes para obter resultados.

Guia de Programação C#/.NET

Os passos habituais para modelo avaliação utilizando CNTK API gerida pela Biblioteca incluem:

  1. Instale o pacote NuGet apropriado (CPU ou GPU dependendo da utilização) para o seu. Os detalhes são descritos no pacote nuget CNTK.
  2. Carregue o modelo por Função.Load(). O valor devolvido é um Function caso referente ao modelo carregado.
  3. Se necessário, obtenha entradas e saídas do modelo carregado, chamando as propriedades Arguments, Output ou Outputs da instância de Função devolvida por Carga(). As entradas e saídas estão representadas como Variable. Mais informações sobre cada entrada ou saída individual, por exemplo Name , ou Shape podem ser encontradas através da chamada de propriedades correspondentes da Variável.
  4. Para cada entrada, prepare os dados de entrada para avaliação. Dependendo da utilização, os dados de entrada podem consistir numa única amostra, um lote de múltiplas amostras, uma sequência de amostras ou um lote de sequências com comprimento variável. No que diz respeito ao armazenamento, os dados de entrada podem estar no formato denso, vetor de um quente ou formato CSC escasso. O Value objeto é utilizado para representar os dados de entrada com diferentes conteúdos e formatos. A API CNTK fornece diferentes métodos para criar facilmente o objeto Valor a partir de dados simples do utilizador.
    • CreateBatch() cria um objeto Value contendo um lote de amostras únicas ou múltiplas.
    • CreateSequence() cria um objeto value contendo uma sequência com várias amostras. É possível especificar se esta sequência é uma nova sequência ou continuação de uma sequência anterior no mesmo índice na lista de sequências de uma chamada anterior a este método.
    • CreateBatchOfSequences() cria um objeto value contendo um lote de sequências. Cada sequência tem um comprimento variável de amostras. Todos os métodos acima suportam tanto o vetor denso, um quente ou o escasso formato CSC.
  5. Ligue para o Evaluate() método para executar a avaliação. O parâmetro arguments define variáveis de entrada e seus valores associados, e outputs define variáveis de saída. Se o objeto valor de uma variável de saída fornull, CNTK Biblioteca atribui o armazenamento real para o Valor de saída. No retorno, a Avaliação() guarda os resultados de avaliação nos objetos valor associados às variáveis de saída.
  6. Ligue para o GetDenseData()/GetOneHotData() método do valor de saída para obter os resultados em formato de dados simples. Copia os dados armazenados no objeto Valor no tampão como uma lista de sequências com amostras de comprimento variável, quer em formato denso, quer em formato de vetor de um só momento (o suporte para o formato de sparse será adicionado em breve).

A API gerida pela Biblioteca CNTK é descrita na página de API gerida pela Biblioteca CNTK C#/.NET.

Avaliação de múltiplos pedidos em paralelo

CNTK apoia a avaliação de múltiplos pedidos em paralelo. Como a avaliação de execução no mesmo modelo caso não é segura, é necessário primeiro criar múltiplos modelo casos chamando Clone() com ParameterCloningMethod.Share, e, em seguida, cada fio usa um modelo exemplo separado para avaliação. O EvaluateMultipleImagesInParallelAsync() demonstra como avaliar pedidos simultâneos utilizando CNTK API gerida por C#/.NET.

Executar avaliação assíncronea

CNTK API C# não tem um método assíncrono para avaliar(), porque a avaliação é uma operação ligada à CPU (Por favor, consulte [este artigo] parahttps://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/ uma explicação detalhada). No entanto, é desejado fazer uma avaliação assíncrona em alguns casos de utilização, por exemplo, descarregamento para capacidade de resposta, mostramos no exemplo EvaluationSingleImageAsync() como fazê-lo utilizando o método EvaluateAsync()de extensão .

Avaliar camadas intermédias

CNTK API C# é capaz de avaliar uma camada intermédia num gráfico modelo. Para tal, a camada desejada pode ser encontrada pelo seu nome, e a camada intermédia pode ser avaliada. O exemplo AssessIntermediateLayer() em C# demonstra como avaliar uma camada intermédia num modelo.

Avaliar saídas de vários nosdes

CNTK podem avaliar múltiplos nós num gráfico de modelo combinando as suas saídas num único nó. O exemplo Avaliação Deoutputs() em C# demonstra como avaliar várias saídas.

Exemplos

O CNTKLibraryCSEvalExamples mostra como avaliar um modelo em C# utilizando pacotes NuGet da Biblioteca CNTK. Consulte a página Eval Examples para construir e executar exemplos.

Se não quiser utilizar o Pacote NuGet, pode adicionar Cntk.Core.Managed-<VERSION>.dll como referência ao seu projeto. O Cntk.Core.Managed DLL e todos os DLLs dependentes podem ser encontrados no pacote de libertação binária CNTK na página CNTK Releases. Certifique-se de que o caminho para a Cntk.Core.Managed DLL e as suas dependências (ver lista no final desta página) estão incluídos no caminho de pesquisa de DLLs para a sua aplicação.

Usando C++

A API da Biblioteca C++ da Biblioteca CNTK suporta modelo avaliação em aplicações C++. Tanto as aplicações padrão de ambiente de trabalho como as aplicações Plataforma Universal do Windows são suportadas. Visual Studio 2017 é necessário e a plataforma-alvo na propriedade do projeto deve ser X64.

O pacote CNTK NuGet CNTK. CPUOnly e CNTK. A GPU contém C++ CNTK Library para utilização de CNTK em aplicações de ambiente de trabalho. Para utilizar CNTK na Plataforma Universal do Windows, por favor instale CNTK. UWP. CpuOnly. Ao utilizar pacotes NuGet, a configuração sobre incluir e diretórios de biblioteca é automaticamente adicionada à propriedade do seu projeto. Tanto a construção de Debug como a Build são suportadas. A página Do Pacote NuGet explica como obter e instalar CNTK Pacotes NuGet.

Guia de Programação C++

Os seguintes passos descrevem como utilizar a Biblioteca de CNTK C++ para avaliação modelo.

  1. Ligue a Cntk.Core-<VERSION>.lib biblioteca de importação à aplicação. Este passo pode ser omitido se utilizar o pacote NuGet. Para a aplicação UWP, o nome da biblioteca é Cnkt.Core_app-<Version>.lib.
  2. Incluir o ficheiro do cabeçalho de avaliação "CNTKLibrary.h".
  3. Carregue a modelo por CNTK::Function::Load(). O objeto função devolvido representa o gráfico de cálculo do modelo.
  4. Preparar dados para cada variável de entrada. Pode utilizar CNTK::Value::CreateBatch(), CNTK::Value::CreateSequence()ou CNTK::Value::CreateBatchOfSequences() criar um objeto Valor a partir dos seus dados de entrada, representando um lote de amostras, uma sequência de amostras ou um lote de sequências de amostras, respectivamente.
  5. Chamada CNTK::Function::Evaluate() para avaliação. Como Evaluate() entrada, uma unordered_map para variáveis de entrada e valores de entrada, e um unordered_map para variáveis de saída e valores de saída. O objeto de valor de saída pode ser null o que significa que CNTK Biblioteca atribui o armazenamento real para este valor de saída. No retorno, os objetos valor associados às variáveis de saída contêm os resultados da avaliação.
  6. Obtenha dados de saída dos resultados da avaliação. Utilize CNTK::Value::CopyVariableValueTo() para copiar os dados armazenados no objeto Valor no tampão como uma lista de sequências com comprimento variável de amostras.

Para uma avaliação simultânea de múltiplos pedidos, CNTK::Function::Clone() deve ser chamado antes de avaliar(). O ParallelEvaluationExample() demonstra como avaliar múltiplos pedidos em paralelo utilizando CNTK API da Biblioteca C++.

Para mais detalhes sobre C++ CNTK Biblioteca API para avaliação, consulte a página CNTK Library C++ Evaluation Interface.

C++ Exemplos

Os exemplos CNTKLibraryCPPEvalCPUOnlyExamples C++ e CNTKLibraryCPPEvalGPUExamples ilustram o padrão de utilização acima. O UWPImageRecognition contém um exemplo usando CNTK biblioteca UWP para avaliação modelo. A página Eval Examples fornece passos detalhados sobre a construção e execução de exemplos.

Em alternativa, pode utilizar a Biblioteca CNTK C++ sem o Pacote NuGet. Pode obter Cntk.Core-<VERSION>.lib (ouCntk.Core_app-<Version>.lib) e todos os DLLs dependentes da página CNTK Releases ou construí-los a partir de CNTK código fonte. Também é necessário configurar incluir e o caminho da biblioteca para apontar para o diretório correto, e certifique-se de que a configuração de construção (Debug ou Release) da Biblioteca CNTK é a mesma da definição do seu projeto (caso contrário, receberá exceções inesperadas). O pacote de libertação CNTK contém apenas a construção de binários.

Biblioteca CNTK de envio com a sua aplicação Windows

CNTK Library requer que o Pacote Redistribuable Visual C++ para Visual Studio 2017 seja instalado no sistema onde a sua aplicação vai ser executada. E a plataforma-alvo na propriedade do projeto deve ser X64.

Esta página descreve como CNTK ficheiros binários são nomeados.

Para aplicações C++ no ambiente de trabalho, os seguintes DLLs precisam de ser distribuídos com a sua aplicação.

  • Cntk.Core-<VERSION>.dll
  • Cntk.Math-<VERSION>.dll
  • libiomp5md.dll
  • mklml.dll

Se utilizar a Biblioteca Gerida C#/.NET, ao lado dos DLLs acima mencionados, tem de incluir adicionalmente os seguintes DLLs:

  • Cntk.Core.Managed-<VERSION>.dll
  • Cntk.Core.CSBinding-<VERSION>.dll

Para a utilização de GPU, você precisa de incluir os seguintes DLLs relacionados com A NVIDIA CUDA:

  • cublas64_90.dll
  • cudart64_90.dll
  • cudnn64_7.dll
  • curand64_90.dll
  • cusparse64_90.dll
  • nvml.dll

Nota

Alterada na versão 2.1 CNTK.

CNTK os pacotes NuGet estão a enviar com cuDNN 6 (cudnn64_6.dll).

Todos estes DLLs podem ser encontrados na versão de lançamento binária CNTK, consulte a página CNTK Releases.

Para aplicações UWP, os seguintes DLLs precisam de ser distribuídos com a sua aplicação. Pode encontrar estes DLLs no pacote CNTK.UWP.CPUOnlyNuget .

  • Cntk.Core_app-<VERSION>.dll
  • Cntk.Math_app-<VERSION>.dll
  • libopenblas.dll

Utilizar o Python

Você pode usar Python para avaliar um modelo pré-treinado. Exemplos podem ser encontrados aqui.

Utilizar o Java

CNTK também fornece APIs para avaliar modelo na aplicação java. Por favor, note que o CNTK Java API ainda é experimental e sujeito a alterações.

O exemplo de Java mostra como avaliar um modelo da CNN usando a API de Java.

Para utilizar CNTK Biblioteca Java, adicione o cntk.jar ficheiro ao classpath seu projeto Java. Se estiver a trabalhar com um IDE, deve adicionar isto como um frasco não gerido. O ficheiro cntk.jar pode ser encontrado no pacote de libertação binário CNTK (na pasta cntk\cntk\java). Você também pode construir cntk.jar a partir de CNTK fonte. Por favor, defina java.library.path também o diretório que contém Cntk.Core.JavaBinding-<Version>.dll, e certifique-se de que o diretório que contém DLLs binários CNTK está na rota de pesquisa DLL do seu sistema, por exemplo, adicionando o diretório à variável ambiente PATH. Por favor, note que também precisa de instalar o Pacote Redistribuable Visual C++ para Visual Studio 2017. Se você entrar UnsatisfiedLinkErrors em Java, é tipicamente porque o diretório não está no caminho de pesquisa DLL (ou na ordem errada).

A biblioteca Java é atualmente construída e testada com Oracle JDK 8 de 64 bits.