(self, dev=gpu_dev)
| 3555 | |
| 3556 | @unittest.skipIf(not singa_wrap.USE_CUDA, 'CUDA is not enabled') |
| 3557 | def _cossim_value(self, dev=gpu_dev): |
| 3558 | # numpy val |
| 3559 | np.random.seed(0) |
| 3560 | bs = 1000 |
| 3561 | vec_s = 1200 |
| 3562 | a = np.random.random((bs, vec_s)).astype(np.float32) |
| 3563 | b = np.random.random((bs, vec_s)).astype(np.float32) |
| 3564 | dy = np.random.random((bs,)).astype(np.float32) |
| 3565 | |
| 3566 | # singa tensor |
| 3567 | ta = tensor.from_numpy(a) |
| 3568 | tb = tensor.from_numpy(b) |
| 3569 | tdy = tensor.from_numpy(dy) |
| 3570 | ta.to_device(dev) |
| 3571 | tb.to_device(dev) |
| 3572 | tdy.to_device(dev) |
| 3573 | |
| 3574 | # singa forward and backward |
| 3575 | ty = autograd.cossim(ta, tb) |
| 3576 | tda, tdb = ty.creator.backward(tdy.data) |
| 3577 | |
| 3578 | np_forward = list() |
| 3579 | for i in range(len(a)): |
| 3580 | a_norm = np.linalg.norm(a[i]) |
| 3581 | b_norm = np.linalg.norm(b[i]) |
| 3582 | ab_dot = np.dot(a[i], b[i]) |
| 3583 | out = ab_dot / (a_norm * b_norm) |
| 3584 | np_forward.append(out) |
| 3585 | |
| 3586 | np_backward_a = list() |
| 3587 | np_backward_b = list() |
| 3588 | for i in range(len(a)): |
| 3589 | a_norm = np.linalg.norm(a[i]) |
| 3590 | b_norm = np.linalg.norm(b[i]) |
| 3591 | da = dy[i] * (b[i] / (a_norm * b_norm) - (np_forward[i] * a[i]) / |
| 3592 | (a_norm * a_norm)) |
| 3593 | db = dy[i] * (a[i] / (a_norm * b_norm) - (np_forward[i] * b[i]) / |
| 3594 | (b_norm * b_norm)) |
| 3595 | np_backward_a.append(da) |
| 3596 | np_backward_b.append(db) |
| 3597 | |
| 3598 | np.testing.assert_array_almost_equal(tensor.to_numpy(ty), |
| 3599 | np.array(np_forward)) |
| 3600 | np.testing.assert_array_almost_equal( |
| 3601 | tensor.to_numpy(tensor.from_raw_tensor(tda)), np_backward_a) |
| 3602 | |
| 3603 | @unittest.skipIf(not singa_wrap.USE_CUDA, 'CUDA is not enabled') |
| 3604 | def test_cossim_value_gpu(self): |
no test coverage detected