Как подсчитать общее количество обучаемых параметров в модели 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))