76 votes

Comment compter le nombre total de paramètres pouvant être formés 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 modèle tensorflow?

Mesurées Je veux dire: un vecteur N faible de variables trainable a des paramètres N, un NxM matrice a N*M paramètres, etc. Donc , essentiellement , je voudrais résumer le produit de la forme dimensions de toutes les variables pouvant être entraînées dans une session tensorflow.

94voto

nessuno Points 12786

Boucle sur la forme de chaque variable en 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)
 

50voto

Michael Gygli Points 670

J'ai une version encore plus courte, une solution à une ligne utilisant numpy:

 np.sum([np.prod(v.get_shape().as_list()) for v in tf.trainable_variables()])
 

9voto

Pinocchio Points 729

Je ne suis pas sûr que la réponse donnée fonctionne réellement (j'ai découvert qu'il fallait convertir l'objet dim en int pour qu'il fonctionne). En voici une 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 
 

7voto

Gabriel Parent Points 311

Les deux réponses existantes sont utiles si vous envisagez de calculer vous-même le nombre de paramètres. Si votre question portait plutôt sur " Existe- t-il un moyen simple de profiler mes modèles TensorFlow?", Je vous recommande vivement de vous pencher sur tfprof . Il profil votre modèle, y compris le calcul du nombre de paramètres.

3voto

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,)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X