我试图了解如何在TensorFlow中使用while循环。我想实现一个循环,其中神经网络的输入是循环的上一次迭代中神经网络的输出(预测)。
现在,我的神经网络(while循环的前馈部分)实际上是在我的代码的其他地方定义的,如下所示:
Sheet1 - RAW
RAW Number of foos | RAW Number of Bars |
[empty] | [empty] |
Sheet2 - FORMATTED
Number of foos | Number of Bars | All items
='Sheet1 - RAW'!A2 | ='Sheet1 - RAW'!B2 | =A2 + B2
然后我的while循环定义为:
Sheet1 - RAW
RAW Number of foos | RAW Number of Bars |
1 | 3 |
Sheet2 - FORMATTED
Number of foos | Number of Bars | All items
='Sheet1 - RAW'!A2 | ='Sheet1 - RAW'!B2 | =A2 + B2
在这里,循环体是:
input_placeholder = tf.placeholder(dtype=np.float32, shape=[None, 2])
hidden_layer = tf.layers.dense(inputs=input_placeholder, units=10, activation=tf.nn.relu)
prediction_op = tf.layers.dense(inputs=hidden_layer, units=2)
要运行while循环,请尝试:
num_steps = 10
step_num = 0
init_input = np.array([[0.1, 0.2]], dtype=np.float32)
condition = tf.less(step_num, num_steps)
_, final_prediction_op = tf.while_loop(condition, loop_body, [step_num, init_input])
但是我的问题是,我应该在def loop_body(step_num, next_input):
# What do I do here?
prediction = prediction_op
step_num = tf.add(step_num, 1)
return step_num, prediction
行中写些什么,以便将sess = tf.Session()
sess.run(tf.initialize_all_variables())
final_prediction = sess.run(final_prediction_op)
作为前馈网络的输入来提供?
我可以在循环中再次写出网络,但是问题是我实际上在其他地方定义了网络,并且不想将相同的代码复制两次。我希望能够使用现有的网络代码(我的实际网络要复杂得多,这只是一个最小的示例)。但是此网络需要# What do I do here?
填充数据,并且占位符是不可变的,因此在while循环期间无法将其分配给它。
关于如何解决此问题的任何想法?谢谢!