Indata{}
Definierar indata som matas av en läsare.
Input (shape, sparse=false, dynamicAxis=DefaultAxis, tag='feature')
Parametrar
shape
: skalär (om indata är en vektor) eller tensorform (om indata är flerdimensionella). T.ex.40
för 40-dimensionella funktioner eller(640:480:3)
för färgbilder i VGA-storlek.sparse
(standard: false): om värdet är sant lagras indata som gles matrisdynamicAxis
(standard: Ingen): alternativ dynamisk axel som ska användas av dessa indata
Returvärde
En variabel som tar emot dess värde från en reader
ström med samma namn.
###Description
Input{}
deklarerar en variabel som representerar indata som lästs från en läsare.
Indata måste deklareras på den yttersta nivån i BrainScriptNetworkBuilder
avsnittet och reader
avsnittet måste definiera en ström med samma namn.
####Sparse indata
I sparse=true
alternativet anges att indata ska representeras som en gles vektor.
Detta används ofta för att läsa kategoriska data (till exempel ord) som representeras av one-hot-vektorer.
Glesa indata har två vanliga användningsområden:
- indata som bäddas in. Och
- Etiketter.
En inbäddning är en samling täta kontinuerligt värderade vektorer som indexerats med ett ords numeriska ID (eller något annat kategoriskt objekt).
I CNTK uttrycks den här indexåtgärden som en matris multiplikation med en en frekvent representation av ordet.
Till exempel skulle det andra ordet i ordlistan representeras av en kolumnvektor w = (0, 1, 0, 0, ..., 0)^T
, och matrisprodukten E * w
motsvarar att hämta den andra kolumnen i en matris E
, där kolumnerna E
i är inbäddningsvektorerna.
Formellt multipliceras den här matrisprodukten med många nollor, men om w
den representeras i ett glest format uppgår den här åtgärden faktiskt bara till en indexeringsåtgärd, så det här är billigt.
Observera att indata för rangordning>1 inte kan representeras i ett glest format.
Glesa etiketter
Precis som glesa indata kan ord eller andra kategoriska etiketter representeras i gles form.
Observera dock att glesa etiketter för närvarande inte stöds av den direkta formen av CrossEntropyWithSoftmax()
.
I stället måste ett manuellt skriftligt formulär användas, enligt vad som anges här
Observera att etiketternas data i rangordning>1 inte kan representeras i ett glest format.
Bildindata
Bilder läss som tensorer för rangordning 3 med tensordimensioner [W x H x C]
med bredd W
, höjd H
och antal färgkanaler C
(3 för RGB eller 1 för B&W).
Sekvenser med variabel längd
Indata kan vara antingen enskilda exempel (t.ex. bilder) eller sekvenser av exempel (t.ex. meningar). För CNTK är dessa samma (ett enskilt prov är en sekvens med längd 1). Det är upp till specifika indata och läsare om indata tar emot enskilda exempel eller sekvenser.
Exempel
40-dimensionella talfunktionsvektorer
features = Input{40}
Så här läser du ett helt fönster, inklusive 10 vänstra och 10 högra grannramar:
features = Input{(40:21)}
Word sekvenser, ordförrådsstorlek 33124
words = Input{33124, sparse=true}
med motsvarande läsardefinition (för att läsa dem från en CTF-fil):
reader = {
readerType = "CNTKTextFormatReader"
file = "my_text_corpus.ctf"
randomize = true
input = { words = { alias = "w" ; dim = 33124 ; format = "sparse" }}
}
CIFAR-10-avbildningar
images = Input{(32:32:3)}
labels = Input{10}
med motsvarande läsardefinition:
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 }
}
})
}