Я не верю, что это возможно. Вы просите изменить сам график вычислений, что не разрешено в тензорном потоке. Вместо того, чтобы объяснять это самому, я нахожу принятый ответ в этом сообщении особенно ясным в объяснении этого пункта Можно ли изменить существующий граф вычислений TensorFlow?
Теперь, сказав это, я думаю, что есть довольно простой/чистый способ выполнить то, что вы ищете. По сути, вы хотите сбросить график и перестроить часть Dataset
. Конечно, вы хотите повторно использовать model
часть кода. Таким образом, просто поместите эту модель в класс или функцию, чтобы разрешить повторное использование. Простой пример, построенный на вашем коде:
# the part of the graph you want to reuse
def get_model(next_element):
variable = tf.Variable(3,dtype=tf.int64)
return variable*next_element
# the first graph you want to build
tf.reset_default_graph()
# the part of the graph you don't want to reuse
dataset = tf.data.Dataset.range(3)
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
# reusable part
model = get_model(next_element)
#pretend like this is me training my model, or something
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
try:
while True:
print(sess.run(model)) # (0,3,6)
except:
pass
# now the second graph
tf.reset_default_graph()
# the part of the graph you don't want to reuse
dataset = tf.data.Dataset.range(2)
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
# reusable part
model = get_model(next_element)
### HOW TO DO THIS THING?
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
try:
while True:
print(sess.run(model)) # (0,3)... hopefully
except:
pass
Последнее примечание: здесь и там вы также увидите ссылки на tf.contrib.graph_editor
документы здесь. Они специально говорят, что вы не можете добиться именно того, что хотите, с помощью graph_editor (см. в этой ссылке: «Вот пример того, что вы не можете сделать», но вы можете довольно близко подойти). Тем не менее, это не очень хорошая практика; у них была веская причина сделать график только добавленным, и я думаю, что описанный выше метод, который я предлагаю, является более чистым способом выполнить то, что вы ищете.
person
muskrat
schedule
09.01.2018