Freigeben über


Eingabe{}

Definiert eine Eingabe, die von einem Leser gespeist wird.

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

Parameter

  • shape: skalar (wenn die Eingabe ein Vektor ist) oder Tensorform (wenn die Eingabe mehrdimensional ist). Z. B. 40 für 40-dimensionale Features oder (640:480:3) für Farbbilder im VGA-Format.
  • sparse (Standard: false): Wenn true, wird die Eingabe als Sparsematrix gespeichert.
  • dynamicAxis (Standard: Keine): Alternative dynamische Achse, die von dieser Eingabe verwendet werden soll

Rückgabewert

Eine Variable, die ihren Wert aus einem reader Stream mit demselben Namen empfängt.

###Description

Input{} deklariert eine Variable, die eingabelese von einem Leser darstellt. Eingaben müssen auf der äußersten Ebene des BrainScriptNetworkBuilder Abschnitts deklariert werden, und der reader Abschnitt muss einen Stream mit demselben Namen definieren.

####Sparse Eingabedaten

Die sparse=true Option erklärt, dass die Eingabedaten als Sparsevektor dargestellt werden sollen. Dies wird häufig zum Lesen von kategorischen Daten (z. B. Wörtern) verwendet, die durch One-Hot-Vektoren dargestellt werden. Sparse-Eingaben haben zwei häufige Verwendungsmöglichkeiten:

  • Eingaben, die eingebettet werden; Und
  • Etiketten.

Eine Einbettung ist eine Auflistung von dichten kontinuierlichen Vektoren, die von der numerischen ID eines Worts (oder eines anderen kategorischen Elements) indiziert werden. In CNTK wird dieser Indexvorgang als Matrixmultiplikation mit einer einspitzen Darstellung des Worts ausgedrückt. Beispielsweise würde das zweite Wort im Wörterbuch durch einen Spaltenvektor w = (0, 1, 0, 0, ..., 0)^Tdargestellt, und das Matrixprodukt E * w entspricht dem Abrufen der zweiten Spalte einer Matrix E, wobei die Spalten von E die Einbettungsvektoren sind.

Formal multipliziert sich dieses Matrixprodukt mit vielen Nullen, aber wenn w er im Sparseformat dargestellt wird, ist dieser Vorgang in der Tat nur ein Indizierungsvorgang, so dass dies billig ist.

Beachten Sie, dass Eingabedaten von Rang>1 nicht im Sparseformat dargestellt werden können.

Sparsebeschriftungen

Wie Sparseeingaben können Wörter oder andere kategorische Bezeichnungen in Sparseform dargestellt werden.

Beachten Sie jedoch, dass Sparsebezeichnungen derzeit nicht von der direkten Form von CrossEntropyWithSoftmax()unterstützt werden. Stattdessen muss eine manuell geschriebene Form verwendet werden, wie hier angegeben

Beachten Sie, dass Bezeichnungsdaten von Rang>1 nicht im Sparseformat dargestellt werden können.

Bildeingaben

Bilder werden als Rang-3-Tensoren mit Tensordimensionen [W x H x C] mit Breite W, Höhe Hund Anzahl von Farbkanälen C (3 für RGB oder 1 für B&W) gelesen.

Sequenzen mit variabler Länge

Eingaben können entweder einzelne Stichproben (z. B. Bilder) oder Sequenzen von Beispielen (z. B. Sätze) sein. Für CNTK sind diese identisch (ein einzelnes Beispiel ist eine Sequenz der Länge 1). Ob eine Eingabe einzelne Stichproben oder Sequenzen empfängt, liegt an den spezifischen Eingabedaten und dem Leser.

Beispiele

40-dimensionale Sprachfeaturevektoren

features = Input{40}

So lesen Sie ein ganzes Fenster mit 10 linken und 10 rechten Nachbarrahmen:

features = Input{(40:21)}

Word Sequenzen, Vokabulargröße 33124

words = Input{33124, sparse=true}

mit entsprechender Leserdefinition (um sie aus einer CTF-Datei zu lesen):

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

CIFAR-10-Bilder

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

mit entsprechender Leserdefinition:

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