Composite(
  GlobalRule: all layers => ZeroRule(),
  GlobalRule: all layers => PassRule(),
  GlobalTypeRule(     # on all layers
    Union{Conv, ConvTranspose, CrossCor} => AlphaBetaRule{Float32}(2.0f0, 1.0f0),
    Dense => EpsilonRule{Float32}(1.0f-6),
    Union{GlobalMaxPool, GlobalMeanPool, AdaptiveMaxPool, AdaptiveMeanPool, MaxPool, MeanPool} => EpsilonRule{Float32}(1.0f-6),
  ),
  FirstNTypeRule(     # on layers 1:7
    Conv => FlatRule(),
  ),
  LastNTypeRule(      # on last 3 layers
    Dense => EpsilonRule{Float32}(1.0f-7),
  ),
  RangeTypeRule(      # on layers 4:10
    Union{GlobalMaxPool, GlobalMeanPool, AdaptiveMaxPool, AdaptiveMeanPool, MaxPool, MeanPool} => EpsilonRule{Float32}(1.0f-5),
  ),
  LayerRule: layer 9 => AlphaBetaRule{Float32}(1.0f0, 0.0f0),
  FirstLayerRule: first layer => ZBoxRule{Float32}(-3.0f0, 3.0f0),
  RangeRule: layers 18:19 => ZeroRule(),
  LastLayerRule: last layer => PassRule(),
)
