Creates a keras model of the Wide ResNet deep learning architecture for image classification/regression. The paper is available here:

createWideResNetModel2D(
  inputImageSize,
  numberOfClassificationLabels = 1000,
  depth = 2,
  width = 1,
  residualBlockSchedule = c(16, 32, 64),
  poolSize = c(8, 8),
  dropoutRate = 0,
  weightDecay = 0.0005,
  mode = "classification"
)

Arguments

inputImageSize

Used for specifying the input tensor shape. The shape (or dimension) of that tensor is the image dimensions followed by the number of channels (e.g., red, green, and blue). The batch size (i.e., number of training images) is not specified a priori.

numberOfClassificationLabels

Number of classification labels.

depth

integer determining the depth of the network. Related to the actual number of layers by the numberOfLayers = depth * 6 + 4. Default = 2 (such that numberOfLayers = 16.)

width

integer determining the width of the network. Default = 1.

residualBlockSchedule

vector determining the number of filters per convolutional block. Default = c( 16, 32, 64 ).

poolSize

pool size for final average pooling layer. Default = c( 8, 8 ).

dropoutRate

Dropout percentage. Default = 0.0.

weightDecay

weight for l2 regularizer in convolution layers. Default = 0.0005.

mode

'classification' or 'regression'. Default = 'classification'.

Value

a Wide ResNet keras model

Details

    https://arxiv.org/abs/1512.03385

This particular implementation was influenced by the following python implementation:

    https://github.com/titu1994/Wide-Residual-Networks

Author

Tustison NJ

Examples

library( ANTsRNet ) library( keras ) mnistData <- dataset_mnist()
#> Error in py_discover_config(required_module, use_environment): Python specified in RETICULATE_PYTHON (/Users/ntustison/anaconda3/envs/antsx/bin/python3) does not exist
numberOfLabels <- 10 # Extract a small subset for something that can run quickly X_trainSmall <- mnistData$train$x[1:10,,]
#> Error in eval(expr, envir, enclos): object 'mnistData' not found
X_trainSmall <- array( data = X_trainSmall, dim = c( dim( X_trainSmall ), 1 ) )
#> Error in array(data = X_trainSmall, dim = c(dim(X_trainSmall), 1)): object 'X_trainSmall' not found
Y_trainSmall <- to_categorical( mnistData$train$y[1:10], numberOfLabels )
#> Error in to_categorical(mnistData$train$y[1:10], numberOfLabels): object 'mnistData' not found
X_testSmall <- mnistData$test$x[1:10,,]
#> Error in eval(expr, envir, enclos): object 'mnistData' not found
X_testSmall <- array( data = X_testSmall, dim = c( dim( X_testSmall ), 1 ) )
#> Error in array(data = X_testSmall, dim = c(dim(X_testSmall), 1)): object 'X_testSmall' not found
Y_testSmall <- to_categorical( mnistData$test$y[1:10], numberOfLabels )
#> Error in to_categorical(mnistData$test$y[1:10], numberOfLabels): object 'mnistData' not found
# We add a dimension of 1 to specify the channel size inputImageSize <- c( dim( X_trainSmall )[2:3], 1 )
#> Error in eval(expr, envir, enclos): object 'X_trainSmall' not found
model <- createWideResNetModel2D( inputImageSize = inputImageSize, numberOfClassificationLabels = numberOfLabels )
#> Error in py_discover_config(required_module, use_environment): Python specified in RETICULATE_PYTHON (/Users/ntustison/anaconda3/envs/antsx/bin/python3) does not exist
model %>% compile( loss = 'categorical_crossentropy', optimizer = optimizer_adam( lr = 0.0001 ), metrics = c( 'categorical_crossentropy', 'accuracy' ) )
#> Error in compile(., loss = "categorical_crossentropy", optimizer = optimizer_adam(lr = 1e-04), metrics = c("categorical_crossentropy", "accuracy")): object 'model' not found
# Comment out the rest due to travis build constraints # track <- model %>% fit( X_trainSmall, Y_trainSmall, verbose = 1, # epochs = 1, batch_size = 2, shuffle = TRUE, validation_split = 0.5 ) # Now test the model # testingMetrics <- model %>% evaluate( X_testSmall, Y_testSmall ) # predictedData <- model %>% predict( X_testSmall, verbose = 1 ) rm(model); gc()
#> Warning: object 'model' not found
#> used (Mb) gc trigger (Mb) limit (Mb) max used (Mb) #> Ncells 2536138 135.5 4570014 244.1 NA 4570014 244.1 #> Vcells 4473402 34.2 12255594 93.6 65536 12254504 93.5