| |
| |
| |
| |
| |
| import numpy as np |
| import hypothesis.strategies as st |
| import unittest |
| import caffe2.python.hypothesis_test_util as hu |
| from caffe2.python import core, workspace |
| from hypothesis import given |
| import caffe2.python.ideep_test_util as mu |
| |
| |
| @unittest.skipIf(not workspace.C.use_mkldnn, "No MKLDNN support.") |
| class TestWeightedSumOp(hu.HypothesisTestCase): |
| @given(n=st.integers(5, 8), m=st.integers(1, 1), |
| d=st.integers(2, 4), grad_on_w=st.booleans(), |
| **mu.gcs_ideep_only) |
| def test_weighted_sum(self, n, m, d, grad_on_w, gc, dc): |
| input_names = [] |
| input_vars = [] |
| for i in range(m): |
| X_name = 'X' + str(i) |
| w_name = 'w' + str(i) |
| input_names.extend([X_name, w_name]) |
| var = np.random.rand(n, d).astype(np.float32) |
| vars()[X_name] = var |
| input_vars.append(var) |
| var = np.random.rand(1).astype(np.float32) |
| vars()[w_name] = var |
| input_vars.append(var) |
| |
| def weighted_sum_op_ref(*args): |
| res = np.zeros((n, d)) |
| for i in range(m): |
| res = res + args[2 * i + 1] * args[2 * i] |
| |
| return (res, ) |
| |
| op = core.CreateOperator( |
| "WeightedSum", |
| input_names, |
| ['Y'], |
| grad_on_w=grad_on_w, |
| ) |
| |
| self.assertReferenceChecks( |
| device_option=gc, |
| op=op, |
| inputs=input_vars, |
| reference=weighted_sum_op_ref, |
| ) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |