Quelle est la différence entre les tf.espace réservé et tf.Variable?
Je suis un débutant à TensorFlow. Je suis confus au sujet de la différence entre tf.placeholder
et tf.Variable
. De mon point de vue, tf.placeholder
est utilisé pour la saisie de données, et tf.Variable
est utilisé pour stocker l'état des données. C'est tout ce que je sais.
Quelqu'un pourrait-il m'expliquer plus en détail au sujet de leurs différences? En particulier, lors de l'utilisation de tf.Variable
et quand utiliser tf.placeholder
?
- Intuitivement, vous aurez envie de gradients à l'égard de
Variable
s, mais pasplaceholder
s (dont les valeurs doivent toujours être fourni).
Vous devez vous connecter pour publier un commentaire.
En bref, vous utilisez
tf.Variable
pour éducables variables telles que le poids (W) et de biais (B) pour votre modèle.tf.placeholder
est utilisé pour nourrir les exemples d'entraînement.C'est une façon de nourrir les exemples de formation lors de la formation:
Votre
tf.variables
seront formés (modifié) à la suite de cette formation.Voir plus à https://www.tensorflow.org/versions/r0.7/tutorials/mnist/tf/index.html. (Les exemples sont pris à partir de la page web.)
La différence est que, avec
tf.Variable
vous devez fournir une valeur initiale lorsque vous déclarez. Avectf.placeholder
vous n'avez pas à fournir une valeur initiale et vous pouvez le spécifier au moment de l'exécution avec lesfeed_dict
argument à l'intérieur deSession.run
Depuis Tenseur des calculs composer de graphiques puis c'est mieux pour interpréter les deux en termes de graphes.
Prendre l'exemple de la régression linéaire simple WX+B=Y(où W et B pour les poids et les biais et X pour les observations", les entrées et Y pour les observations de la production). Évidemment, X et Y sont de même nature(manifeste des variables), qui diffèrent de celle de W et B(variables latentes). X et Y sont les valeurs des échantillons(observations) et donc besoin d'un lieu d'être rempli, tandis que W et B sont les poids et les biais, Variables(la valeur précédente affecte le plus tard) dans le graphique qui devraient être formés à l'aide de différents X et Y des paires. On place les différents échantillons à l' Espaces réservés pour former le Variables.
Nous peut et ne doit enregistrer ou restaurer la Variables à enregistrer ou à la reconstruction du graphe. Espaces réservés sont pour la plupart titulaires pour les différents ensembles de données (par exemple la formation de données ou des données de test) mais Variables sont formés dans le processus de formation et de rester le même(à prédire le résultat de l'entrée ou de la carte les entrées et les sorties[étiquettes] des échantillons) plus tard, jusqu'à ce que vous recycler le modèle(en utilisant différents ou les mêmes échantillons à remplir dans le Espaces réservés souvent par le biais de la dict, par exemple
session.run(a_graph, dict={a_placeholder_name: sample_values})
, Espaces réservés sont également passés en paramètres à définir des modèles).Si vous modifiez des espaces réservés(ajouter ou de supprimer ou de modifier la forme et etc) d'un modèle dans le milieu de la formation, vous pouvez toujours recharger le point de contrôle sans aucune autre modification. Mais si les variables d'un modèle enregistré est changé, vous devez ajuster le point de contrôle en conséquence pour le recharger et continuer la formation(toutes les variables définies dans le graphique devrait être disponible dans le point de contrôle).
Pour résumer, si les valeurs sont à partir des échantillons(observations que vous avez déjà) que vous en faire un espace réservé pour les tenir, alors que si vous avez besoin d'un paramètre d'être formés à tirer parti d'un Variable(il suffit de mettre, ensemble la Variables pour les valeurs que vous souhaitez obtenir de l'aide TF automatiquement).
Pour plus d'informations, veuillez déduire de cette simple et illustrant doc.
TL;DR
Variables
Espaces réservés
tf.placeholder_with_default
)La différence la plus évidente entre les tf.Variable et la tf.espace réservé est que
L'initialisation de ces variables est fait avec
sess.run(tf.global_variables_initializer())
. Aussi, tout en créant une variable, vous devez passer un Tenseur de sa valeur initiale à laVariable()
constructeur et lorsque vous créez une variable que vous savez toujours à sa forme.D'autre part, vous ne pouvez pas mettre à jour l'espace réservé. Ils ne devraient pas être initialisé, mais parce qu'ils sont une promesse d'avoir un tenseur, vous avez besoin de nourrir la valeur en eux
sess.run(<op>, {a: <some_val>})
. Et enfin, par rapport à une variable, espace réservé pourriez ne pas savoir la forme. Vous pouvez soit fournir des pièces de dimensions ou de fournir de rien du tout.Il y a d'autres différences:
Qui est intéressant, c'est que non seulement les espaces réservés peuvent être nourris. Vous pouvez nourrir la valeur d'une Variable, et même à une constante.
Ajoutant à d'autres réponses, elles aussi très bien l'expliquer dans ce MNIST tutoriel sur Tensoflow site web:
x
la forme de la[batch size, features]
, nous avons le poids allant de l'entrée à la première couche de la taille[features, hidden units]
et les biais[hidden units]
. Donc ma question est: comment pouvons-nous multiplions les ensemble? Si nous netf.matmul(x, w)
puis nous allons obtenir[batch size, hidden units]
et nous ne pouvons pasb
à elle, car elle a la forme[hidden units]
Exemple:
Que de dire au nom de l'espace réservé est une promesse de fournir une valeur plus tard, c'est à dire
Variable sont tout simplement les paramètres de la formation (
W
(la matrice),b
(biais) de même que les variables que vous utilisez dans votre journée à jour de la programmation, à laquelle l'entraîneur des mises à jour/modifier à chaque exécution d'une étape ou d'.Tout espace réservé ne nécessite pas de valeur initiale, que lorsque vous avez créé
x
ety
TF n'a pas alloué de la mémoire, au lieu de cela plus tard, quand vous nourrissez les espaces réservés dans lessess.run()
à l'aide defeed_dict
, TensorFlow va allouer de la taille appropriée de la mémoire pour eux (x
ety
) - cette contrainte-ness nous permet de nous nourrir de n'importe quelle taille et la forme des données.En bref:
Variable - est un paramètre que vous voulez formateur (c'est à dire GradientDescentOptimizer) pour mettre à jour après chaque étape.
Espace réservé démo -
Exécution:
résultant de la sortie
Dans le premier cas 3 et 4,5 sera transmis à
a
etb
respectivement, puis à adder_node ouputting 7. Dans le second cas il y a une liste de flux, d'abord les étapes 1 et 2 seront ajoutés, 3 et 4 (a
etb
).Pertinente se lit comme suit:
Variables
Un TensorFlow variable est le meilleur moyen de représenter partagé, l'état persistant manipulé par votre programme. Les Variables sont manipulées par le tf.Variable de classe. En interne, une tf.Variable stocke une persistante tenseur. Des opérations spécifiques vous permettent de lire et de modifier les valeurs de ce tenseur. Ces modifications sont visibles à travers de multiples activités.Des séances, de sorte que plusieurs travailleurs peuvent voir les mêmes valeurs pour un tf.Variable. Les Variables doivent être initialisées avant de l'utiliser.
Exemple:
Cela crée un graphe. Les variables (x et y) peut être initialisé et la fonction (f), on a évalué dans un tensorflow session comme suit:
Espaces réservés
Un espace réservé est un nœud (même comme une variable dont la valeur peut être initialisé dans l'avenir. Ces nœuds fondamentalement la sortie de la valeur qui leur est attribuée au cours de l'exécution. Un espace réservé à un nœud peut être attribuée à l'aide de la tf.espace réservé() de la classe à laquelle vous pouvez fournir des arguments tels que le type de la variable et/ou de sa forme. Les espaces réservés sont largement utilisés pour la représentation de l'ensemble de données d'apprentissage dans une machine modèle d'apprentissage que l'ensemble de données d'apprentissage ne cesse de changer.
Exemple:
Remarque: "None" pour une dimension 'la taille".
Références:
Pense
Variable
dans tensorflow normal variables que nous utilisons dans les langages de programmation. Nous initialiser des variables, nous pouvons la modifier plus tard. Alors queplaceholder
ne nécessite pas de valeur initiale. Espace réservé simplement alloue un bloc de mémoire pour une utilisation ultérieure. Plus tard, nous pouvons utiliserfeed_dict
nourrir les données dansplaceholder
. Par défaut,placeholder
a une contrainte de forme, qui permet de nourrir les tenseurs de formes différentes dans une session. Vous pouvez faire de contrainte de forme en passant argument optionnel -forme, comme je l'ai fait ci-dessous.Tout en faisant l'Apprentissage de la Machine de la tâche, la plupart du temps nous ignorons le nombre de lignes, mais (supposons) nous savons que le nombre de fonctions ou de colonnes. Dans ce cas, on peut utiliser Aucun.
Maintenant, au moment de l'exécution, nous pouvons nourrir une matrice avec 4 colonnes et un nombre quelconque de lignes.
Également, les Espaces réservés sont utilisés pour l'entrée de données ( ils sont en quelque sorte des variables que nous utilisons pour nourrir notre modèle), où les Variables sont des paramètres tels que poids que nous formons au fil du temps.
Tensorflow utilise trois types de conteneurs pour stocker/exécuter le processus
Constantes :les Constantes détient les données typiques.
variables: les valeurs de Données sera modifié, avec respectivement les fonctions comme cost_function..
espaces réservés: Formation/Analyse de données dans le graphique.
Espace réservé :
Un espace réservé est simplement une variable que nous allons affecter des données à une date ultérieure. Il nous permet de créer nos opérations et de construire notre graphe, sans avoir besoin de les données. Dans TensorFlow de la terminologie, nous avons ensuite alimenter les données dans le graphique par le biais de ces espaces réservés.
Valeurs initiales ne sont pas nécessaires, mais peuvent avoir des valeurs par défaut avec
tf.placeholder_with_default)
Nous avons à offrir de la valeur au moment de l'exécution, comme :
Variable :
l'état persistant manipulé par votre programme.
représente un tenseur dont la valeur peut être modifiée en cours d'exécution de la fpo sur elle.
Exemple :
tf.Variable("Welcome to tensorflow!!!")
Penser à un graphe. Dans un tel graphe, nous avons besoin d'un nœud d'entrée de passer nos données sur le graphe, les nœuds doivent être définies comme espace Réservé dans tensorflow.
Ne pense pas comme un programme en Python. Vous pouvez écrire un programme en Python et faire toutes ces choses que les gars expliqué dans d'autres réponses juste par des Variables, mais pour le calcul des graphiques dans les tensorflow, pour nourrir vos données pour le graphique, vous devez définir ces hoche la tête comme des Espaces réservés.