tutorial programming programing playground nielsen neural networks network machine learning and neural-network tensorflow

neural-network - programing - programming a neural network



¿Cómo contar el número total de parámetros entrenables en un modelo de tensorflow? (7)

Lanzaré mi implementación equivalente pero más corta:

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

¿Hay una llamada a la función u otra forma de contar el número total de parámetros en un modelo de tensorflow?

Por parámetros quiero decir: un vector N dim de variables entrenables tiene N parámetros, una matriz NxM tiene parámetros N*M , etc. Así que esencialmente me gustaría sumar el producto de las dimensiones de forma de todas las variables entrenables en una sesión de tensorflow .


Las dos respuestas existentes son buenas si está buscando calcular la cantidad de parámetros usted mismo. Si su pregunta era más tfprof "¿hay una manera fácil de perfilar mis modelos TensorFlow?", Recomendaría encarecidamente buscar en tfprof . Perfila su modelo, incluido el cálculo de la cantidad de parámetros.


No estoy seguro de si la respuesta dada realmente se ejecuta (descubrí que necesita convertir el objeto tenue en un int para que funcione). Aquí hay uno que funciona y puede copiar y pegar las funciones y llamarlas (también se agregaron algunos comentarios):

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



Si uno prefiere evitar numpy (puede dejarse para muchos proyectos), entonces:

all_trainable_vars = tf.reduce_sum([tf.reduce_prod(v.shape) for v in tf.trainable_variables()])

Esta es una traducción TF de la respuesta anterior de Julius Kunze.

Como cualquier operación de TF, requiere una sesión para evaluar:

print(sess.run(all_trainable_vars))


Tengo una versión aún más corta, una solución de línea usando numpy:

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


tf.trainable_variables() la forma de cada 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)

Actualización: escribí un artículo para aclarar las formas dinámicas / estáticas en Tensorflow debido a esta respuesta: https://pgaleone.eu/tensorflow/2018/07/28/understanding-tensorflow-tensors-shape-static-dynamic/