compute_loss.py 965 B

1234567891011121314151617181920212223242526272829303132333435
  1. import caffe2.contrib.playground.meter as Meter
  2. from caffe2.python import workspace
  3. class ComputeLoss(Meter.Meter):
  4. def __init__(self, opts=None, blob_name=''):
  5. self.blob_name = blob_name
  6. self.opts = opts
  7. self.iter = 0
  8. self.value = 0
  9. def Reset(self):
  10. self.iter = 0
  11. self.value = 0
  12. def Add(self):
  13. """Average values of a blob on each gpu"""
  14. value = 0
  15. for idx in range(self.opts['distributed']['first_xpu_id'],
  16. self.opts['distributed']['first_xpu_id'] +
  17. self.opts['distributed']['num_xpus']):
  18. value += workspace.FetchBlob('{}_{}/{}'.
  19. format(self.opts['distributed']['device'], idx, self.blob_name))
  20. self.value += value
  21. self.iter += 1
  22. def Compute(self):
  23. result = self.opts['distributed']['num_shards'] * self.value / self.iter
  24. self.Reset()
  25. return result