Compartir a través de


Entrada{}

Define una entrada que un lector alimenta.

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

Parámetros

  • shape: escalar (si la entrada es un vector) o una forma tensor (si la entrada es multidimensional). Por ejemplo, 40 para características de 40 dimensiones o (640:480:3) para imágenes de color de tamaño VGA.
  • sparse (valor predeterminado: false): si es true, la entrada se almacena como matriz dispersa.
  • dynamicAxis (valor predeterminado: None): eje dinámico alternativo que usará esta entrada.

Valor devuelto

Variable que recibe su valor de una reader secuencia con el mismo nombre.

###Description

Input{} declara una variable que representa la entrada leída desde un lector. Las entradas deben declararse en el nivel más externo de la BrainScriptNetworkBuilder sección y la reader sección debe definir una secuencia con el mismo nombre.

####Sparse datos de entrada

La sparse=true opción declara que los datos de entrada se representarán como un vector disperso. Esto se usa normalmente para leer datos categóricos (como palabras) representados por vectores de un solo uso. Las entradas dispersas tienen dos usos comunes:

  • entradas que se insertan; Y
  • Etiquetas.

Una inserción es una colección de vectores densos con valores continuos indexados por el identificador numérico de una palabra (u otro elemento categórico). En CNTK, esta operación de índice se expresa como una multiplicación de matriz con una representación one-hot de la palabra. Por ejemplo, la segunda palabra del diccionario se representaría mediante un vector w = (0, 1, 0, 0, ..., 0)^Tde columna y el producto E * w de matriz equivale a recuperar la segunda columna de una matriz E, donde las columnas de E son los vectores de inserción.

Formalmente, este producto de matriz se multiplica con una gran cantidad de ceros, pero si w se representa en formato disperso, esta operación simplemente equivale a una operación de indexación, por lo que esto es barato.

Tenga en cuenta que los datos de entrada de la clasificación>1 no se pueden representar en formato disperso.

Etiquetas dispersas

Al igual que las entradas dispersas, la palabra u otras etiquetas de categorías se pueden representar en forma dispersa.

Sin embargo, tenga en cuenta que las etiquetas dispersas no son compatibles actualmente con la forma directa de CrossEntropyWithSoftmax(). En su lugar, se debe usar un formulario escrito manualmente, como se indica aquí.

Tenga en cuenta que los datos de etiquetas de la clasificación>1 no se pueden representar en formato disperso.

Entradas de imagen

Las imágenes se leen como tensores rank-3 de dimensiones [W x H x C] tensor con ancho W, alto Hy número de canales C de color (3 para RGB o 1 para B&W).

Secuencias de longitud variable

Las entradas pueden ser ejemplos individuales (por ejemplo, imágenes) o secuencias de muestras (por ejemplo, oraciones). Para CNTK, son iguales (una muestra individual es una secuencia de longitud 1). Es hasta los datos de entrada específicos y el lector si una entrada recibe muestras o secuencias individuales.

Ejemplos

Vectores de características de voz 40 dimensionales

features = Input{40}

Para leer una ventana completa, incluyendo 10 marcos vecinos izquierdos y 10 derecho:

features = Input{(40:21)}

Word secuencias, tamaño de vocabulario 33124

words = Input{33124, sparse=true}

con la definición de lector correspondiente (para leerlas desde un archivo CTF):

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

Imágenes CIFAR-10

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

con la definición del lector correspondiente:

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 }
        }
    })
}