远程TensorFlow apply_gradients

时间:2016-01-20 21:02:52

标签: gradient tensorflow

我正试图在两台机器上拆分最小化功能。在一台机器上,我称之为“compute_gradients”,在另一台机器上,我称之为“apply_gradients”,其中包含通过网络发送的渐变。问题是,无论我做什么,调用apply_gradients(...)。run(feed_dict)似乎都不起作用。我已经尝试插入占位符代替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操作,直到我收到渐变,这会导致不匹配的图形错误。

对于我应该采用哪种方向的任何帮助?

1 个答案:

答案 0 :(得分:7)

假设每个gradients[i]是您使用某种带外机制获取的NumPy数组,修复只是在构建feed_dict时删除tf.convert_to_tensor()调用:

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的有效值。