-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathkaras_experiment.R
64 lines (52 loc) · 1.39 KB
/
karas_experiment.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
devtools::install_github("rstudio/keras")
library(keras)
install_keras()
# load MNIST data
mnist <- dataset_mnist()
x_train <- mnist$train$x
y_train <- mnist$train$y
x_test <- mnist$test$x
y_test <- mnist$test$y
# reshape
dim(x_train) <- c(nrow(x_train), 784)
dim(x_test) <- c(nrow(x_test), 784)
# rescale
x_train <- x_train / 255
x_test <- x_test / 255
# encode
y_train <- to_categorical(y_train, 10)
y_test <- to_categorical(y_test, 10)
# make a model
model <- keras_model_sequential()
model %>%
layer_dense(units = 256,
activation = "relu",
input_shape = c(784)) %>%
layer_dropout(rate = 0.4) %>%
layer_dense(units = 128, activation = "relu") %>%
layer_dropout(rate = 0.3) %>%
layer_dense(units = 10, activation = "softmax")
model %>% compile(
loss = 'categorical_crossentropy',
optimizer = optimizer_rmsprop(),
metrics = c('accuracy')
)
history <- model %>% fit(
x_train,
y_train,
epochs = 30,
batch_size = 128,
validation_split = 0.2
)
plot(history)
model %>% evaluate(x_test, y_test)
y_predicted <- model %>% predict_classes(x_test)
# deal with mismatches
wrong_actual_y <- mnist$test$y[mnist$test$y != y_predicted]
wrong_actual_x <- mnist$test$x[mnist$test$y != y_predicted,,]
wrong_pred_y <- y_predicted[mnist$test$y != y_predicted]
i <- 6
digit <- wrong_actual_x[i,,] #
plot(as.raster(digit, max=255))
print(wrong_actual_y[i])
print(wrong_pred_y[i])