Visão geral do ficheiro config do BrainScript
Para executar CNTK utilize uma linha de comando semelhante à cntk configFile=yourExp.cntk
do seuExp.cntk é um ficheiro 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 que ação deve ser realizada com informações relacionadas. Para ilustrar a configuração e os blocos de comando, usamos um exemplo simples abaixo (retirado 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, pode notar que todos os valores de configuração são especificados como um par de valor-nome. Um valor pode ser um numérico, uma corda, uma lista, ou mesmo um bloco de configurações. Pode especificar variáveis, como DataDir
neste exemplo, e remeter para elas mais tarde no script utilizando a notação $DataDir$
.
O parâmetro command
de configuração de nível superior determina quais os blocos de comando a executar e em que ordem são executados se for especificado mais de um bloco de comando. Neste exemplo, o mnistTrain
bloco de comando será executado. Este bloco de comando especifica a ação a executar, que é train
neste caso. Existem frequentemente três blocos de parâmetros associados à ação do comboio:
- um bloco de construtores de rede, que especifica como construir uma rede a partir do zero e como carregar uma modelo a partir de um ficheiro modelo existente,
- um bloco de aprendizes, que especifica o algoritmo de treino a utilizar,
- um bloco de leitores, que especifica onde e como carregar funcionalidades e etiquetas.
Neste exemplo específico, o construtor de rede indicado pelo bloco BrainScriptNetworkBuilder é utilizado para definir a rede, o algoritmo de aprendizagem de gradiente estocástico como indicado pelo bloco SGD é usado para treinar o modelo, e o leitor de formato de texto CNTK é usado para carregar as funcionalidades e etiquetas de ficheiros em formato CNTK Text. Note que os leitores são implementados como DLLs separados, e o nome do leitor é também o nome do ficheiro DLL que será carregado para ler dados.
Os blocos de configuração mais utilizados são:
- Construtores de rede
- SimpleNetworkBuilder - cria uma das redes predefinidas com uma personalização limitada.
- BrainScriptNetworkBuilder - cria uma rede definida utilizando o idioma de descrição da rede de CNTK (BrainScript). Proporciona total flexibilidade na conceção das suas próprias operações de rede e estrutura.
- Alunos
- SGD - usa o algoritmo de descida do gradiente estocástico para treinar o modelo. É o treinador desejado para a maioria das candidaturas.
- Leitores de Dados
- CNTK Text Format Reader - lê o formato CNTK baseado em texto, que suporta múltiplas entradas combinadas no mesmo ficheiro.
- UCI Fast Reader (precotado) - lê o formato UCI baseado em texto, que contém etiquetas e funcionalidades combinadas num único ficheiro.
- HTKMLF Reader - lê os ficheiros de formato HTK/MLF, frequentemente utilizados em aplicações de reconhecimento de voz.
- LM Sequence Reader - lê ficheiros baseados em texto que contêm sequências de palavras, para prever sequências de palavras. Isto é frequentemente usado na modelação linguística.
- LU Sequence Reader - lê ficheiros baseados em texto que contêm sequências de palavras e suas etiquetas. Isto é frequentemente usado para a compreensão da linguagem.
Nas subsecções seguintes, descreveremos CNTK configuração e os blocos acima em detalhe. Também pode saltar para os blocos individuais utilizando os links do texto acima.
Ver também