Области переменной получают добавленный номер [дубликат]

Я использую (очень старый) проводник процессов из SysInternals (procexp.exe). Это замена / добавление стандартного диспетчера задач, вы можете приостановить процесс оттуда.

Изменить: Microsoft купила через SysInternals, url: procExp.exe

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

13
задан Engineero 29 August 2017 в 00:17
поделиться

2 ответа

"_2" в "BasicLSTMCell_2" относится к области name , в которой был создан op outpts[2]. Каждый раз, когда вы создаете новую область имен (с помощью tf.name_scope() ) или области видимости переменной (с tf.variable_scope() ), уникальный суффикс добавляется в текущую область имен, основанную на данная строка, возможно, с дополнительным суффиксом, чтобы сделать ее уникальной. Вызов rnn.rnn(...) имеет следующий псевдокод (упрощенное и использующее общедоступные методы API для ясности):

outputs = []
with tf.variable_scope("RNN"):
  for timestep, input_t in enumerate(inputs):
    if timestep > 0:
      tf.get_variable_scope().reuse_variables()
    with tf.variable_scope("BasicLSTMCell"):
      outputs.append(...)
return outputs

Если вы посмотрите на имена тензоров в outpts, вы увидите, что они следующие:

>>> print [o.name for o in outpts]
[u'RNN/BasicLSTMCell/mul_2:0',
 u'RNN/BasicLSTMCell_1/mul_2:0',
 u'RNN/BasicLSTMCell_2/mul_2:0',
 u'RNN/BasicLSTMCell_3/mul_2:0',
 u'RNN/BasicLSTMCell_4/mul_2:0']

Когда вы вводите область нового имени (путем ввода блока with tf.name_scope("..."): или with tf.variable_scope("..."): ), TensorFlow создает новое уникальное имя для области. При первом вводе области "BasicLSTMCell" TensorFlow использует это имя дословно, потому что ранее оно не использовалось (в области "RNN/"). В следующий раз TensorFlow добавит "_1" к области, чтобы сделать ее уникальной, и так далее до "RNN/BasicLSTMCell_4".

Основное различие между областями переменных и областями имен заключается в том, что область переменной также имеет набор привязок name-to- tf.Variable . Вызывая tf.get_variable_scope().reuse_variables(), мы инструктируем TensorFlow использовать повторно , а не создавать переменные для области "RNN/" (и его дочерних элементов) после timestep 0. Это гарантирует, что веса правильно распределены между несколькими RNN клетки.

7
ответ дан Engineero 15 August 2018 в 20:23
поделиться
  • 1
    Не могли бы вы указать точную строку кода, где используется tf.name_scope? Все, что я могу найти, это with tf.variable_scope(scope or type(self).__name__): # "BasicLSTMCell" в rnn_cell.py – Xiaotong 5 January 2016 в 11:16
  • 2
    Есть два места: область верхнего уровня ("RNN") ( link ) и вложенная область ("BasicLSTMCell") ( ссылка ). Обратите внимание, что вызов variable_scope() подразумевает вызов name_scope() (см. Реализацию здесь ). – mrry 5 January 2016 в 16:15
  • 3
    Я отредактировал ответ, чтобы уточнить, где используется variable_scope(). – mrry 5 January 2016 в 16:15
  • 4
    Thx, я более или менее понимаю, что произошло. Но я думаю, что это также связано с тем, как вы создаете переменные. Кажется, tf.get_variables и tf.Variable имеют разные способы генерации имен переменных. В то время как tf.get_variables создает новый name_scope, он все еще называют переменную с именем переменной_scope, так или иначе ... – Xiaotong 5 January 2016 в 18:43
  • 5
    Должен ли tf.variable_scope("BasicLSTMCell", reuse=True) быть reuse=None, чтобы он наследовал внешнее использование области и мог создавать переменные в своем первом запуске? – user728291 5 January 2016 в 23:35

Ответ выше как-то ошибочный.

Позвольте мне ответить, почему у вас есть два разных имени области, хотя похоже, что вы определили две идентичные функции: creating и creating_mod.

Это просто потому, что вы использовали tf.Variable(0.0, name=s) для создания переменной в функции creating_mod.

ALWAYS используют tf.get_variable, если вы хотите, чтобы ваша переменная была распознана по области!

За дополнительной информацией обратитесь к этой проблеме .

Спасибо!

7
ответ дан Sheng Zhang 15 August 2018 в 20:23
поделиться
  • 1
    Я также столкнулся с этой проблемой. Но, даже всегда используя tf.get_variable, я также получаю & quot; _1 & quot; добавление в моей переменной области – mhz 19 November 2017 в 19:15
  • 2
    @mhz Я получил & quot; _1 & quot; дополнение тоже. В моем случае это происходит из поезда и тестовой модели – Exit Ekkasit Pinyoanuntapong 18 April 2018 в 04:17
Другие вопросы по тегам:

Похожие вопросы: