对于R语言用户来说,深度学习还没有生产级的解决方案(除了MXNET)。这篇文章介绍了R语言的Keras接口,以及如何使用它来执行图像分类。文章结尾会通过提供一些代码片段显示Keras的直观和强大
Tensorflow
去年1月,R语言中的Tensorflow 发布了,它提供了从R语言中获得的Tensorflow API的方法。这是很重要的,因为Tensorflow是最受欢迎的深度学习库。然而,对于大多数R语言用户来说,R语言的Tensorflow接口和R语言并不是很像。下面是训练模型的代码块。
代码语言:js复制cross_entropy <- tf$reduce_mean(-tf$reduce_sum(y_* tf$log(y_conv), reduction_indices=1L))
train_step <- tf$train$AdamOptimizer(1e-4)$minimize(cross_entropy)
correct_prediction <- tf$equal(tf$argmax(y_conv,1L), tf$argmax(y_,1L))
accuracy <- tf$reduce_mean(tf$cast(correct_prediction, tf$float32))
sess$run(tf$global_variables_initializer())
for (iin 1:20000) {
batch <- mnist$train$next_batch(50L)
if (i%% 100 == 0) {
train_accuracy <- accuracy$eval(feed_dict= dict(
x= batch[[1]], y_= batch[[2]], keep_prob= 1.0))
cat(sprintf("step %d, training accuracy %gn", i, train_accuracy))
}
train_step$run(feed_dict= dict(
x= batch[[1]], y_= batch[[2]], keep_prob= 0.5))
}
test_accuracy <- accuracy$eval(feed_dict= dict(
x= mnist$test$images, y_= mnist$test$labels, keep_prob= 1.0))
cat(sprintf("test accuracy %g", test_accuracy))
除非你熟悉Tensorflow,,否则你可能不清楚发生了什么。Github的快速搜索发现使用tensorflow为R语言提供的代码不到100个。
Keras
所有这一切都将随着Keras和R语言而改变。
Keras是一个用于实验的高级神经网络API,可以在Tensorflow上运行。Keras是科学家们喜欢使用的数据。Keras越来越受欢迎,并在越来越多的平台上得到支持,包括Tensorflow,CNTK,Apple的CoreML,Theano。在深度学习中越来越重要。
举一个简单的例子,在Keras中训练模型的代码如下:
代码语言:js复制model_top%>% fit(
x= train_x, y= train_y,
epochs=epochs,
batch_size=batch_size,
validation_data=valid)
用Keras进行图像分类
让我告诉你如何使用R语言、Keras和Tensorflow构建深度学习模型。你会发现一个Github repo在https://github.com/rajshah4/image_keras/,其中包含你需要的代码和数据。通过R notebook(和Python notebooks)构建一个图像分类器,可以很容易地应用到其他图像上。用于构建深度学习工作的高级方法包括:
增加的数据
使用预先训练的网络的瓶颈特征
对预先训练的网络顶层进行微调
保存模型的权重
Keras的代码片段
Keras的R语言接口确实可以很容易地在R语言中构建深度学习模型,这里有基于构建图像分类器一些代码片段,以说明R语言中Keras的直观和有用
加载folder:
代码语言:js复制train_generator <- flow_images_from_directory(train_directory, generator= image_data_generator(), target_size= c(img_width, img_height), color_mode= "rgb",
class_mode= "binary", batch_size= batch_size, shuffle= TRUE,
seed= 123)
定义一个简单的卷积神经网络:
代码语言:js复制model <- keras_model_sequential()
model%>%
layer_conv_2d(filter = 32, kernel_size= c(3,3), input_shape= c(img_width, img_height,3))%>%
layer_activation("relu")%>%
layer_max_pooling_2d(pool_size= c(2,2))%>%
layer_conv_2d(filter = 32, kernel_size= c(3,3))%>%
layer_activation("relu")%>%
layer_max_pooling_2d(pool_size= c(2,2))%>%
layer_conv_2d(filter = 64, kernel_size= c(3,3))%>%
layer_activation("relu")%>%
layer_max_pooling_2d(pool_size= c(2,2))%>%
layer_flatten()%>%
layer_dense(64)%>%
layer_activation("relu")%>%
layer_dropout(0.5)%>%
layer_dense(1)%>%
layer_activation("sigmoid")
增加数据:
代码语言:js复制augment <- image_data_generator(rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=TRUE)
加载预先训练的网络:
代码语言:javascript复制model_vgg <- application_vgg16(include_top= FALSE, weights= "imagenet")
保存模型权重:
代码语言:javascript复制save_model_weights_hdf5(model_ft,'finetuning_30epochs_vggR.h5', overwrite= TRUE)
R语言中的Keras接口使R语言用户更容易构建和细化深度学习模型。不再强迫使用Python构建、精炼和测试深度学习模型。这应该向对使用python有点担心的受众开放。
首先,您可以应用我的repo,启动RStudio(或者您选择的IDE),然后使用Keras构建一个简单的分类器。
本文为编译文章,作者Rajiv Shah,原网址为
http://projects.rajivshah.com/blog/2017/06/04/deeplearningR/