2016-01-20 77 views
3

我想分割兩臺機器的最小化功能。在一臺機器上,我打電話爲「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操作,直到我收到梯度,這會導致不匹配的圖形錯誤。

任何幫助我應該去哪個方向?

+0

請注意,使用佔位符(代表'apply_gradients'中的漸變張量)是不必要的,因爲您可以爲任何變量(張量)提供numpy值。您可以使用'compute_gradients'返回的原始梯度張量。 – Falcon

回答

6

假設每個gradients[i]是,你已經取出的使用一些外的帶機構的NumPy的陣列,所述的解決方法是簡單地以除去tf.convert_to_tensor()調用構建feed_dict時:

feed_dict = {} 
for i, grad_var in enumerate(compute_gradients): 
    feed_dict[placeholder_gradients[i][0]] = gradients[i] 
apply_gradients.run(feed_dict=feed_dict) 

在每個值feed_dict應該是一個NumPy數組(或其他一些可以普通轉換爲NumPy數組的對象)。特別是,tf.Tensor對於feed_dict不是有效值。

+0

OMG就是這樣,非常感謝你,一直在爲此工作一週。 – syzygy

+0

是否記錄在某處?除了代碼本身之外,我很難找到有關feed_dict工作原理的信息。也許我可以發佈一個問題,以便吐出有用的錯誤消息。 – syzygy

+1

主要文檔位於[Session.run()](https://www.tensorflow.org/versions/master/api_docs/python/client.html#Session)的文檔中,它描述了可能在'feed_dict'。我想我們也[最近改進](https://github.com/tensorflow/tensorflow/blob/4c3b060b9b063a247172c939e0e1314577b581e3/tensorflow/python/client/session.py#L370)在這種情況下引發的異常,但是可能還沒有在當前版本中! – mrry