TensorFlow apply_gradients de forma remota
Estoy tratando de dividir la función de minimizar en dos máquinas. En una máquina, llamo "compute_gradients", en otra llamo "apply_gradients" con gradientes que se enviaron a través de la red. El problema es que llamar a apply_gradients (...). Run (feed_dict) no parece funcionar sin importar lo que haga. He intentado insertar marcadores de posición en lugar de los gradientes tensoriales para apply_gradients,
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)
luego, cuando recibo los gradientes que llamo
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)
Sin embargo, cuando hago esto, me sale
ValueError: establecer un elemento de matriz con una secuencia.
Esto es solo lo último que he probado, también he probado la misma solución sin marcadores de posición, además de esperar para crear la operación apply_gradients hasta que reciba los degradados, lo que da como resultado errores de gráficos no coincidentes.
¿Alguna ayuda en qué dirección debo ir con esto?