W moim problemie potrzebuję uruchomić GD z 1 przykładem z danych na każdym etapie szkolenia. Znany jest problem związany z tym, że session.run() ma narzut i dlatego jest zbyt długi, aby modelować. Próbując uniknąć obciążenia, próbowałem użyć while_loop i modelu pociągu na wszystkich danych za pomocą jednego wywołania run(). Ale to podejście nie działa, a train_op nie wykonuje nawet tych. Poniżej prosty przykład tego, co robię:Tensorflow while_loop for training
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()
Co robię źle? Czy istnieje inne rozwiązanie tego problemu ze zbyt wysokim kosztem?
Dzięki!
Czy powinienem zdefiniować ** w ** i ** b ** na zewnątrz? Próbuję czegoś takiego (a teraz próbuję dokładnie tego, co oferujesz), ale dostałem błąd * Wszystkie dane wejściowe do węzła podczas/GradientDescent/update_while/w/ApplyGradientDescent muszą pochodzić z tej samej ramki. * –
Dodałem pełny program który uruchomiłem z TensorFlow 0.10rc0. (Być może będziesz musiał dokonać aktualizacji, były różne błędy w implementacji 'tf.while_loop()', które zostały naprawione w ciągu ostatnich kilku wydań – mrry
Tak, uruchomiłem go na 0.9, dziękuję, po aktualizacji działa! jeszcze jedno pytanie dotyczące twojego rozwiązania - wygląda na to, że nowy optymalizator tworzy każdy krok i co jeśli chcę użyć optymalizatora Ftrl (który ma kilka zaktualizowanych gniazd)? Czy będzie działał jak jeden optymalizator podczas procesu szkolenia? –