Partager via


Entrée{}

Définit une entrée alimentée par un lecteur.

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

Paramètres

  • shape: scalaire (si l’entrée est un vecteur) ou forme tenseur (si l’entrée est multidimensionnelle). Par exemple 40 , pour les fonctionnalités à 40 dimensions ou (640:480:3) pour les images couleur de taille VGA.
  • sparse (valeur par défaut : false) : si true, l’entrée est stockée en tant que matrice éparse
  • dynamicAxis (valeur par défaut : Aucun) : autre axe dynamique à utiliser par cette entrée

Valeur retournée

Variable qui reçoit sa valeur à partir d’un reader flux du même nom.

###Description

Input{} déclare une variable qui représente l’entrée lue à partir d’un lecteur. Les entrées doivent être déclarées au niveau le plus externe de la BrainScriptNetworkBuilder section, et la reader section doit définir un flux portant le même nom.

####Sparse données d’entrée

L’option sparse=true déclare que les données d’entrée doivent être représentées sous la forme d’un vecteur éparse. Il est couramment utilisé pour lire des données de catégorie (telles que des mots) représentées par des vecteurs à chaud. Les entrées éparses ont deux utilisations courantes :

  • entrées incorporées ; Et
  • Étiquettes.

Une incorporation est une collection de vecteurs continus denses indexés par l’ID numérique d’un mot (ou d’un autre élément catégoriel). Dans CNTK, cette opération d’index est exprimée sous la forme d’une multiplication matricielle avec une représentation à chaud du mot. Par exemple, le deuxième mot du dictionnaire serait représenté par un vecteur w = (0, 1, 0, 0, ..., 0)^Tde colonne et le produit E * w de matrice équivaut à récupérer la deuxième colonne d’une matrice E, où les colonnes de E sont les vecteurs d’incorporation.

Formellement, ce produit matriciel se multiplie avec beaucoup de zéros, mais si w est représenté au format éparse, cette opération ne équivaut en effet qu’à une opération d’indexation, ce qui est bon marché.

Notez que les données d’entrée de rang>1 ne peuvent pas être représentées au format éparse.

Étiquettes éparses

Comme les entrées éparses, les étiquettes de mots ou d’autres étiquettes catégorielles peuvent être représentées sous forme éparse.

Notez toutefois que les étiquettes éparses ne sont actuellement pas prises en charge par la forme directe du CrossEntropyWithSoftmax(). Au lieu de cela, un formulaire écrit manuellement doit être utilisé, comme indiqué ici

Notez que les données d’étiquettes de rang>1 ne peuvent pas être représentées au format éparse.

Entrées d’image

Les images sont lues comme des tenseurs de rang 3 des dimensions [W x H x C] du tenseur avec la largeur W, la hauteur Het le nombre de canaux C de couleur (3 pour RVB ou 1 pour B&W).

Séquences de longueur variable

Les entrées peuvent être des échantillons individuels (par exemple, des images) ou des séquences d’échantillons (par exemple, des phrases). Pour CNTK, ils sont identiques (un exemple individuel est une séquence de longueur 1). Il appartient aux données d’entrée et au lecteur spécifiques si une entrée reçoit des échantillons ou des séquences individuels.

Exemples

Vecteurs de fonctionnalité vocale à 40 dimensions

features = Input{40}

Pour lire une fenêtre entière comprenant 10 images voisines de gauche et 10 à droite :

features = Input{(40:21)}

séquences Word, taille de vocabulaire 33124

words = Input{33124, sparse=true}

avec la définition de lecteur correspondante (pour les lire à partir d’un fichier CTF) :

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

CIFAR-10 Images

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

avec la définition de lecteur correspondante :

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