MNIST Using layer_dense ```{r} network <- keras_model_sequential() |> layer_dense(units = 512, activation = "relu") |> layer_dense(units = 10, activation = "softmax") ``` ```{r} network |> compile( optimizer = "rmsprop", loss = "categorical_crossentropy", metrics = c("accuracy") ) ``` Using layer_cov_2d and layer_max_pooling ```{r} library(keras3) inputs <- keras_input(shape = c(28, 28, 1)) outputs <- inputs |> layer_conv_2d(filters = 64, kernel_size = 3, activation = "relu") |> layer_max_pooling_2d(pool_size = 2) |> layer_conv_2d(filters = 128, kernel_size = 3, activation = "relu") |> layer_max_pooling_2d(pool_size = 2) |> layer_conv_2d(filters = 256, kernel_size = 3, activation = "relu") |> layer_global_average_pooling_2d() |> layer_dense(10, activation = "softmax") model_no_max_pool <- keras_model(inputs = inputs, outputs = outputs) ``` ```{r} model |> compile( optimizer = "rmsprop", loss = "categorical_crossentropy", metrics = c("accuracy") ) ``` ```{r} model |> fit( train_images, train_labels, epochs = 5, batch_size=64 ) ``` ```{r} model |> evaluate(test_images, test_labels) ``` Dogs vs Cats ```{r} inputs <- keras_input(shape = c(180, 180, 3)) # <1> outputs <- inputs |> layer_rescaling(1 / 255) |> # <2> layer_conv_2d(filters = 32, kernel_size = 3, activation = "relu") |> layer_max_pooling_2d(pool_size = 2) |> layer_conv_2d(filters = 64, kernel_size = 3, activation = "relu") |> layer_max_pooling_2d(pool_size = 2) |> layer_conv_2d(filters = 128, kernel_size = 3, activation = "relu") |> layer_max_pooling_2d(pool_size = 2) |> layer_conv_2d(filters = 256, kernel_size = 3, activation = "relu") |> layer_max_pooling_2d(pool_size = 2) |> layer_conv_2d(filters = 512, kernel_size = 3, activation = "relu") |> layer_global_average_pooling_2d() |> # <3> layer_dense(1, activation = "sigmoid") model <- keras_model(inputs, outputs) ```