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