Condividi tramite


Input{}

Definisce un input alimentato da un lettore.

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

Parametri

  • shape: scalare (se l'input è un vettore) o forma tensor (se l'input è multidimensionale). Ad esempio 40 , per le caratteristiche 40 dimensionali o (640:480:3) per le immagini a colori di dimensioni VGA.
  • sparse (impostazione predefinita: false): se true, l'input viene archiviato come matrice di tipo sparse
  • dynamicAxis (impostazione predefinita: Nessuno): asse dinamico alternativo da usare da questo input

Valore restituito

Variabile che riceve il relativo valore da un reader flusso con lo stesso nome.

###Description

Input{} dichiara una variabile che rappresenta la lettura dell'input da un lettore. Gli input devono essere dichiarati al livello più esterno della BrainScriptNetworkBuilder sezione e la reader sezione deve definire un flusso con lo stesso nome.

####Sparse dati di input

L'opzione sparse=true dichiara che i dati di input devono essere rappresentati come vettore di tipo sparse. Viene comunemente usato per la lettura di dati categorici (ad esempio parole) rappresentati da vettori one-hot. Gli input di tipo sparse hanno due usi comuni:

  • input che vengono incorporati; E
  • Etichette.

Un incorporamento è una raccolta di vettori con valori continui densi indicizzati dall'ID numerico di una parola (o di un altro elemento categorico). In CNTK questa operazione sull'indice viene espressa come moltiplicazione di matrice con una rappresentazione a caldo della parola. Ad esempio, la seconda parola nel dizionario sarebbe rappresentata da un vettore w = (0, 1, 0, 0, ..., 0)^Tdi colonna e il prodotto E * w matrice equivale a recuperare la seconda colonna di una matrice E, dove le colonne di sono i vettori di E incorporamento.

Formalmente, questo prodotto matrice moltiplica con un sacco di zere, ma se w è rappresentato in formato sparse, questa operazione effettivamente equivale a un'operazione di indicizzazione, quindi questo è economico.

Si noti che i dati di input di rango>1 non possono essere rappresentati in formato sparse.

Etichette di tipo sparse

Come gli input di tipo sparse, le parole o altre etichette categoriche possono essere rappresentate in formato sparse.

Si noti, tuttavia, che le etichette di tipo sparse non sono attualmente supportate dal formato diretto di CrossEntropyWithSoftmax(). È invece necessario usare un modulo scritto manualmente, come indicato qui

Si noti che le etichette dei dati di rango>1 non possono essere rappresentate in formato sparse.

Input dell'immagine

Le immagini vengono lette come tensori di rango 3 di dimensioni [W x H x C] tensor con larghezza W, altezza He numero di canali C di colore (3 per RGB o 1 per B&W).

Sequenze a lunghezza variabile

Gli input possono essere singoli esempi (ad esempio immagini) o sequenze di campioni (ad esempio frasi). Per CNTK, si tratta dello stesso (un singolo campione è una sequenza di lunghezza 1). Spetta ai dati di input specifici e al lettore se un input riceve singoli campioni o sequenze.

Esempio

Vettori di funzionalità di riconoscimento vocale 40 dimensionali

features = Input{40}

Per leggere un'intera finestra, tra cui 10 frame a sinistra e 10 frame adiacenti a destra:

features = Input{(40:21)}

sequenze Word, dimensioni del vocabolario 33124

words = Input{33124, sparse=true}

con la definizione del lettore corrispondente (per leggerle da un file CTF):

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

Immagini CIFAR-10

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

con la definizione del lettore corrispondente:

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