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