Étant donné que les calculs de tenseurs se composent de graphiques, il est donc préférable d'interpréter les deux en termes de graphiques.
Prenons par exemple la régression linéaire simple
WX+B=Y
où W
et B
représentent les poids et le biais, X
les entrées des observations et Y
les sorties des observations.
De toute évidence, X
et Y
sont de même nature (variables manifestes) qui diffèrent de celle de W
et B
(variables latentes). X
et Y
sont des valeurs des échantillons (observations) et ont donc besoin d'un endroit à remplir, tandis que W
et B
sont les poids et le biais, Variables (les valeurs précédentes affectent les dernières) dans le graphique qui doivent être entraînés en utilisant différentes paires de X
et Y
. Nous plaçons différents échantillons dans les Placeholders pour entraîner les Variables.
Nous devons seulement enregistrer ou restaurer les Variables (aux points de contrôle) pour enregistrer ou reconstruire le graphique avec le code.
Les Placeholders sont principalement des conteneurs pour les différents ensembles de données (par exemple les données d'entraînement ou de test). Cependant, les Variables sont entraînées dans le processus d'entraînement pour les tâches spécifiques, c'est-à-dire pour prédire le résultat de l'entrée ou mapper les entrées aux étiquettes souhaitées. Elles restent les mêmes jusqu'à ce que vous retrainez ou affinez le modèle en utilisant des échantillons différents ou les mêmes pour remplir les Placeholders souvent à travers le dict. Par exemple:
session.run(a_graph, dict = {a_placeholder_name : sample_values})
Les Placeholders sont également passés en paramètres pour définir les modèles.
Si vous modifiez les placeholders (ajoutez, supprimez, changez la forme, etc.) d'un modèle en cours d'entraînement, vous pouvez toujours recharger le point de contrôle sans autres modifications. Mais si les variables d'un modèle enregistré sont modifiées, vous devez ajuster le point de contrôle en conséquence pour le recharger et continuer l'entraînement (toutes les variables définies dans le graphique doivent être disponibles dans le point de contrôle).
En résumé, si les valeurs proviennent des échantillons (observations que vous avez déjà), vous pouvez en toute sécurité créer un placeholder pour les contenir, tandis que si vous avez besoin qu'un paramètre soit entraîné, utilisez une Variable (autrement dit, définissez les Variables pour les valeurs que vous souhaitez obtenir automatiquement à l'aide de TF).
Dans certains modèles intéressants, comme un modèle de transfert de style, les pixels d'entrée vont être optimisés et les variables du modèle habituellement appelées sont fixes, alors nous devrions faire de l'entrée (généralement initialisée de manière aléatoire) une variable comme implémenté dans ce lien.
Pour plus d'informations, veuillez vous référer à ce document simple et illustratif.
7 votes
Intuitivement, vous voudrez des gradients par rapport aux
Variable
, mais pas auxplaceholder
(dont les valeurs doivent toujours être fournies).0 votes
Un cours comme cs231n.stanford.edu peut aider ceux qui sont confus. Je l'ai beaucoup aimé! Évidemment, il y en a d'autres.