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)^T
de 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 H
y 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 }
}
})
}