Skip to contents

Architecture spec (like hmalex): layer-by-layer channel/param counts for a square image reached from seed_shape by stride-2 transposed convs. One generator forward pass on unit kernels is delegated to morie_geron_dcgan_generator to demonstrate the resolved shapes.

Usage

morie_geron_dcgan(
  X,
  z_dim = 100,
  filters = 64,
  epochs = 50,
  lr = 2e-04,
  seed_shape = c(4, 4),
  stride = 2
)

Arguments

X

Real images (H,W) or (m,H,W).

z_dim, filters

int.

epochs, lr

Training config (recorded only; see hmgan for the loop).

seed_shape

c(h0, w0).

stride

Upsample stride (>=2).

Value

List with generator_layers, discriminator_layers, generator_params, discriminator_params, total_params, n_layers.

Examples

morie_geron_dcgan(array(0, dim = c(3, 16, 16)), z_dim = 8, filters = 4)
#> $generator_layers
#> $generator_layers[[1]]
#> $generator_layers[[1]]$kind
#> [1] "project"
#> 
#> $generator_layers[[1]]$`in`
#> [1] 8
#> 
#> $generator_layers[[1]]$out
#> [1] 4
#> 
#> $generator_layers[[1]]$channels
#> [1] 8
#> 
#> $generator_layers[[1]]$params
#> [1] 1152
#> 
#> 
#> $generator_layers[[2]]
#> $generator_layers[[2]]$kind
#> [1] "deconv"
#> 
#> $generator_layers[[2]]$in_channels
#> [1] 8
#> 
#> $generator_layers[[2]]$channels
#> [1] 4
#> 
#> $generator_layers[[2]]$kernel
#> [1] 4
#> 
#> $generator_layers[[2]]$stride
#> [1] 2
#> 
#> $generator_layers[[2]]$out
#> [1] 8
#> 
#> $generator_layers[[2]]$params
#> [1] 516
#> 
#> $generator_layers[[2]]$batch_norm
#> [1] TRUE
#> 
#> $generator_layers[[2]]$activation
#> [1] "relu"
#> 
#> 
#> $generator_layers[[3]]
#> $generator_layers[[3]]$kind
#> [1] "deconv"
#> 
#> $generator_layers[[3]]$in_channels
#> [1] 4
#> 
#> $generator_layers[[3]]$channels
#> [1] 1
#> 
#> $generator_layers[[3]]$kernel
#> [1] 4
#> 
#> $generator_layers[[3]]$stride
#> [1] 2
#> 
#> $generator_layers[[3]]$out
#> [1] 16
#> 
#> $generator_layers[[3]]$params
#> [1] 65
#> 
#> $generator_layers[[3]]$batch_norm
#> [1] FALSE
#> 
#> $generator_layers[[3]]$activation
#> [1] "tanh"
#> 
#> 
#> 
#> $discriminator_layers
#> $discriminator_layers[[1]]
#> $discriminator_layers[[1]]$kind
#> [1] "conv"
#> 
#> $discriminator_layers[[1]]$in_channels
#> [1] 1
#> 
#> $discriminator_layers[[1]]$channels
#> [1] 4
#> 
#> $discriminator_layers[[1]]$kernel
#> [1] 4
#> 
#> $discriminator_layers[[1]]$stride
#> [1] 2
#> 
#> $discriminator_layers[[1]]$out
#> [1] 8
#> 
#> $discriminator_layers[[1]]$params
#> [1] 68
#> 
#> $discriminator_layers[[1]]$batch_norm
#> [1] FALSE
#> 
#> $discriminator_layers[[1]]$activation
#> [1] "leaky_relu"
#> 
#> 
#> $discriminator_layers[[2]]
#> $discriminator_layers[[2]]$kind
#> [1] "conv"
#> 
#> $discriminator_layers[[2]]$in_channels
#> [1] 4
#> 
#> $discriminator_layers[[2]]$channels
#> [1] 8
#> 
#> $discriminator_layers[[2]]$kernel
#> [1] 4
#> 
#> $discriminator_layers[[2]]$stride
#> [1] 2
#> 
#> $discriminator_layers[[2]]$out
#> [1] 4
#> 
#> $discriminator_layers[[2]]$params
#> [1] 520
#> 
#> $discriminator_layers[[2]]$batch_norm
#> [1] TRUE
#> 
#> $discriminator_layers[[2]]$activation
#> [1] "leaky_relu"
#> 
#> 
#> $discriminator_layers[[3]]
#> $discriminator_layers[[3]]$kind
#> [1] "fc"
#> 
#> $discriminator_layers[[3]]$`in`
#> [1] 128
#> 
#> $discriminator_layers[[3]]$out
#> [1] 1
#> 
#> $discriminator_layers[[3]]$params
#> [1] 129
#> 
#> $discriminator_layers[[3]]$activation
#> [1] "sigmoid"
#> 
#> 
#> 
#> $generator_params
#> [1] 1733
#> 
#> $discriminator_params
#> [1] 717
#> 
#> $total_params
#> [1] 2450
#> 
#> $image_shape
#> [1] 16 16
#> 
#> $n_layers
#> [1] 2
#> 
#> $z_dim
#> [1] 8
#> 
#> $sample_shape
#> [1] 16 16
#> 
#> $training_config
#> $training_config$epochs
#> [1] 50
#> 
#> $training_config$lr
#> [1] 2e-04
#> 
#> $training_config$adam_beta1
#> [1] 0.5
#> 
#> 
#> $estimate
#> [1] 2450
#> 
#> $n
#> [1] 3
#> 
#> $method
#> [1] "DCGAN generator/discriminator resolved to concrete shapes; forward pass delegated to grdcgan"
#>