Как подсчитать общее количество обучаемых параметров в модели tensorflow?
есть функция позвонить или другим способом, чтобы подсчитать общее количество параметров в tensorflow график?
по параметрам я имею в виду: N Дим-вектор обучаемых переменных имеет N параметров, a NxM
матрица N*M
параметры и т. д. Поэтому, по сути, я хотел бы суммировать произведение размеров формы всех обучаемых переменных в сеансе тензорного потока.
6 ответов
цикл над формой каждой переменной в 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)
У меня есть еще более короткая версия, одно линейное решение с использованием numpy:
np.sum([np.prod(v.get_shape().as_list()) for v in tf.trainable_variables()])
Не уверен, что данный ответ действительно работает (я обнаружил, что вам нужно преобразовать объект dim в int для его работы). Вот один, который работает, и вы можете просто скопировать вставить функции и вызвать их (добавлено несколько комментариев):
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
два существующих ответа хороши, если вы хотите самостоятельно вычислить количество параметров. Если ваш вопрос был больше похож на " есть ли простой способ профилировать мои модели TensorFlow?", Я настоятельно рекомендую изучить tfprof. Он профилирует вашу модель, включая расчет количества параметров.
Я добавлю свою эквивалентную, но более короткую реализацию:
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,)
Если вы предпочитаете избегать numpy (его можно оставить для многих проектов), то:
all_trainable_vars = tf.reduce_sum([tf.reduce_prod(v.shape) for v in tf.trainable_variables()])
Это перевод TF предыдущего ответа Юлиуса Кунце.
Как любая операция TF, она требует запуска сеанса для оценки:
print(sess.run(all_trainable_vars))