mirror of
https://github.com/wassname/ray.git
synced 2026-09-09 11:32:43 +08:00
[API] Implement get for multiple objects (#398)
* [API] Implement get for multiple objects * Small fixes.
This commit is contained in:
committed by
Robert Nishihara
parent
b6872182bf
commit
3548797202
@@ -241,7 +241,7 @@ def num_images(batches):
|
||||
int: The number of images
|
||||
"""
|
||||
shape_ids = [ra.shape.remote(batch) for batch in batches]
|
||||
return sum([ray.get(shape_id)[0] for shape_id in shape_ids])
|
||||
return sum([shape[0] for shape in ray.get(shape_ids)])
|
||||
|
||||
@ray.remote
|
||||
def compute_mean_image(batches):
|
||||
@@ -256,9 +256,8 @@ def compute_mean_image(batches):
|
||||
if len(batches) == 0:
|
||||
raise Exception("No images were passed into `compute_mean_image`.")
|
||||
sum_image_ids = [ra.sum.remote(batch, axis=0) for batch in batches]
|
||||
sum_images = [ray.get(sum_image_id) for sum_image_id in sum_image_ids]
|
||||
n_images = num_images.remote(batches)
|
||||
return np.sum(sum_images, axis=0).astype("float64") / ray.get(n_images)
|
||||
return np.sum(ray.get(sum_image_ids), axis=0).astype("float64") / ray.get(n_images)
|
||||
|
||||
@ray.remote(num_return_vals=4)
|
||||
def shuffle_arrays(first_images, first_labels, second_images, second_labels):
|
||||
|
||||
@@ -93,7 +93,7 @@ if __name__ == "__main__":
|
||||
print "Iteration {}: accuracy = {:.3}%".format(iteration, 100 * ray.get(accuracy))
|
||||
|
||||
# Fetch the gradients. This blocks until the gradients have been computed.
|
||||
gradient_sets = [ray.get(gradient_id) for gradient_id in gradient_ids]
|
||||
gradient_sets = ray.get(gradient_ids)
|
||||
# Average the gradients over all of the tasks.
|
||||
mean_gradients = [np.mean([gradient_set[i] for gradient_set in gradient_sets], axis=0) for i in range(len(weights))]
|
||||
# Use the gradients to update the network.
|
||||
|
||||
@@ -111,12 +111,12 @@ gradient.
|
||||
def full_loss(theta):
|
||||
theta_id = ray.put(theta)
|
||||
loss_ids = [loss.remote(theta_id, xs_id, ys_id) for (xs_id, ys_id) in batch_ids]
|
||||
return sum([ray.get(loss_id) for loss_id in loss_ids])
|
||||
return sum(ray.get(loss_ids))
|
||||
|
||||
def full_grad(theta):
|
||||
theta_id = ray.put(theta)
|
||||
grad_ids = [grad.remote(theta_id, xs_id, ys_id) for (xs_id, ys_id) in batch_ids]
|
||||
return sum([ray.get(grad_id) for grad_id in grad_ids]).astype("float64") # This conversion is necessary for use with fmin_l_bfgs_b.
|
||||
return sum(ray.get(grad_ids)).astype("float64") # This conversion is necessary for use with fmin_l_bfgs_b.
|
||||
```
|
||||
|
||||
Note that we turn `theta` into a remote object with the line `theta_id =
|
||||
|
||||
@@ -92,13 +92,13 @@ if __name__ == "__main__":
|
||||
def full_loss(theta):
|
||||
theta_id = ray.put(theta)
|
||||
loss_ids = [loss.remote(theta_id, xs_id, ys_id) for (xs_id, ys_id) in batch_ids]
|
||||
return sum([ray.get(loss_id) for loss_id in loss_ids])
|
||||
return sum(ray.get(loss_ids))
|
||||
|
||||
# Compute the gradient of the loss on the entire dataset.
|
||||
def full_grad(theta):
|
||||
theta_id = ray.put(theta)
|
||||
grad_ids = [grad.remote(theta_id, xs_id, ys_id) for (xs_id, ys_id) in batch_ids]
|
||||
return sum([ray.get(grad_id) for grad_id in grad_ids]).astype("float64") # This conversion is necessary for use with fmin_l_bfgs_b.
|
||||
return sum(ray.get(grad_ids)).astype("float64") # This conversion is necessary for use with fmin_l_bfgs_b.
|
||||
|
||||
# From the perspective of scipy.optimize.fmin_l_bfgs_b, full_loss is simply a
|
||||
# function which takes some parameters theta, and computes a loss. Similarly,
|
||||
|
||||
Reference in New Issue
Block a user