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 exemplo40
, 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 esparsadynamicAxis
(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)^T
de 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 H
e 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 }
}
})
}