Keras 是一款很不错的深度学习框架,因为把深度学习需要用到的组件都封装更高级,可以很方便自由组合调用,这里贴出中文学习的文档 http://keras-cn.readthedocs.io/en/latest/ , 英文好的童鞋可直接阅读原生态的英文文档。
本来是支持 python 的框架,现在也支持 R , 直接如下命令即可完成安装。
install.packages("Keras")
如果未安装 tensorflow , 可以输入以下这个命令,机器会自动完成安装。
install_keras()
这里可设定method参数来选择安装模式 Installation method (“virtualenv” or “conda”),如果缺失则安装不能完成,tensorflow参数来选择tensorflow的版本,详情可 help(install_keras) ,如果安装过程中有一些底层依赖问题导致安装不成功,那需要解决机器环境问题。我机器是Centos7系统, gcc 4.8.5 , pytho2.7.5的环境。
还是那个最经典的手写识别的例子, 下面以为 R 作为控制语言来训练一个 多层感知器 (MLP), 即最基础的神经网络。
library(keras)
# download 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
x_train <- array_reshape(x_train, c(nrow(x_train), 784))
x_test <- array_reshape(x_test, c(nrow(x_test), 784))
# rescale
x_train <- x_train / 255
x_test <- x_test / 255
# 将分类响应变量转换为 One-hot 格式
y_train <- to_categorical(y_train, 10)
y_test <- to_categorical(y_test, 10)
# 模型定义
model <- keras_model_sequential()
# 这里定义模型的各种层以及相应的激活函数,这里只设置了2个隐藏层和两个dropout
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')
# 定义模型损失函数,优化器,模型评价,这里选择是adam来优化求解模型,
model %>% compile(
loss = 'categorical_crossentropy',
optimizer = optimizer_adam(lr = 1e-04),
metrics = c('accuracy')
)
上表查看模型各个层的shape, 如表所示已经包含参数情况,仅仅是两个隐藏层就包含了20多万的参数。
# 这里开始训练模型,会弹出一个可视化图监控模型loss随着迭代变化情况
history <- model %>% fit(
x_train, y_train,
epochs = 30, batch_size = 128,
validation_split = 0.2
)
# 输出损失函数最终值和最终预测精度
model %>% evaluate(x_test, y_test)
# 模型预测值
model %>% predict_classes(x_test)
上面就是一个完整的3层神经网络(定义了2个隐藏层 + 1个输出层), 代码很简单,与 Python 版的 Keras 建模流程基本一脉相承, 唯一有所不同的就是 R 特有的 %>% 连接函数了,看起来格外亲切了。
loss 是损失函数,val_loss 是验证集下的损失函数(代码中设置的验证集划分是0.2),同理 acc 是准确率,val_acc是验证集下的损失函数。如图示,随着损失的减少,准确率在逐步上升。
最终的得到0.0722 loss 结果和 98% 准确率