我想分割兩臺機器的最小化功能。在一臺機器上,我打電話爲「compute_gradients」,在另一臺機器上我通過網絡發送帶有漸變的「apply_gradients」。問題是調用apply_gradients(...)。run(feed_dict)似乎不管用我做什麼。我試圖取代張量梯度的apply_gradients的插入佔位符,TensorFlow遠程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)
後來當我收到的梯度我打電話
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)
然而,當我這樣做,我得到
ValueError:用序列設置數組元素。
這只是我嘗試過的最新事情,我也嘗試過沒有佔位符的相同解決方案,並且等待創建apply_gradients操作,直到我收到梯度,這會導致不匹配的圖形錯誤。
任何幫助我應該去哪個方向?
請注意,使用佔位符(代表'apply_gradients'中的漸變張量)是不必要的,因爲您可以爲任何變量(張量)提供numpy值。您可以使用'compute_gradients'返回的原始梯度張量。 – Falcon