pytorch
51 строка · 1.8 Кб
1
2
3
4
5
6import numpy as np7import caffe2.python.hypothesis_test_util as hu8from caffe2.python import core, utils9from hypothesis import given, settings10import hypothesis.strategies as st11
12
13class Depthwise3x3ConvOpsTest(hu.HypothesisTestCase):14@given(pad=st.integers(0, 1),15kernel=st.integers(3, 3),16size=st.integers(4, 8),17channels=st.integers(2, 4),18batch_size=st.integers(1, 1),19order=st.sampled_from(["NCHW"]),20engine=st.sampled_from(["DEPTHWISE_3x3"]),21use_bias=st.booleans(),22**hu.gcs)23@settings(deadline=10000)24def test_convolution_gradients(self, pad, kernel, size,25channels, batch_size,26order, engine, use_bias, gc, dc):27op = core.CreateOperator(28"Conv",29["X", "w", "b"] if use_bias else ["X", "w"],30["Y"],31kernel=kernel,32pad=pad,33group=channels,34order=order,35engine=engine,36)37X = np.random.rand(38batch_size, size, size, channels).astype(np.float32) - 0.539w = np.random.rand(40channels, kernel, kernel, 1).astype(np.float32)\41- 0.542b = np.random.rand(channels).astype(np.float32) - 0.543if order == "NCHW":44X = utils.NHWC2NCHW(X)45w = utils.NHWC2NCHW(w)46
47inputs = [X, w, b] if use_bias else [X, w]48# Error handling path.49if size + pad + pad < kernel or size + pad + pad < kernel:50with self.assertRaises(RuntimeError):51self.assertDeviceChecks(dc, op, inputs, [0])52return53
54self.assertDeviceChecks(dc, op, inputs, [0])55for i in range(len(inputs)):56self.assertGradientChecks(gc, op, inputs, i, [0])57