TensorFlow apply_gradients 远程
TensorFlow apply_gradients remotely
我正在尝试将最小化功能拆分到两台机器上。在一台机器上,我调用 "compute_gradients",在另一台机器上,我调用 "apply_gradients" 并使用通过网络发送的梯度。问题是无论我做什么,调用 apply_gradients(...).运行(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 操作直到我收到渐变,这导致非- 匹配图形错误。
关于我应该朝哪个方向发展的任何帮助?
假设每个 gradients[i]
都是您使用某种 out-of-band 机制获取的 NumPy 数组,解决方法是在构建 [=13= 时删除 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
.
的有效值
我正在尝试将最小化功能拆分到两台机器上。在一台机器上,我调用 "compute_gradients",在另一台机器上,我调用 "apply_gradients" 并使用通过网络发送的梯度。问题是无论我做什么,调用 apply_gradients(...).运行(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 操作直到我收到渐变,这导致非- 匹配图形错误。
关于我应该朝哪个方向发展的任何帮助?
假设每个 gradients[i]
都是您使用某种 out-of-band 机制获取的 NumPy 数组,解决方法是在构建 [=13= 时删除 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
.