前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习与R语言

深度学习与R语言

作者头像
AiTechYun
发布2018-03-02 16:22:49
1.6K0
发布2018-03-02 16:22:49
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号

对于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 %g\n", 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/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Tensorflow
  • Keras
  • 用Keras进行图像分类
  • Keras的代码片段
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档