Compartilhar via


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