class TestGlobalPoolingLayer(unittest.TestCase): def setUp(self): self.layer = GlobalPoolingLayer() self.layer.set_input_shape((2, 4)) self.input = np.array([[-5, 1, 7, 5], [-50, -10, -70, 50]], dtype=np.float64) def test_forward_prop(self): expected_output = np.array([2, -20, 7, 50, 10, 100], dtype=np.float64) output = self.layer.forward_prop(self.input) numpy.testing.assert_array_equal(output, expected_output) def test_back_prop(self): self.layer.forward_prop(self.input) out_grad = np.array([0.1, 0.2, 0.3, 0.2, 0.1, 0.2], dtype=np.float64) expected_in_grad = np.array([[0.025 - 0.5 * 0.1, 0.025 + 0.1 * 0.1, 0.025 + 0.3 + 0.7 * 0.1, 0.025 + 0.5 * 0.1], [0.05 - 0.5 * 0.2, 0.05 - 0.1 * 0.2, 0.05 - 0.7 * 0.2, 0.05 + 0.2 + 0.5 * 0.2]], dtype=np.float64) in_grad = self.layer.back_prop(out_grad) numpy.testing.assert_array_almost_equal(in_grad, expected_in_grad) def test_back_prop_small_values(self): self.input = np.array([[0.000001, 0.000001, 0.000001, 0.000001], [-50, -10, -70, 50]], dtype=np.float64) self.layer.forward_prop(self.input) out_grad = np.array([0.1, 0.2, 0.3, 0.2, 0.1, 0.2], dtype=np.float64) expected_in_grad = np.array([[0.025 + 0.3, 0.025, 0.025, 0.025], [0.05 - 0.5 * 0.2, 0.05 - 0.1 * 0.2, 0.05 - 0.7 * 0.2, 0.05 + 0.2 + 0.5 * 0.2]], dtype=np.float64) in_grad = self.layer.back_prop(out_grad) numpy.testing.assert_array_almost_equal(in_grad, expected_in_grad) def test_get_output_shape(self): self.assertEqual(self.layer.get_output_shape(), (6, ))
def setUp(self): self.layer = GlobalPoolingLayer() self.layer.set_input_shape((2, 4)) self.input = np.array([[-5, 1, 7, 5], [-50, -10, -70, 50]], dtype=np.float64)