context("build(hp) - MNIST")
source("utils.R")
test_succeeds("Can run hyper_class", {
library(dplyr)
library(tfdatasets)
library(kerastuneR)
conv_build_model <- function(hp) {
inputs <- tf$keras$Input(shape = list(28L, 28L, 1L))
x <- inputs
for (i in 1:hp$Int('conv_layers', 1L, 3L, default = 3L)) {
x <- tf$keras$layers$Conv2D(
filters = hp$Int(paste('filters_', i, sep = ''), 4L, 32L, step = 4L, default = 8L),
kernel_size = hp$Int(paste('kernel_size_', i, sep = ''), 3L, 5L),
activation = 'relu',
padding = 'same'
)(x)
pool_type <- hp$Choice(paste('pooling', i, sep = ''), c('max', 'avg'))
if (pool_type == 'max') {
x <- tf$keras$layers$MaxPooling2D(pool_size = c(2L, 2))(x) # Adding pool_size argument
} else {
x <- tf$keras$layers$AveragePooling2D(pool_size = c(2L, 2))(x) # Adding pool_size argument
}
x <- tf$keras$layers$BatchNormalization()(x)
x <- tf$keras$layers$ReLU()(x)
}
global_pooling_type <- hp$Choice('global_pooling', c('max', 'avg'))
if (global_pooling_type == 'max') {
x <- tf$keras$layers$GlobalMaxPool2D()(x)
} else {
x <- tf$keras$layers$GlobalAveragePooling2D()(x)
}
outputs <- tf$keras$layers$Dense(10L, activation = 'softmax')(x)
model <- tf$keras$Model(inputs, outputs)
optimizer <- hp$Choice('optimizer', c('adam', 'sgd'))
model %>% compile(optimizer, loss = 'sparse_categorical_crossentropy', metrics = 'accuracy')
return(model)
}
testthat::expect_length(class(Hyperband(
hypermodel = conv_build_model,
objective='val_accuracy',
max_epochs = 1,
factor = 2,
hyperband_iterations = 1,
directory = 'results_dir',
project_name = 'mnist')),5)
main = function() {
tuner = Hyperband(
hypermodel = conv_build_model,
objective = 'val_accuracy',
max_epochs = 1,
factor = 2,
hyperband_iterations = 1,
directory = 'model_dir2',
project_name = 'mnist_c')
mnist_data = dataset_fashion_mnist()
c(mnist_train, mnist_test) %<-% mnist_data
rm(mnist_data)
mnist_train$x = tf$reshape(mnist_train$x,shape = c(6e4L,28L,28L,1L))
mnist_test$x = tf$reshape(mnist_test$x,shape = c(1e4L,28L,28L,1L))
mnist_train = tensor_slices_dataset(list(tf$dtypes$cast(mnist_train$x, 'float32') / 255., mnist_train$y)) %>%
dataset_shuffle(1e3) %>% dataset_batch(1e2) %>% dataset_repeat()
mnist_test = tensor_slices_dataset(list(tf$dtypes$cast(mnist_test$x, 'float32') / 255., mnist_test$y)) %>%
dataset_batch(1e2)
tuner %>% fit_tuner(x = mnist_train,
steps_per_epoch=600,
validation_data=mnist_test,
validation_steps=100,
epochs=1
)
}
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.