def test_backprop_maxpool2d_gradients(self): pool_layer = blobs.MaxPool2D(pool_size=(2,2), strides=(1,1), border_mode=B.BorderMode.valid, ignore_border=True, maxpool_deeplift_mode=MaxPoolDeepLiftMode.gradient, channels_come_last=False) self.create_small_net_with_pool_layer(pool_layer, outputs_per_channel=9) self.dense_layer.update_task_index(task_index=0) func = B.function([ self.input_layer.get_activation_vars(), self.input_layer.get_reference_vars()], self.input_layer.get_mxts()) np.testing.assert_almost_equal( func(self.backprop_test_inps, np.ones_like(self.backprop_test_inps)*self.reference_inps), np.array( [[np.array([[1, 0, 0, 0], [0, 0, 2, 0], [2, 1, 1, 0], [0, 0, 1, 1]])*2, np.array([[0, 0, 1, 1], [0, 1, 0, 0], [0, 2, 1, 0], [1, 0, 1, 1]])*3], [np.array([[0, 0, 1, 1], [0, 1, 0, 0], [0, 2, 1, 0], [1, 0, 1, 1]])*2, np.array([[1, 0, 0, 0], [0, 0, 2, 0], [2, 1, 1, 0], [0, 0, 1, 1]])*3]]))
def test_fprop_maxpool2d(self): pool_layer = blobs.MaxPool2D(pool_size=(2,2), strides=(1,1), border_mode=B.BorderMode.valid, ignore_border=True, maxpool_deeplift_mode=MaxPoolDeepLiftMode.gradient, channels_come_last=False) self.create_small_net_with_pool_layer(pool_layer, outputs_per_channel=9) func = B.function([self.input_layer.get_activation_vars()], self.pool_layer.get_activation_vars()) np.testing.assert_almost_equal(func([self.reference_inps[0], self.reference_inps[0]-1]), np.array( [[[[1,2,3], [5,5,4], [6,7,8]], [[2,3,4], [6,6,5], [7,8,9]]], [[[0,1,2], [4,4,3], [5,6,7]], [[1,2,3], [5,5,4], [6,7,8]]]]))
def maxpool2d_conversion(layer, name, verbose, maxpool_deeplift_mode, **kwargs): pool2d_kwargs = prep_pool2d_kwargs(layer=layer, name=name, verbose=verbose) return [ blobs.MaxPool2D(maxpool_deeplift_mode=maxpool_deeplift_mode, **pool2d_kwargs) ]