def test_keras_backward(num_classes): bounds = (0, 255) channels = num_classes model = Sequential() with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) model.add(GlobalAveragePooling2D( data_format='channels_last', input_shape=(5, 5, channels))) model = KerasModel( model, bounds=bounds, predicts='logits') test_image = np.random.rand(5, 5, channels).astype(np.float32) test_grad_pre = np.random.rand(num_classes).astype(np.float32) test_grad = model.backward(test_grad_pre, test_image) assert test_grad.shape == test_image.shape manual_grad = np.repeat(np.repeat( (test_grad_pre / 25.).reshape((1, 1, -1)), 5, axis=0), 5, axis=1) np.testing.assert_almost_equal( test_grad, manual_grad)