Compartilhar via


Entrada{}

Define uma entrada que é alimentada por um leitor.

Input (shape, sparse=false, dynamicAxis=DefaultAxis, tag='feature')

Parâmetros

  • shape: escalar (se a entrada for um vetor) ou forma tensor (se a entrada for multidimensional). Por exemplo 40 , para recursos de 40 dimensões ou (640:480:3) para imagens coloridas do tamanho de VGA.
  • sparse (padrão: false): se true, a entrada será armazenada como matriz esparsa
  • dynamicAxis (padrão: Nenhum): eixo dinâmico alternativo a ser usado por essa entrada

Retornar valor

Uma variável que recebe seu valor de um reader fluxo de mesmo nome.

###Description

Input{} declara uma variável que representa a entrada lida de um leitor. As entradas devem ser declaradas no nível mais externo da BrainScriptNetworkBuilder seção e a reader seção deve definir um fluxo com o mesmo nome.

####Sparse dados de entrada

A sparse=true opção declara que os dados de entrada devem ser representados como um vetor esparso. Isso é comumente usado para ler dados categóricos (como palavras) representados por vetores one-hot. Entradas esparsas têm dois usos comuns:

  • entradas que são inseridas; E
  • Rótulos.

Uma inserção é uma coleção de vetores de valor contínuo densos indexados pela ID numérica de uma palavra (ou outro item categórico). No CNTK, essa operação de índice é expressa como uma multiplicação de matriz com uma representação one-hot da palavra. Por exemplo, a segunda palavra no dicionário seria representada por um vetor w = (0, 1, 0, 0, ..., 0)^Tde coluna e o produto E * w de matriz é equivalente a recuperar a segunda coluna de uma matriz E, em que as colunas de E são os vetores de inserção.

Formalmente, esse produto de matriz multiplica-se com muitos zeros, mas se w for representado em formato esparso, essa operação realmente equivale apenas a uma operação de indexação, portanto, isso é barato.

Observe que os dados de entrada da classificação>1 não podem ser representados no formato esparso.

Rótulos esparsos

Como entradas esparsas, as palavras ou outros rótulos categóricos podem ser representados em formato esparso.

Observe, no entanto, que atualmente não há suporte para rótulos esparsos na forma direta do CrossEntropyWithSoftmax(). Em vez disso, um formulário escrito manualmente deve ser usado, conforme mostrado aqui

Observe que os dados de rótulos da classificação>1 não podem ser representados no formato esparso.

Entradas de imagem

As imagens são lidas como tensores de classificação 3 de dimensões [W x H x C] tensores com largura W, altura He número de canais C de cores (3 para RGB ou 1 para B&W).

Sequências de comprimento variável

As entradas podem ser amostras individuais (por exemplo, imagens) ou sequências de exemplos (por exemplo, frases). Para CNTK, eles são os mesmos (uma amostra individual é uma sequência de comprimento 1). Cabe aos dados de entrada e ao leitor específicos se uma entrada recebe amostras ou sequências individuais.

Exemplos

Vetores de recursos de fala 40 dimensionais

features = Input{40}

Para ler uma janela inteira, incluindo 10 quadros vizinhos à esquerda e 10 à direita:

features = Input{(40:21)}

Word sequências, tamanho do vocabulário 33124

words = Input{33124, sparse=true}

com a definição de leitor correspondente (para lê-los de um arquivo CTF):

reader = {
    readerType = "CNTKTextFormatReader"
    file = "my_text_corpus.ctf"
    randomize = true
    input = { words = { alias = "w" ; dim = 33124 ;  format = "sparse" }}
}

Imagens cifar-10

images = Input{(32:32:3)}
labels = Input{10}

com a definição de leitor correspondente:

reader = {
    verbosity = 0 ; randomize = true
    deserializers = ({
        type = "ImageDeserializer" ; module = "ImageReader"
        file = "$dataDir$/cifar-10-batches-py/train_map.txt"
        input = {
            images = { transforms = (
                { type = "Crop" ; cropType = "RandomSide" ; sideRatio = 0.8 ; jitterType = "UniRatio" } :
                { type = "Scale" ; width = 32 ; height = 32 ; channels = 3 ; interpolations = "linear" } :
                { type = "Transpose" }
            )}
            labels = { labelDim = 10 }
        }
    })
}