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 exemple40
, 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 éparsedynamicAxis
(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)^T
de 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 H
et 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 }
}
})
}