Sensorflow while_loop für das Training

In meinem Problem muss ich GD mit 1 Beispiel aus Daten zu jedem Trainingsschritt ausführen. Es ist ein bekanntes Problem, dass session.run () Overhead hat und daher zu lang ist, um model zu trainieren. Um Overhead zu vermeiden, habe ich versucht, while_loop und train model für alle Daten mit einem run () -Aufruf zu verwenden. Aber es funktioniert nicht und train_op führt auch nicht aus. Nachfolgend ein einfaches Beispiel, was ich mache:

data = [k*1. for k in range(10)]
tf.reset_default_graph()

i = tf.Variable(0, name='loop_i')
q_x = tf.FIFOQueue(100000, tf.float32)
q_y = tf.FIFOQueue(100000, tf.float32)

x = q_x.dequeue()
y = q_y.dequeue()
w = tf.Variable(0.)
b = tf.Variable(0.)
loss = (tf.add(tf.mul(x, w), b) - y)**2

gs = tf.Variable(0)

train_op = tf.train.GradientDescentOptimizer(0.05).minimize(loss, global_step=gs)

s = tf.Session()
s.run(tf.initialize_all_variables())

def cond(i):
    return i < 10

def body(i):
    return tf.tuple([tf.add(i, 1)], control_inputs=[train_op])


loop = tf.while_loop(cond, body, [i])

for _ in range(1):
    s.run(q_x.enqueue_many((data, )))
    s.run(q_y.enqueue_many((data, )))

s.run(loop)
s.close()

Was mache ich falsch? Oder gibt es eine andere Lösung für dieses Problem mit zu teurem Overhead?

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage