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 esempio40
, 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 sparsedynamicAxis
(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)^T
di 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 H
e 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 }
}
})
}