pytorch
50 строк · 1.6 Кб
1
2
3
4
5import functools
6
7import numpy as np
8from hypothesis import given, settings
9from caffe2.python import core
10import caffe2.python.hypothesis_test_util as hu
11import copy
12
13
14class TestNormalizeOp(hu.HypothesisTestCase):
15@given(
16X=hu.tensor(
17min_dim=1, max_dim=5, elements=hu.floats(min_value=0.5, max_value=1.0)
18),
19**hu.gcs
20)
21@settings(max_examples=10, deadline=None)
22def test_normalize(self, X, gc, dc):
23def ref_normalize(X, axis):
24x_normed = X / np.maximum(
25np.sqrt((X ** 2).sum(axis=axis, keepdims=True)), 1e-12
26)
27return (x_normed,)
28
29for axis in range(-X.ndim, X.ndim):
30x = copy.copy(X)
31op = core.CreateOperator("Normalize", "X", "Y", axis=axis)
32self.assertReferenceChecks(
33gc, op, [x], functools.partial(ref_normalize, axis=axis)
34)
35self.assertDeviceChecks(dc, op, [x], [0])
36self.assertGradientChecks(gc, op, [x], 0, [0])
37
38@given(
39X=hu.tensor(
40min_dim=1, max_dim=5, elements=hu.floats(min_value=0.5, max_value=1.0)
41),
42**hu.gcs
43)
44@settings(max_examples=10, deadline=None)
45def test_normalize_L1(self, X, gc, dc):
46def ref(X, axis):
47norm = abs(X).sum(axis=axis, keepdims=True)
48return (X / norm,)
49
50for axis in range(-X.ndim, X.ndim):
51print("axis: ", axis)
52op = core.CreateOperator("NormalizeL1", "X", "Y", axis=axis)
53self.assertReferenceChecks(gc, op, [X], functools.partial(ref, axis=axis))
54self.assertDeviceChecks(dc, op, [X], [0])
55