Skip to contents

out = floor((in - k + 2p)/s) + 1 and params = filters\*(k\*k\*C) + filters, so an input size that collapses a feature map to zero is an error rather than a silent negative dimension.

Usage

morie_geron_alexnet(
  n_classes = 1000,
  input_size = 227,
  in_channels = 3,
  dropout = 0.5
)

Arguments

n_classes

Output units, >= 1.

input_size

Square side length.

in_channels

Input channels.

dropout

Rate in [0, 1).

Value

List with layers, total_params, trainable_params, output_shape, flatten_dim, conv_params, fc_params.

Examples

morie_geron_alexnet()
#> $layers
#> $layers[[1]]
#> $layers[[1]]$kind
#> [1] "conv"
#> 
#> $layers[[1]]$filters
#> [1] 96
#> 
#> $layers[[1]]$kernel
#> [1] 11
#> 
#> $layers[[1]]$stride
#> [1] 4
#> 
#> $layers[[1]]$pad
#> [1] 0
#> 
#> $layers[[1]]$out
#> [1] 55
#> 
#> $layers[[1]]$params
#> [1] 34944
#> 
#> 
#> $layers[[2]]
#> $layers[[2]]$kind
#> [1] "pool"
#> 
#> $layers[[2]]$filters
#> [1] NA
#> 
#> $layers[[2]]$kernel
#> [1] 3
#> 
#> $layers[[2]]$stride
#> [1] 2
#> 
#> $layers[[2]]$pad
#> [1] 0
#> 
#> $layers[[2]]$out
#> [1] 27
#> 
#> $layers[[2]]$params
#> [1] 0
#> 
#> 
#> $layers[[3]]
#> $layers[[3]]$kind
#> [1] "conv"
#> 
#> $layers[[3]]$filters
#> [1] 256
#> 
#> $layers[[3]]$kernel
#> [1] 5
#> 
#> $layers[[3]]$stride
#> [1] 1
#> 
#> $layers[[3]]$pad
#> [1] 2
#> 
#> $layers[[3]]$out
#> [1] 27
#> 
#> $layers[[3]]$params
#> [1] 614656
#> 
#> 
#> $layers[[4]]
#> $layers[[4]]$kind
#> [1] "pool"
#> 
#> $layers[[4]]$filters
#> [1] NA
#> 
#> $layers[[4]]$kernel
#> [1] 3
#> 
#> $layers[[4]]$stride
#> [1] 2
#> 
#> $layers[[4]]$pad
#> [1] 0
#> 
#> $layers[[4]]$out
#> [1] 13
#> 
#> $layers[[4]]$params
#> [1] 0
#> 
#> 
#> $layers[[5]]
#> $layers[[5]]$kind
#> [1] "conv"
#> 
#> $layers[[5]]$filters
#> [1] 384
#> 
#> $layers[[5]]$kernel
#> [1] 3
#> 
#> $layers[[5]]$stride
#> [1] 1
#> 
#> $layers[[5]]$pad
#> [1] 1
#> 
#> $layers[[5]]$out
#> [1] 13
#> 
#> $layers[[5]]$params
#> [1] 885120
#> 
#> 
#> $layers[[6]]
#> $layers[[6]]$kind
#> [1] "conv"
#> 
#> $layers[[6]]$filters
#> [1] 384
#> 
#> $layers[[6]]$kernel
#> [1] 3
#> 
#> $layers[[6]]$stride
#> [1] 1
#> 
#> $layers[[6]]$pad
#> [1] 1
#> 
#> $layers[[6]]$out
#> [1] 13
#> 
#> $layers[[6]]$params
#> [1] 1327488
#> 
#> 
#> $layers[[7]]
#> $layers[[7]]$kind
#> [1] "conv"
#> 
#> $layers[[7]]$filters
#> [1] 256
#> 
#> $layers[[7]]$kernel
#> [1] 3
#> 
#> $layers[[7]]$stride
#> [1] 1
#> 
#> $layers[[7]]$pad
#> [1] 1
#> 
#> $layers[[7]]$out
#> [1] 13
#> 
#> $layers[[7]]$params
#> [1] 884992
#> 
#> 
#> $layers[[8]]
#> $layers[[8]]$kind
#> [1] "pool"
#> 
#> $layers[[8]]$filters
#> [1] NA
#> 
#> $layers[[8]]$kernel
#> [1] 3
#> 
#> $layers[[8]]$stride
#> [1] 2
#> 
#> $layers[[8]]$pad
#> [1] 0
#> 
#> $layers[[8]]$out
#> [1] 6
#> 
#> $layers[[8]]$params
#> [1] 0
#> 
#> 
#> $layers[[9]]
#> $layers[[9]]$kind
#> [1] "fc"
#> 
#> $layers[[9]]$filters
#> [1] 4096
#> 
#> $layers[[9]]$`in`
#> [1] 9216
#> 
#> $layers[[9]]$out
#> [1] 4096
#> 
#> $layers[[9]]$params
#> [1] 37752832
#> 
#> $layers[[9]]$dropout
#> [1] 0.5
#> 
#> 
#> $layers[[10]]
#> $layers[[10]]$kind
#> [1] "fc"
#> 
#> $layers[[10]]$filters
#> [1] 4096
#> 
#> $layers[[10]]$`in`
#> [1] 4096
#> 
#> $layers[[10]]$out
#> [1] 4096
#> 
#> $layers[[10]]$params
#> [1] 16781312
#> 
#> $layers[[10]]$dropout
#> [1] 0.5
#> 
#> 
#> $layers[[11]]
#> $layers[[11]]$kind
#> [1] "fc"
#> 
#> $layers[[11]]$filters
#> [1] 1000
#> 
#> $layers[[11]]$`in`
#> [1] 4096
#> 
#> $layers[[11]]$out
#> [1] 1000
#> 
#> $layers[[11]]$params
#> [1] 4097000
#> 
#> $layers[[11]]$dropout
#> [1] 0
#> 
#> 
#> 
#> $total_params
#> [1] 62378344
#> 
#> $trainable_params
#> [1] 62378344
#> 
#> $output_shape
#> [1] 1000
#> 
#> $flatten_dim
#> [1] 9216
#> 
#> $conv_params
#> [1] 3747200
#> 
#> $fc_params
#> [1] 58631144
#> 
#> $dropout
#> [1] 0.5
#> 
#> $estimate
#> [1] 62378344
#> 
#> $n
#> [1] 11
#> 
#> $method
#> [1] "AlexNet architecture resolved to concrete shapes and parameter counts"
#>