TensorFlow apply_gradients remote
Ich versuche, die Minimierungsfunktion auf zwei Maschinen aufzuteilen. Auf einem Rechner rufe ich "compute_gradients" auf, auf einem anderen "apply_gradients" mit Verläufen, die über das Netzwerk gesendet wurden. Das Problem ist, dass das Aufrufen von apply_gradients (...). Run (feed_dict) nicht funktioniert, egal was ich tue. Ich habe versucht, Platzhalter anstelle der Tensorverläufe für apply_gradients einzufügen.
variables = [W_conv1, b_conv1, W_conv2, b_conv2, W_fc1, b_fc1, W_fc2, b_fc2]
loss = -tf.reduce_sum(y_ * tf.log(y_conv))
optimizer = tf.train.AdamOptimizer(1e-4)
correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
compute_gradients = optimizer.compute_gradients(loss, variables)
placeholder_gradients = []
for grad_var in compute_gradients:
placeholder_gradients.append((tf.placeholder('float', shape=grad_var[1].get_shape()) ,grad_var[1]))
apply_gradients = optimizer.apply_gradients(placeholder_gradients)
dann später, wenn ich die Farbverläufe erhalte, die ich anrufe
feed_dict = {}
for i, grad_var in enumerate(compute_gradients):
feed_dict[placeholder_gradients[i][0]] = tf.convert_to_tensor(gradients[i])
apply_gradients.run(feed_dict=feed_dict)
Allerdings, wenn ich das tue, bekomme ich
ValueError: Festlegen eines Array-Elements mit einer Sequenz.
Dies ist nur das Neueste, was ich ausprobiert habe. Ich habe dieselbe Lösung auch ohne Platzhalter ausprobiert und darauf gewartet, die apply_gradients-Operation zu erstellen, bis ich die Verläufe erhalte, was zu nicht übereinstimmenden Diagrammfehlern führt.
Hilfe, in welche Richtung ich damit gehen soll?