Подтвердить что ты не робот

Как подсчитать общее количество обучаемых параметров в модели тензорного потока?

Есть ли вызов функции или другой способ подсчета общего количества параметров в модели тензорного потока?

По параметрам я имею в виду: N-мерный вектор обучаемых переменных имеет N параметров, NxM матрица имеет N*M параметры и т.д. Поэтому, по существу, я хотел бы суммировать произведение размерностей формы всех обучаемых переменных в сеансе тензорного потока,

4b9b3361

Ответ 1

tf.trainable_variables() форму каждой переменной в 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)

Обновление: я написал статью, чтобы прояснить динамические/статические фигуры в Tensorflow из-за этого ответа: https://pgaleone.eu/tensorflow/2018/07/28/understanding-tensorflow-tensors-shape-static-dynamic/

Ответ 2

У меня есть еще более короткая версия, однострочное решение с использованием numpy:

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

Ответ 3

Не уверен, что данный ответ действительно выполняется (я обнаружил, что вам нужно преобразовать тусклый объект в 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 

Ответ 4

Два существующих ответа хороши, если вы сами изучаете количество параметров. Если ваш вопрос был в большей степени по строкам "есть ли простой способ профилировать мои модели TensorFlow?", Я бы настоятельно рекомендовал изучить tfprof. Он профилирует вашу модель, включая вычисление количества параметров.

Ответ 5

Я поставлю эквивалентную, но более короткую реализацию:

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

Ответ 6

Если вы предпочитаете избегать 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))