web-dev-qa-db-fra.com

Obtenez la valeur de certains poids dans un modèle formé par TensorFlow

J'ai formé un modèle ConvNet avec TensorFlow et je souhaite obtenir un poids particulier dans la couche. Par exemple, dans torch7, je voudrais simplement accéder à model.modules[2].weights. pour obtenir les poids de la couche 2. Comment ferais-je la même chose dans TensorFlow?

58
S.AMEEN

Dans TensorFlow, les poids formés sont représentés par tf.Variable objets. Si vous avez créé un _tf.Variable_— par ex. appelé v— vous-même, vous pouvez obtenir sa valeur sous forme de tableau NumPy en appelant sess.run(v) (où sess est un tf.Session ) .

Si vous ne disposez pas actuellement de pointeur sur le _tf.Variable_, vous pouvez obtenir une liste des variables pouvant être entraînées dans le graphique en cours en appelant tf.trainable_variables() . Cette fonction renvoie la liste de tous les objets __ entraînables _tf.Variable_ du graphe en cours. Vous pouvez sélectionner celui que vous souhaitez en faisant correspondre la propriété _v.name_. Par exemple:

_# Desired variable is called "tower_2/filter:0".
var = [v for v in tf.trainable_variables() if v.name == "tower_2/filter:0"][0]
_
88
mrry

Donc, si vous procédez pas à pas, vous obtiendrez d’abord une liste de variables utilisées/pouvant être entraînées. Ensuite, vous pouvez les trier dans une liste dans laquelle vous triez les matrices/listes de pondération en noms de variables, par exemple, comment vous avez été en mesure de traiter ces informations.

vars = tf.trainable_variables()
print(vars) #some infos about variables...
vars_vals = sess.run(vars)
for var, val in Zip(vars, vars_vals):
    print("var: {}, value: {}".format(var.name, val)) #...or sort it in a list....
4
saggzz