Как я могу быстро проверить, какие переменные тензорного потока обновляются во время обучения, а какие замораживаются?

Я считаю, что во многих сценариях нам нужно заморозить некоторые слои в графе тензорного потока и сохранить обучаемость других слоев.

Есть ли способ быстро проверить, обучена ли сеть так, как мы ожидали? Например, переменные в замороженном слое фактически не обновляются во время обучения.

Я использую следующий метод, чтобы заморозить все переменные в области "ABC":

    with slim.arg_scope(inception.inceptionb_v2_arg_scope()):
        with tf.variable_scope('ABC'):
          _, end_points = getattr(inception, 'inception_v2'(..., is_training = False))
                         ......
    trainables = [v for v in tf.trainable_variables() if 'ABC/' not in v.name]
    optimizer = tf.train.AdamOptimizer().minimize(loss, var_list= trainables)

Каков предлагаемый способ быстро подтвердить, что эти переменные действительно не меняются во время тренировки?


person Aaron Spalding    schedule 03.11.2018    source источник


Ответы (1)


Вы можете просто проверить их после пары итераций:

frozen_variables = [v for v in tf.trainable_variables() if 'ABC/' in v.name]
tmp_frozen_variables_np = sess.run(frozen_variables)
# Training Code
assert np.allclose(tmp_frozen_variables_np, sess.run(frozen_variables))

Однако до тех пор, пока их нет в списке переменных оптимизатора, все будет в порядке.

person Thomas Pinetz    schedule 03.11.2018