我定义了两类模型,x
和y
。
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_model
将x_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
的输入而没有任何错误?提前谢谢!
答案 0 :(得分:0)
您应该将session.run
的呼叫推迟到step
个功能之外。这里的问题是尝试运行Y触发X,因为它们在图中连接。
相反,将程序的图形构建和图形运行阶段完全分开可能会更好,这样您就可以知道何时提供占位符。