2017-06-15 5 views
2

Je suis udacity MNIST tutorial et les données MNIST est à l'origine 28*28 matrice. Cependant juste avant d'alimenter ces données, ils aplatissent les données dans un tableau 1d avec 784 colonnes (784 = 28 * 28).Pourquoi avons-nous aplatir les données avant de les introduire dans tensorflow?

Par exemple, forme de jeu de la formation initiale était (200000, 28, 28).
200000 lignes (données). Chaque donnée est 28 * 28 matrice

Ils ont converti ce dans l'ensemble de la formation dont la forme est (200000, 784)

Quelqu'un peut-il expliquer pourquoi ils aplatissent les données avant l'alimentation à tensorflow?

+1

Votre lien commence par localhost, vous devez résoudre ce – gdelab

+0

Merci. fixé maintenant. – Aaron

+1

Vous n'avez pas besoin de l'aplatir avant de l'envoyer à tensorflow. Vous pourriez l'aplatir dans Tensorflow. – Wontonimo

Répondre

4

Parce que quand vous ajoutez une couche entièrement connecté, vous voulez toujours que vos données soient un (1 ou) 2 matrice bidimensionnelle, où chaque ligne est le vecteur représentant vos données. De cette façon, la couche entièrement connectée est juste une multiplication matricielle entre votre entrée (de taille (batch_size, n_features)) et les poids (de forme (n_features, n_outputs)) (plus le biais et la fonction d'activation), et vous obtenez une sortie de forme (batch_size, n_outputs). De plus, vous n'avez vraiment pas besoin des informations de forme d'origine dans un calque entièrement connecté, donc c'est OK de le perdre.

Il serait plus compliqué et moins efficace pour obtenir le même résultat sans refaçonnage d'abord, c'est la raison pour laquelle nous le faisons toujours avant une couche entièrement connecté. Pour un calque convolutif, au contraire, vous devez conserver les données dans leur format d'origine (largeur, hauteur).

+0

Bon appel sur le réseau de convolution. – Wontonimo

2

C'est une convention avec des couches entièrement connectées. Les couches entièrement connectées connectent chaque nœud de la couche précédente à chaque nœud de la couche successive, de sorte que la localité n'est pas un problème pour ce type de couche.

De plus en définissant la couche comme celui-ci, on peut calculer efficacement l'étape suivante en calculant la formule: f(Wx + b) = y. Ce ne serait pas aussi facilement possible avec l'entrée multidimensionnelle et remodeler l'entrée est faible coût et facile à accomplir.