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

Получите значение некоторых весов в модели, обученной TensorFlow

Я обучил модель ConvNet с TensorFlow, и я хочу получить определенный вес в слое. Например, в torch7 я бы просто получил доступ к model.modules[2].weights. чтобы получить вес слоя 2. Как бы я сделал то же самое в TensorFlow?

4b9b3361

Ответ 1

В TensorFlow обучаемые веса представлены объектами tf.Variable. Если вы создали tf.Variable — вы можете получить его как массив NumPy, вызывая sess.run(v) (где sess - tf.Session).

Если у вас нет указателя на tf.Variable, вы можете получить список обучаемых переменных на текущем графике, вызвав tf.trainable_variables(). Эта функция возвращает список всех обучаемых объектов tf.Variable в текущем графе, и вы можете выбрать тот, который вы хотите, сопоставляя свойство v.name. Например:

# Desired variable is called "tower_2/filter:0".
var = [v for v in tf.trainable_variables() if v.name == "tower_2/filter:0"][0]

Ответ 2

Поэтому, если вы выполните этот код шаг за шагом, вы сначала получите список используемых/обучаемых переменных. Затем вы можете отсортировать их в списке, в котором вы сортируете весовые матрицы/списки по именам переменных, например, как вам удалось справиться с этой информацией.

vars = tf.trainable_variables()
print(vars) #some infos about variables...
vars_vals = sess.run(vars)
for var, val in zip(vars, vars_vals):
    print("var: {}, value: {}".format(var.name, val)) #...or sort it in a list....