深度学习与R语言

时间:2022-05-02
本文章向大家介绍深度学习与R语言,主要内容包括Tensorflow、Keras、用Keras进行图像分类、Keras的代码片段、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

对于R语言用户来说,深度学习还没有生产级的解决方案(除了MXNET)。这篇文章介绍了R语言的Keras接口,以及如何使用它来执行图像分类。文章结尾会通过提供一些代码片段显示Keras的直观和强大

Tensorflow

去年1月,R语言中的Tensorflow 发布了,它提供了从R语言中获得的Tensorflow API的方法。这是很重要的,因为Tensorflow是最受欢迎的深度学习库。然而,对于大多数R语言用户来说,R语言的Tensorflow接口和R语言并不是很像。下面是训练模型的代码块。

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中训练模型的代码如下:

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:

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)

定义一个简单的卷积神经网络:

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")

增加数据:

augment <- image_data_generator(rescale=1./255,
                               shear_range=0.2,
                               zoom_range=0.2,
                               horizontal_flip=TRUE)

加载预先训练的网络:

model_vgg <- application_vgg16(include_top= FALSE, weights= "imagenet")

保存模型权重:

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/