Partilhar via


Visão geral de utilização CNTK

Para utilizar CNTK é necessário baixar os binários executáveis ou descarregar o código fonte e compilá-lo na sua máquina (detalhes). Existem três tarefas principais (ou ações) que são apoiadas por CNTK:

  • Trem - Defina uma rede e treine-a para produzir um modelo treinado utilizando dados de formação
  • Avaliar - Testar um modelo treinado para avaliar o seu desempenho utilizando dados de teste
  • Implementar - Utilize um modelo treinado, por exemplo, na sua própria solução, para classificar novos casos

Uma breve visão geral de cada uma destas tarefas é dada abaixo e são fornecidos apontamentos para uma descrição mais detalhada. Além disso, existem outras tarefas que CNTK suporta, como editar modelos existentes e escrever saídas de nó para um ficheiro. Uma descrição destes é fornecida na secção Tópicos Avançados na página de comandos de nível superior .

Treinar um modelo usando CNTK

A formação de uma rede neural com CNTK envolve três componentes que devem ser configurados:

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

É necessário fornecer esta informação através de um ficheiro de configuração como o primeiro argumento ao chamar a CNTK executável. O ficheiro de configuração utiliza uma sintaxe específica. Consulte a visão geral do ficheiro Config para obter mais detalhes sobre ficheiros config.

No seguinte utilizamos a configuração CNTK e resultados do exemplo MNIST, em particular a configuração '01_OneHidden_ndl_deprecated.cntk' (ver Imagem/GettingStarted e 01_OneHidden.cntk para obter todos os detalhes).

A linha de comando CNTK para este exemplo é cntk configFile=01_OneHidden_ndl_deprecated.cntk. O seguinte corte fornece uma visão geral dos conteúdos de ficheiros config que são relevantes para a formação.

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 código acima define um comando chamado MNISTtrain com action = "train". Outras ações apoiadas são, por exemplo test , ou write. O deviceId parâmetro especifica se deve utilizar CPU ou GPU. Quando programado para "auto", CNTK escolherá o melhor dispositivo disponível. Desementa-o para -1 utilizar o CPU ou para um valor >=0 para utilizar uma GPU específica. O modelPath define onde armazenar os modelos intermédios e finais treinados. Neste exemplo utiliza a ModelDir variável definida no início do ficheiro de configuração.

Os três principais blocos de configuração para o treino definem a própria rede e os parâmetros para o algoritmo de treino e para 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. Pode utilizar o Simple Network Builder para modelos padrão ou o BrainScript Network Builder para os personalizados. Consulte as páginas correspondentes para mais detalhes.
  • SGD - este bloco permite-lhe parametrizar o algoritmo de treino (descida estocástica do gradiente). As opções configuráveis incluem impulso, taxa de aprendizagem adaptativa, tamanho adaptativo de minibatch, treino paralelo. Consulte o bloco SGD para mais detalhes.
  • leitor - o bloco de leitores define qual o leitor a utilizar e onde estão os ficheiros de entrada correspondentes. CNTK fornece vários leitores de dados para diferentes formatos e tarefas (ver bloco Reader).

Finalmente, a linha command = MNISTtrain especifica quais das tarefas definidas a executar. Para executar várias tarefas consecutivamente, por exemplo, treino e avaliação, basta adicionar mais tarefas ao comando separado por um cólon: command = "MNISTtrain:MNISTtest".

Avaliação de um modelo treinado

Para avaliar a precisão de um modelo treinado, utilize o eval ou test o comando (consulte também Train, Test, Eval para obter todos os detalhes). A configuração correspondente no exemplo do 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 é necessário definir um modelo que deve ser utilizado para testar utilizando o modelPath parâmetro. Neste exemplo, o modelPath não é definido dentro do MNISTtest bloco mas no nível superior (ver parte de treino acima) e é usado tanto pela e test pelas açõestrain. Dentro do reader bloco especifique o ficheiro de dados que deve ser utilizado para testes, Test-28x28.txt no exemplo. Finalmente, tens de definir command = MNISTtest e correr cntk configFile=01_OneHidden_ndl_deprecated.cntk para executar os testes. 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 no seu próprio código

Depois de ter treinado um modelo, precisa da funcionalidade para avaliar o modelo no seu ambiente alvo. CNTK fornece várias formas de servir os seus modelos em diferentes cenários. Pode utilizar um modelo treinado a partir de C++, Python, C# ou outros idiomas .NET. Pode fazer avaliação na sua máquina ou em Azure. A secção de Avaliação CNTK Modelos (ver barra lateral) tem muitos detalhes, incluindo avaliação usando C++/Python/C#/Azure.

Próximos passos