利用R语言深度学习框架实现多分类。写这篇博客的意义在于,多分类问题都可以用这篇文章中的代码进行实现
library(keras)
# generate dummy data
x_train <- matrix(runif(1000*20), nrow = 1000, ncol = 20)
y_train <- runif(1000, min = 0, max = 9) %>%
round() %>%
matrix(nrow = 1000, ncol = 1) %>%
to_categorical(num_classes = 10)
x_test <- matrix(runif(100*20), nrow = 100, ncol = 20)
y_test <- runif(100, min = 0, max = 9) %>%
round() %>%
matrix(nrow = 100, ncol = 1) %>%
to_categorical(num_classes = 10)
# create model
model <- keras_model_sequential()
# define and compile the model
model %>%
layer_dense(units = 64, activation = 'relu', input_shape = c(20)) %>%
layer_dropout(rate = 0.5) %>%
layer_dense(units = 64, activation = 'relu') %>%
layer_dropout(rate = 0.5) %>%
layer_dense(units = 10, activation = 'softmax') %>%
compile(
loss = 'categorical_crossentropy',
optimizer = optimizer_sgd(lr = 0.01, decay = 1e-6, momentum = 0.9, nesterov = TRUE),
metrics = c('accuracy')
)
# train
model %>% fit(x_train, y_train, epochs = 20, batch_size = 128)
# evaluate
score <- model %>% evaluate(x_test, y_test, batch_size = 128)
p <- model %>% predict_classes(x_test)
这里有几点说明:
- 在R语言深度学习框架中,二维数据结构全部用矩阵。
- 要对离散变量进行重编码
- 本文的数据全部是随机生成的
深度学习的构建有几个关键点:
- 定义网络结构,有多少的输入,节点有多少个,有多少层,用什么激活函数,这些对于不同的数据有不同的答案,目前用于机器学习的领域图像,音频,对应的是三维数据,四维数据,不同的数据类型对网络的定义是不同的。
- 编译模型,模型的结构定义好了之后,就需要进行求解参数,这包括定义损失函数,定义最优化的方法,定义评判标准。
- 训练模型