diff --git a/paddle/fluid/operators/random_crop_op.h b/paddle/fluid/operators/random_crop_op.h index 8764bd0bc7848f682f419d7096a41d8d7d349c64..a34294f5eeb53c19b4089b76ffdf79716d227662 100644 --- a/paddle/fluid/operators/random_crop_op.h +++ b/paddle/fluid/operators/random_crop_op.h @@ -129,7 +129,7 @@ struct RandomCropFunctor { for (int i = num_batchsize_dims_; i < rank_; ++i) { typename Random::template UniformIntDist dist( 0, x_dims_[i] - out_dims_[i]); - offsets[i] = dist(engine); + offsets[i - num_batchsize_dims_] = dist(engine); } const T* x = x_ + ins_idx * prod_x_ins_dims_; diff --git a/python/paddle/fluid/tests/unittests/op_test.py b/python/paddle/fluid/tests/unittests/op_test.py index 709b4bf2fcfb180c747ba3539711a58a57e3b77f..9f9ee271f82eb560b2b780f85731d5dec0118aca 100644 --- a/python/paddle/fluid/tests/unittests/op_test.py +++ b/python/paddle/fluid/tests/unittests/op_test.py @@ -336,6 +336,8 @@ class OpTest(unittest.TestCase): actual_t = np.array(actual) expect = self.outputs[out_name] expect_t = expect[0] if isinstance(expect, tuple) else expect + import pdb + pdb.set_trace() self.assertTrue( np.allclose( actual_t, expect_t, atol=atol), diff --git a/python/paddle/fluid/tests/unittests/test_random_crop_op.py b/python/paddle/fluid/tests/unittests/test_random_crop_op.py index e609e2c99fba733325b24991a701270170637bda..1c708d0386da4028f1f3d177d0a3fd494c077c6e 100644 --- a/python/paddle/fluid/tests/unittests/test_random_crop_op.py +++ b/python/paddle/fluid/tests/unittests/test_random_crop_op.py @@ -20,14 +20,26 @@ from op_test import OpTest class TestRandomCropOp(OpTest): def setUp(self): - to_crop = np.random.random((1, 10, 15)).astype("float32") + to_crop = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]] * + 5).astype("float32") + self.possible_res = [ + np.array([[1, 2, 3], [5, 6, 7]]), np.array([[2, 3, 4], [6, 7, 8]]), + np.array([[5, 6, 7], [9, 10, 11]]), + np.array([[6, 7, 8], [10, 11, 12]]) + ] self.op_type = "random_crop" self.inputs = {'X': to_crop, 'Seed': np.array([10])} - self.outputs = {'Out': np.array([1, 2, 3]), 'SeedOut': np.array([2])} - self.attrs = {'shape': [5, 5]} + self.outputs = {'Out': np.array([]), 'SeedOut': np.array([])} + self.attrs = {'shape': [2, 3]} def test_check_output(self): - self.check_output() + self.check_output_customized(self.verify_output) + + def verify_output(self, outs): + out = np.array(outs[1]) + for ins in out[:]: + is_equal = [(ins == res).all() for res in self.possible_res] + self.assertIn(True, is_equal) if __name__ == "__main__":