def test_assertion_error_with_too_large_kernel(self): n = 1 c_i = 1 h_i = 3 w_i = 3 x = np.arange(n * c_i * h_i * w_i).reshape(n, c_i, h_i, w_i).astype(np.float32) c_o = 1 h_k = 4 # > h_i w_k = 4 # > w_i W = np.full(c_o * c_i * h_k * w_k, 2).reshape(c_o, c_i, h_k, w_k).astype(np.float32) with pytest.raises(AssertionError): convolution_with_standard_library(x.tolist(), W.tolist())
def test_assertion_error_with_too_large_stride(self): n = 1 c_i = 1 h_i = 3 w_i = 3 x = np.arange(n * c_i * h_i * w_i).reshape(n, c_i, h_i, w_i).astype(np.float32) c_o = 1 h_k = 2 w_k = 2 W = np.full(c_o * c_i * h_k * w_k, 2).reshape(c_o, c_i, h_k, w_k).astype(np.float32) pad = 1 stride = 5 # > h_i - h_k + 2 * pad + 1 with pytest.raises(AssertionError): convolution_with_standard_library(x.tolist(), W.tolist(), stride=stride, pad=pad)
def test_basis(self): n = 1 c_i = 1 h_i = 3 w_i = 3 x = np.arange(n * c_i * h_i * w_i).reshape(n, c_i, h_i, w_i).astype(np.float32) c_o = 1 h_k = 2 w_k = 2 W = np.full(c_o * c_i * h_k * w_k, 2).reshape(c_o, c_i, h_k, w_k).astype(np.float32) stride = 1 pad = 0 expected = list(convolution_2d(x, W, stride=stride, pad=pad).data) actual = convolution_with_standard_library(x.tolist(), W.tolist(), stride=stride, pad=pad) self.__assert_eq_arrays(actual, expected, n, c_o, h_i, w_i, h_k, w_k, pad, stride)
def test_with_c_o_64_c_i_3_n_1_stride_1_and_padding_1(self): n = 1 c_i = 3 h_i = 224 w_i = 224 x = np.arange(n * c_i * h_i * w_i).reshape(n, c_i, h_i, w_i).astype(np.float32) c_o = 64 h_k = 3 w_k = 3 W = np.full(c_o * c_i * h_k * w_k, 2).reshape(c_o, c_i, h_k, w_k).astype(np.float32) stride = 1 pad = 1 expected = convolution_2d(x, W, stride=stride, pad=pad).data.tolist() actual = convolution_with_standard_library(x.tolist(), W.tolist(), stride=stride, pad=pad) self.__assert_eq_arrays(actual, expected, n, c_o, h_i, w_i, h_k, w_k, pad, stride)
def test_with_c_o_3_c_i_3_n_3_stride_3_and_padding_5(self): n = 3 c_i = 3 h_i = 10 w_i = 10 x = np.arange(n * c_i * h_i * w_i).reshape(n, c_i, h_i, w_i).astype(np.float32) c_o = 3 h_k = 2 w_k = 2 W = np.full(c_o * c_i * h_k * w_k, 2).reshape(c_o, c_i, h_k, w_k).astype(np.float32) stride = 3 pad = 5 expected = list(convolution_2d(x, W, stride=stride, pad=pad).data) actual = convolution_with_standard_library(x.tolist(), W.tolist(), stride=stride, pad=pad) self.__assert_eq_arrays(actual, expected, n, c_o, h_i, w_i, h_k, w_k, pad, stride)