Dela via


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 matris
  • dynamicAxis (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 Hoch 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 }
        }
    })
}