如何使用Tensorflow r-1.0将一个模型的输出作为另一个模型的输入?

时间:2017-05-04 17:42:03

标签: python tensorflow

我定义了两类模型,xy

class x():
    def __init__(self, x_inp1, x_inp2):
        # do sth...

    def step(self, session, encoder_inputs):
        input_feed = {}
        for l in range(encoder_size):
             input_feed[self.encoder_inputs[l].name] = encoder_inputs[l]
        ...
        output_feed = [x_output]
        return session.run(x_output)

class y():
    def __init__(self, y_inp1, y_inp2):
        # do sth...

    def step(self, encoder_inputs):
        input_feed = {}
        for l in range(encoder_size):
             input_feed[self.encoder_inputs[l].name] = encoder_inputs[l]
        ...

它们具有非常相似的功能。然后我定义了另一个类来对它们进行分组。

class gp():
    def __init__(self, x_inp1, x_inp2, y_inp1, y_inp2):
        with tf.variable_scope('x'):
              self.x_model = x(x_inp1, x_inp2)
        with tf.variable_scope('y'):
              self.y_model = y(y_inp1, y_inp2)
    def step(self, session, encoder_inputs):
        x_output = self.x_model.step(session, encoder_inputs)
        y_output = self.y_model.step(session, x_output)
        ...

请注意,y_modelx_model的输出作为输入。我在gp()函数中运行main

with tf.Session() as sess:
     gp_m = gp(x_inp1, x_inp2, y_inp1, y_inp2)
     gp_m.step(sess, x_inp1, x_inp2, y_inp1, y_inp2)

在运行x_output = self.x_model.step(encoder_inputs)并开始y_output = self.y_model.step(x_output)之后,我遇到了这样的错误:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'x/encoder0' with dtype int32
 [[Node: x/encoder0 = Placeholder[dtype=DT_INT32, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

请注意,此错误指向x_model,即使其步骤功能已完成。我想知道如何使用x_model的输出作为y_model的输入而没有任何错误?提前谢谢!

1 个答案:

答案 0 :(得分:0)

您应该将session.run的呼叫推迟到step个功能之外。这里的问题是尝试运行Y触发X,因为它们在图中连接。

相反,将程序的图形构建和图形运行阶段完全分开可能会更好,这样您就可以知道何时提供占位符。