2015-11-11 3 views

ответ

27

Параметр name необязателен (вы можете создавать переменные и константы с или без него), и переменная, которую вы используете в своей программе, не зависит от нее. Имена могут быть полезны в нескольких местах:

Если вы хотите сохранить или восстановить переменные (после вычисления вы можете выполнить save them to a binary file). От docs:

By default, it uses the value of the Variable.name property for each variable

matrix_1 = tf.Variable([[1, 2], [2, 3]], name="v1") 
matrix_2 = tf.Variable([[3, 4], [5, 6]], name="v2") 
init = tf.initialize_all_variables() 

saver = tf.train.Saver() 

sess = tf.Session() 
sess.run(init) 
save_path = saver.save(sess, "/model.ckpt") 
sess.close() 

Тем не менее у вас есть переменные matrix_1, matrix_2 они являются экономит v1, v2 в файле.

Также имена используются в TensorBoard, чтобы красиво отображать названия краев. Вы можете даже group them by using the same scope:

import tensorflow as tf 

with tf.name_scope('hidden') as scope: 
    a = tf.constant(5, name='alpha') 
    W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0), name='weights') 
    b = tf.Variable(tf.zeros([1]), name='biases') 
7

Вы можете представить себе пространство имен Python и TensorFlow пространство имен как два параллельных вселенных. Имена в пространстве TensorFlow фактически являются «реальными» атрибутами, принадлежащими к любым переменным TensorFlow, тогда как имена в пространстве Python являются лишь временными указателями, указывающими на переменные TensorFlow во время этого запуска вашего сценария. Именно поэтому при сохранении и восстановлении переменных используются только имена TensorFlow, поскольку пространство имен Python больше не существует после завершения сценария, но пространство имен Tensorflow все еще присутствует в ваших сохраненных файлах.

0

Другой вариант использования может быть:

рассмотрим следующий код и его выход

def f(): 
a = tf.Variable(np.random.normal(), dtype = tf.float32, name = 'test123') 

def run123(): 
    f() 
    init = tf.global_variables_initializer() 
    with tf.Session() as sess123: 
     sess123.run(init) 
     print(sess123.run(fetches = ['test123:0'])) 
     print(sess123.run(fetches = [a])) 

run123() 

выход:

[0,10108799]

NameError Traceback (самый последний вызов последнего) in() 10 print (sess123.run (fetches = [a])) ---> 12 run123()

в run123() 8 sess123.run (INIT) 9 печати (sess123.run (извлекает = [ 'test123: 0'])) ---> 10 печати (sess123.run (извлекает = [а])) 12 run123()

NameError: имя 'а' не определен

'A' является, как определено в объеме F(), недоступный вне его области видимости, т.е. в run123(), но граф по умолчанию должен ссылаться на них с чем-то, так что по умолчанию можно ссылаться на график по умолчанию по различным областям, а именно, когда его мне 'пригодится

Смежные вопросы