Compartilhar via


visão geral de uso CNTK

Para usar CNTK você precisa baixar os binários executáveis ou baixar o código-fonte e compilá-lo no computador (detalhes). Há três tarefas principais (ou ações) compatíveis com CNTK:

  • Treinar - Definir uma rede e treiná-la para produzir um modelo treinado usando dados de treinamento
  • Avaliar – Testar um modelo treinado para avaliar seu desempenho usando dados de teste
  • Implantar – Usar um modelo treinado, por exemplo, em sua própria solução, para classificar novas instâncias

Uma breve visão geral para cada uma dessas tarefas é fornecida abaixo e são fornecidos ponteiros para uma descrição mais detalhada. Além disso, há outras tarefas que CNTK dão suporte, como editar modelos existentes e saídas de nó de gravação em um arquivo. Uma descrição delas é fornecida na seção Tópicos Avançados na página de comandos de nível superior .

Treinar um modelo usando CNTK

Treinar uma rede neural com CNTK envolve três componentes que devem ser configurados:

  • rede: a rede neural, incluindo sua estrutura/fórmula, parâmetros de modelo. Critérios de treinamento e métrica de avaliação também estão incluídos aqui.
  • leitor: como os dados de treinamento são lidos
  • SGD: os hipermetrâmetros do processo stocástico-gradiente

Você precisa fornecer essas informações por meio de um arquivo de configuração como o primeiro argumento ao chamar o CNTK executável. O arquivo de configuração usa uma sintaxe específica. Confira a visão geral do arquivo de configuração para obter detalhes sobre arquivos de configuração.

No seguinte, usamos a configuração CNTK e os resultados do exemplo MNIST, em particular a configuração '01_OneHidden_ndl_deprecated.cntk' (consulte Image/GettingStarted e 01_OneHidden.cntk para obter detalhes completos).

A linha de comando CNTK deste exemplo é cntk configFile=01_OneHidden_ndl_deprecated.cntk. O snippet a seguir fornece uma visão geral do conteúdo do arquivo de configuração que são relevantes para treinamento.

modelDir = "$OutputDir$/Models"
deviceId = 0
command = MNISTtrain

modelPath = "$modelDir$/01_OneHidden"

MNISTtrain = [
    action = "train"

    # network definition   
    BrainScriptNetworkBuilder = (new ComputationNetwork
        include "$ConfigDir$/01_OneHidden.bs"
    )

    # learner configuration       
    SGD = [
        ...
    ]

    # reader configuration   
    reader = [
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Train-28x28_cntk_text.txt"
        ...
    ]    
]

O snippet de código acima define um comando chamado MNISTtrain com action = "train". Outras ações com suporte são, por exemplo test , ou write. O deviceId parâmetro especifica se a CPU ou a GPU devem ser usadas. Quando definido como "auto", CNTK escolherá o melhor dispositivo disponível. Defina-o para -1 usar a CPU ou um valor >=0 para usar uma GPU específica. O modelPath define onde armazenar os modelos treinados intermediários e finais. Neste exemplo, ele usa a ModelDir variável definida no início do arquivo de configuração.

Os três principais blocos de configuração para treinamento definem a própria rede e os parâmetros para o algoritmo de treinamento e o leitor de dados.

  • Construtor de rede – aqui você define a topologia e os detalhes da rede, como o tamanho e o número de camadas e o tipo de nós. Você pode usar o Simple Network Builder para modelos padrão ou o BrainScript Network Builder para os personalizados. Consulte as páginas correspondentes para obter detalhes.
  • SGD – esse bloco permite que você parametrize o algoritmo de treinamento (descendente de gradiente estocástico). As opções configuráveis incluem momentum, taxa de aprendizado adaptável, tamanho da minibatch adaptável, treinamento paralelo. Consulte o bloco SGD para obter mais detalhes.
  • leitor – o bloco de leitor define qual leitor usar e onde estão os arquivos de entrada correspondentes. CNTK fornece vários leitores de dados para diferentes formatos e tarefas (consulte o bloco Leitor).

Por fim, a linha command = MNISTtrain especifica quais das tarefas definidas serão executadas. Para executar várias tarefas consecutivamente, por exemplo, treinamento e avaliação, basta adicionar mais tarefas ao comando separado por dois-pontos: command = "MNISTtrain:MNISTtest".

Avaliando um modelo treinado

Para avaliar a precisão de um modelo treinado, use o comando ou test o eval comando (consulte também Treinar, Testar, Eval para obter detalhes completos). A configuração correspondente no exemplo MNIST 01_OneHidden.cntk é a seguinte.

testNetwork = {
    action = "test"
    minibatchSize = 1024    # reduce this if you run out of memory

    reader = {
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Test-28x28_cntk_text.txt"
        input = {
            features = { dim = 784 ; format = "dense" }
            labels =   { dim = 10  ; format = "dense" }
        }
    }
}

O MNISTtest bloco usa action = "test". Para a ação test , você precisa definir um modelo que deve ser usado para teste usando o modelPath parâmetro. Neste exemplo, não modelPath é definido dentro do MNISTtest bloco, mas no nível superior (consulte a parte de treinamento acima) e é usado por ações e test açõestrain. Dentro do reader bloco, você especifica o arquivo de dados que deve ser usado para teste, Test-28x28.txt no exemplo. Por fim, você precisa definir command = MNISTtest e executar cntk configFile=01_OneHidden_ndl_deprecated.cntk para executar o teste. O resultado na linha de comando é:

Final Results: Minibatch[1-625]: errs = 2.39% * 10000; ce = 0.076812531 * 10000; Perplexity = 1.0798396
COMPLETED!

Usando um modelo treinado em seu próprio código

Depois de treinar um modelo, você precisará da funcionalidade para avaliar o modelo em seu ambiente de destino. CNTK fornece várias maneiras de atender seus modelos em cenários diferentes. Você pode usar um modelo treinado de C++, Python, C# ou outras linguagens .NET. Você pode executar a avaliação em seu computador ou no Azure. A seção Avaliando modelos de CNTK (ver barra lateral) tem muitos detalhes, incluindo a avaliação usando C++/Python/C#/Azure.

Próximas etapas