Comment compter le nombre total de paramètres entraînables dans un modèle tensorflow?
Existe-t-il un appel de fonction ou un autre moyen de compter le nombre total de paramètres dans un graphique tensorflow?
Par Paramètres, je veux dire: un vecteur n dim de variables entraînables A N Paramètres, une matrice NxM
a des paramètres N*M
, etc. Donc, essentiellement, je voudrais résumer le produit des dimensions de forme de toutes les variables entraînables dans une session tensorflow.
6 réponses
Boucle sur la forme de chaque variable dans tf.trainable_variables()
.
total_parameters = 0
for variable in tf.trainable_variables():
# shape is an array of tf.Dimension
shape = variable.get_shape()
print(shape)
print(len(shape))
variable_parameters = 1
for dim in shape:
print(dim)
variable_parameters *= dim.value
print(variable_parameters)
total_parameters += variable_parameters
print(total_parameters)
J'ai une version encore plus courte, une solution de ligne en utilisant numpy:
np.sum([np.prod(v.get_shape().as_list()) for v in tf.trainable_variables()])
Je ne sais pas si la réponse donnée fonctionne réellement (j'ai trouvé que vous devez convertir l'objet dim en int pour que cela fonctionne). Voici celui qui fonctionne et vous pouvez simplement copier coller les fonctions et les appeler (ajouté quelques commentaires aussi):
def count_number_trainable_params():
'''
Counts the number of trainable variables.
'''
tot_nb_params = 0
for trainable_variable in tf.trainable_variables():
shape = trainable_variable.get_shape() # e.g [D,F] or [W,H,C]
current_nb_params = get_nb_params_shape(shape)
tot_nb_params = tot_nb_params + current_nb_params
return tot_nb_params
def get_nb_params_shape(shape):
'''
Computes the total number of params for a given shap.
Works for any number of shapes etc [D,F] or [W,H,C] computes D*F and W*H*C.
'''
nb_params = 1
for dim in shape:
nb_params = nb_params*int(dim)
return nb_params
Les deux réponses existantes sont bonnes si vous cherchez à calculer le nombre de paramètres vous-même. Si votre question allait plus dans le sens de "existe-t-il un moyen facile de profiler mes modèles TensorFlow?", Je recommande fortement de regarder dans tfprof. Il profile votre modèle, y compris le calcul du nombre de paramètres.
Je vais ajouter mon équivalent mais une implémentation plus courte:
def count_params():
"print number of trainable variables"
size = lambda v: reduce(lambda x, y: x*y, v.get_shape().as_list())
n = sum(size(v) for v in tf.trainable_variables())
print "Model size: %dK" % (n/1000,)
Si on préfère éviter numpy (il peut être laissé pour de nombreux projets), alors:
all_trainable_vars = tf.reduce_sum([tf.reduce_prod(v.shape) for v in tf.trainable_variables()])
Ceci est une traduction TF de la réponse précédente de Julius Kunze.
Comme toute opération TF, elle nécessite une session pour évaluer:
print(sess.run(all_trainable_vars))