Visão geral do arquivo de configuração do BrainScript
Para executar CNTK você usa uma linha de comando semelhante à cntk configFile=yourExp.cntk
de onde seuExp.cntk é um arquivo de configuração CNTK, que normalmente contém vários blocos de comando. Um bloco de comando é um bloco de nível superior da configuração. Cada bloco de comando deve especificar qual ação deve ser executada com informações relacionadas. Para ilustrar a configuração e os blocos de comando, usamos um exemplo simples abaixo (obtido do exemplo MNIST).
rootDir = ".." # often, this is overwritten on the command line
configDir = "$rootDir$/Config"
dataDir = "$rootDir$/Data"
outputDir = "$rootDir$/Output"
modelDir = "$outputDir$/Models"
command = mnistTrain
mnistTrain = [
action = "train"
# network definition
BrainScriptNetworkBuilder = (new ComputationNetwork
include "$ConfigDir$/01_OneHidden.bs"
)
# SGD learner configuration
SGD = [
modelPath = "$ModelDir$/01_OneHidden_Model.dnn"
epochSize = 60000
minibatchSize = 32
learningRatesPerMB = 0.1
maxEpochs = 30
]
# reader configuration
reader = [
readerType = "CNTKTextFormatReader"
file = "$DataDir$/Train-28x28_cntk_text.txt"
input = [
features = [
dim = 784
format = "dense"
]
labels = [
dim = 10
format = "dense"
]
]
]
]
Neste exemplo, você pode observar que todos os valores de configuração são especificados como um par nome-valor. Um valor pode ser numérico, uma cadeia de caracteres, uma lista ou até mesmo um bloco de configurações. Você pode especificar variáveis, como DataDir
neste exemplo, e fazer referência a elas posteriormente no script usando a notação $DataDir$
.
O parâmetro command
de configuração de nível superior determina quais blocos de comando devem ser executados e em que ordem eles são executados se mais de um bloco de comando for especificado. Neste exemplo, o mnistTrain
bloco de comandos será executado. Esse bloco de comando especifica a ação a ser executada, que é train
nesse caso. Geralmente, há três blocos de parâmetro associados à ação de trem:
- um bloco do construtor de rede, que especifica como criar uma rede do zero e como carregar um modelo de um arquivo de modelo existente,
- um bloco de aprendiz, que especifica qual algoritmo de treinamento usar,
- um bloco de leitor, que especifica onde e como carregar recursos e rótulos.
Neste exemplo específico, o construtor de rede indicado pelo bloco BrainScriptNetworkBuilder é usado para definir a rede, o algoritmo de aprendizado descendente de gradiente estocástico, conforme indicado pelo bloco SGD, é usado para treinar o modelo e o leitor de formato de texto CNTK é usado para carregar os recursos e rótulos de arquivos no formato CNTK Texto. Observe que os leitores são implementados como DLLs separadas e o nome do leitor também é o nome do arquivo DLL que será carregado para ler dados.
Os blocos de configuração mais usados são:
- Construtores de Rede
- SimpleNetworkBuilder – cria uma das redes predefinidas com personalização limitada.
- BrainScriptNetworkBuilder – cria uma rede definida usando a linguagem de descrição de rede do CNTK (BrainScript). Ele fornece flexibilidade total na criação de suas próprias operações de rede e estrutura.
- Alunos
- SGD – usa o algoritmo de descida de gradiente estocástico para treinar o modelo. É o treinador desejado para a maioria dos aplicativos.
- Leitores de Dados
- CNTK Leitor de Formato de Texto – lê o formato CNTK baseado em texto, que dá suporte a várias entradas combinadas no mesmo arquivo.
- Leitor Rápido da UCI (preterido) – lê o formato UCI baseado em texto, que contém rótulos e recursos combinados em um arquivo.
- Leitor HTKMLF – lê os arquivos de formato HTK/MLF, geralmente usados em aplicativos de reconhecimento de fala.
- Leitor de Sequência de LM – lê arquivos baseados em texto que contêm sequências de palavras, para prever sequências de palavras. Isso geralmente é usado na modelagem de linguagem.
- Leitor de Sequência lu - lê arquivos baseados em texto que contêm sequências de palavras e seus rótulos. Isso geralmente é usado para reconhecimento vocal.
Nas subseções a seguir, descreveremos CNTK configuração e os blocos acima em detalhes. Você também pode ir para os blocos individuais usando os links no texto acima.
Consulte também