Tensorflow 0.8 Проблемы импорта и экспорта выходных тензоров

Я использую Tensorflow 0.8 с Python 3. Я пытаюсь обучить нейронную сеть, и цель состоит в том, чтобы автоматически экспортировать/импортировать состояния сети каждые 50 итераций. Проблема в том, что когда я экспортирую выходной тензор на первой итерации, имя выходного тензора — ['Neg:0', 'Slice:0'], но когда я экспортирую выходной тензор на второй итерации, имя выходного тензора изменяется на ['import/Neg:0', 'import/Slice:0'], и импорт этого выходного тензора не работает. потом:

ValueError: Specified colocation to an op that does not exist during import: import/Variable in import/Variable/read

Интересно, есть ли у кого идеи по этой проблеме. Спасибо!!!


person Ruofan Kong    schedule 26.04.2016    source источник
comment
Для уточнения, меняется ли структура вашего графика между итерациями, или вы просто хотите импортировать другой набор весов?   -  person mrry    schedule 06.05.2016
comment
@mrry На самом деле, я просто хочу экспортировать/импортировать другой набор весов без изменения структуры графика :) Я думаю, что здесь может быть ошибка для импорта/экспорта в Tensorflow 0.8. (и я почти уверен, что у моего кода нет проблем, так как он очень хорошо работает для Tensorflow 0.6)   -  person Ruofan Kong    schedule 06.05.2016
comment
Это похоже на ошибку в импортере — вы передаете переменные в input_map в tf.import_graph_def()? Однако я думаю, что вашу основную проблему можно решить, просто используя tf.train.Saver для сохранения и восстановления с разных контрольных точек.   -  person mrry    schedule 06.05.2016
comment
@mrry Ну, я определенно использовал saver в своем коде. Я думаю, что проблема здесь заключается в проблеме с именами переменных, которая должна быть решена в 0.8. И 0.8 не может найти имя переменной во внутреннем встроенном словаре.   -  person Ruofan Kong    schedule 06.05.2016
comment
Мне все еще не ясно, как вы используете tf.import_graph_def(). Возможно, пришло время перенести это в проблему GitHub.   -  person mrry    schedule 06.05.2016


Ответы (1)


Вот как работает tf.import_graph_def.

Если вам не нужен префикс, просто установите для параметра name пустую строку, как показано в следующем примере.

# import the model into the current graph
with tf.Graph().as_default() as graph:

    const_graph_def = tf.GraphDef()
    with open(TRAINED_MODEL_FILENAME, 'rb') as saved_graph:
      const_graph_def.ParseFromString(saved_graph.read())
      # replace current graph with the saved graph def (and content)
      # name="" is important because otherwise (with name=None)
      # the graph definitions will be prefixed with import.
      # eg: the defined operation FC2/unscaled_logits:0
      # will be import/FC2/unscaled_logits:0
      tf.import_graph_def(const_graph_def, name="")
    [...]
person nessuno    schedule 09.05.2016
comment
Спасибо за Ваш ответ! По сути, я использовал ту же функцию импорта, которую вы показали здесь. И моя цель — автоматически экспортировать/импортировать состояния сети каждые 50 итераций во время поезда. Как я уже упоминал в своем вопросе, в первый раз export и import он работает хорошо, но во второй раз для импорта сети возникла проблема: некоторые операции не найдены... Например, ValueError: Specified colocation to an op that does not exist during import: Variable_10 in Variable/read_1. Я попробовал точно такой же код, используя tf 0.6, и все работает очень хорошо. Я думаю, что это сломано в 0.8 - person Ruofan Kong; 10.05.2016
comment
поднять ValueError('tf.import_graph_def() требует непустого name ' ValueError: tf.import_graph_def() требует непустого name, если используется input_map. - person pratsJ; 02.02.2017