2016-06-05 4 views
0

Я работаю над использованием дешифрования на нескольких GPU на моей работе, но, похоже, у него есть ошибки: слишком большие потери и не обновлены.tf.get_variable_scope(). Reuse_variables() возвращает None

Я думаю, что проблемы происходят из кода ниже:

# Calculate the gradients for each model tower. 
tower_grads = [] 
for i in xrange(num_gpus): 
    with tf.device('/gpu:%d' % i): 
    with tf.name_scope('%s_%d' % (TOWER_NAME, i)) as scope: 
     loss = tower_loss(scope) 

     ####### HERE ####### 
     # Reuse variables for the next tower. 
     tf.get_variable_scope().reuse_variables() 
     #################### 

     grads = opt.compute_gradients(loss) 
     tower_grads.append(grads) 

print(tf.get_variable_scope().reuse_variables()) печатает None.

В чем проблема, на ваш взгляд?

Я установил переменную_scope только с CONV1, CONV2, FC3, FC4 в INFERENCE, как в cifar10_multi_gpu_train.py.

ответ

2

В коде отсутствует проблема, по крайней мере, не с tf.get_variable_scope().reuse_variables().

Функция reuse_variables() всегда будет производить None. Его единственная функция - установить атрибут reuse текущей области на True.

Я думаю, вы ошибаетесь с функцией, которая возвращает все переменные в текущей области.

+0

OK. Это хорошо. Как я могу проверить повторно используемые переменные? –

0

Обратитесь к source code, как вы можете видеть, он не имеет возврата. Таким образом, вы можете получить и распечатать, просто None. Вот соответствующий фрагмент:

def reuse_variables(self): 
    """Reuse variables in this scope.""" 
    self._reuse = True 

Фактически, он просто включает _reuse.