Мне нужно использовать вывод из графика в качестве входного сигнала для другого для проекта глубокого обучения, а затем оптимизировать все переменные двух графиков. Ввод каждого графика является заполнителем.Оптимизируйте граф, построенный двумя импортированными графами Tensorflow
Моей проблема очень похожа на рассмотренный здесь: Tensorflow: How to replace a node in a calculation graph?
К сожалению, этот вопрос не был решен из-за ошибки, которые я получаю, а также указали на то время. Я пост мой случай
Это пример программы, которая на самом деле сделать тривиальные вычисления
with tf.Graph().as_default() as g_1:
input_1 = tf.placeholder(tf.float32, shape=[3,3], name="input")
weight1 = tf.Variable(tf.truncated_normal([3, 3], stddev=0.1), name="weight")
y = tf.matmul(input_1,weight1)
# NOTE: using identity to get a known name for the output tensor.
output1 = tf.identity(y, name="output")
gdef_1 = g_1.as_graph_def()
with tf.Graph().as_default() as g_2: # NOTE: g_2 not g_1
input_2 = tf.placeholder(tf.float32, shape=[3,3], name="input")
weight2 = tf.Variable(tf.truncated_normal([3, 3], stddev=0.1), name="weight")
z = tf.matmul(input_2, weight2)
output2 = tf.identity(z, name="output")
gdef_2 = g_2.as_graph_def()
Затем импортировать два графика в другой графике:
with tf.Graph().as_default() as g_combined:
x = tf.placeholder(tf.float32, shape=[3,3], name="input_matrix")
# Import gdef_1, which performs f(x).
# "input:0" and "output:0" are the names of tensors in gdef_1.
y, = tf.import_graph_def(gdef_1, input_map={"input:0": x},
return_elements=["output:0"])
# Import gdef_2, which performs g(y)
z, = tf.import_graph_def(gdef_2, input_map={"input:0": y},
return_elements=["output:0"])
cost = tf.reduce_sum(tf.square(z-x))
variables = [op.outputs[0] for op in tf.get_default_graph().get_operations() if op.type == "Variable"]
print (variables)
optimizer = tf.train.AdamOptimizer(0.01).minimize(cost,var_list = variables)
Это решение, предложенное в ранее связанный вопрос, но он дает следующую ошибку:
TypeError: Argument is not a tf.Variable: Tensor("import/weight:0", dtype=float32_ref)
Переменная variables
содержит:
[<tf.Tensor 'import/weight:0' shape=<unknown> dtype=float32_ref>, <tf.Tensor 'import_1/weight:0' shape=<unknown> dtype=float32_ref>]
Кто-нибудь знает, как заставить его работать? Или как оптимизировать всю структуру, учитывая, что мне нужен промежуточный результат для подачи заполнителя?
Большое спасибо
Если вы используете тот же самый код, предложенный в ранее связанном вопросе, можете ли вы воспроизвести результат? Если да, то вы можете сравнить свою версию с рабочей версией, чтобы определить причину ошибки? –
Я сказал, что получаю тот же результат, что и в предыдущей ссылке, версия которой не работает (точно так же, как моя). – Cramer