首页 > 人工智能 > 在R中使用Keras和TensorFlow开始深入学习

[悬赏]在R中使用Keras和TensorFlow开始深入学习 (已翻译100%)

查看 (351次)
英文原文:Getting started with Deep Learning using Keras and TensorFlow in R
标签: 人工智能
admin 发布于 2017-06-26 10:59:06 (共 7 段, 本文赏金: 12元)
参与翻译(1人): lh_lihuinihao 默认 | 原文

【已悬赏】 赏金: 3元

简介

在R和Python之间进行选择一直是个有争议的话题。机器学习世界被划分为偏爱一种语言而不是另一种语言。但是随着深度学习的爆发,这种平衡转向了Python,因为它有大量的深度学习库和框架。

我个人从R转向Python仅仅是因为我想深入的研究深度学习领域,但R无法做到。但现在有了转机!

随着 基于R的Keras库的发布, 这场争斗又回到了中心。 Python 正在慢慢的成为深度学习模型的事实语言。但是随着 采用R基于tensorflow (CPU 和 GPU 兼容)的Keras 库的发布, R将再次为领奖台而战Python 尤其在深度学习领域。

以下我们将展示如何安装R语言环境下的基于Tensorflow的 Keras 库,并采用RStudio,在经典的MNIST数据集上构建一个神经网络模型。

lh_lihuinihao
翻译于 2017-06-29 17:35:54
 

参与本段翻译用户:
lh_lihuinihao

显示原文内容

【已悬赏】 赏金: 1元

目录

  1. 安装基于tensorflow 的Keras库.
  2. 使用Keras构建不同类型的模型
  3. 使用 MLP 分类MNIST手写数字
  4. 同Python中的等效代码在MNIST执行结果做对比
  5. 总结
lh_lihuinihao
翻译于 2017-06-29 17:45:48
 

参与本段翻译用户:
lh_lihuinihao

显示原文内容

【已悬赏】 赏金: 3元

1. 安装基于tensorflow的Keras库

在 RStudio 中安装 Keras 的步骤非常简单。 只要按照以下步骤,您就可以使用R语言构建你的第一个神经网络模型。

install.packages("devtools")

devtools::install_github("rstudio/keras")

以上步骤将会从Github仓库安装keras 库. 现在让我们 在R中加载keras 并安装 tensorflow。

library(keras)

默认情况下 RStudio 加载 CPU 版本的 tensorflow。以下命令可以下载 CPU版本的 tensorflow。

install_tensorflow()

安装GPU版本的 tensorflow , 执行以下命令:

nstall_tensorflow(gpu=TRUE)

对于多用户安装, 参考 安装指南

现在我们已经在RStudio内安装了 keras 和 tensorflow, 让我们开始在MNIST数据集上构建我们的第一个神经网络项目。

lh_lihuinihao
翻译于 2017-06-29 17:56:02
 

参与本段翻译用户:
lh_lihuinihao

显示原文内容

【已悬赏】 赏金: 1元

2. 使用Keras构建不同类型的模型

以下列表为R中使用Keras可以构建的模型。

  1. 多层感知器
  2. 卷积神经网络
  3. 递归神经网络
  4. Skip-Gram 模型
  5. 使用诸如 VGG16, RESNET 等的预训练模型.
  6. 微调预训练模型.

让我们先从构建一个非常简单的模型,使用一个隐藏层分类手写数字。

lh_lihuinihao
翻译于 2017-06-29 18:04:50
 

参与本段翻译用户:
lh_lihuinihao

显示原文内容

【已悬赏】 赏金: 1元

3. 使用MLP分类 MNIST 手写数字

#加载 keras 库
library(keras)

#加载keras中 内置的 mnist 数据集
data<-dataset_mnist()

#分离训练和测试文件
train_x<-data$train$x
train_y<-data$train$y
test_x<-data$test$x
test_y<-data$test$y

rm(data)

# converting a 2D array into a 1D array for feeding into the MLP and normalising the matrix
train_x <- array(train_x, dim = c(dim(train_x)[1], prod(dim(train_x)[-1]))) / 255
test_x <- array(test_x, dim = c(dim(test_x)[1], prod(dim(test_x)[-1]))) / 255

#converting the target variable to once hot encoded vectors using keras inbuilt function
train_y<-to_categorical(train_y,10)
test_y<-to_categorical(test_y,10)

#defining a keras sequential model
model <- keras_model_sequential()

#defining the model with 1 input layer[784 neurons], 1 hidden layer[784 neurons] with dropout rate 0.4 and 1 output layer[10 neurons]
#i.e number of digits from 0 to 9

model %>% 
layer_dense(units = 784, input_shape = 784) %>% 
layer_dropout(rate=0.4)%>%
layer_activation(activation = 'relu') %>% 
layer_dense(units = 10) %>% 
layer_activation(activation = 'softmax')

#compiling the defined model with metric = accuracy and optimiser as adam.
model %>% compile(
loss = 'categorical_crossentropy',
optimizer = 'adam',
metrics = c('accuracy')
)

#fitting the model on the training dataset
model %>% fit(train_x, train_y, epochs = 100, batch_size = 128)

#Evaluating model on the cross validation dataset
loss_and_metrics <- model %>% evaluate(test_x, test_y, batch_size = 128)


以上代码可以达到 99.14 的训练精度和 96.89的检验精度。 代码运行在我的 i5 处理器采用单线程运行13.5秒而在TITANx GPU上, 检验精度为 98.44 平均花费2秒。

lh_lihuinihao
翻译于 2017-06-29 18:19:20
 

参与本段翻译用户:
lh_lihuinihao

显示原文内容

【已悬赏】 赏金: 1元

4. MLP 使用 keras – R vs Python

为了进行比较, 我也在Python上实现了上述MNIST问题。 以下为等价的 python 代码。

#importing the required libraries for the MLP model
import keras
from keras.models import Sequential
import numpy as np

#loading the MNIST dataset from keras
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

#reshaping the x_train, y_train, x_test and y_test to conform to MLP input and output dimensions
x_train=np.reshape(x_train,(x_train.shape[0],-1))/255
x_test=np.reshape(x_test,(x_test.shape[0],-1))/255

import pandas as pd
y_train=pd.get_dummies(y_train)
y_test=pd.get_dummies(y_test)

#performing one-hot encoding on target variables for train and test
y_train=np.array(y_train)
y_test=np.array(y_test)

#defining model with one input layer[784 neurons], 1 hidden layer[784 neurons] with dropout rate 0.4 and 1 output layer [10 #neurons]
model=Sequential()

from keras.layers import Dense

model.add(Dense(784, input_dim=784, activation='relu'))
keras.layers.core.Dropout(rate=0.4)
model.add(Dense(10,input_dim=784,activation='softmax'))

# compiling model using adam optimiser and accuracy as metric
model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=['accuracy'])
# fitting model and performing validation

model.fit(x_train,y_train,epochs=50,batch_size=128,validation_data=(x_test,y_test))


以上代码在相同的GPU上可以得到98.42的检验精度。因此 , 正如我们最初的猜测, 结果相同.

lh_lihuinihao
翻译于 2017-06-29 18:26:09
 

参与本段翻译用户:
lh_lihuinihao

显示原文内容

【已悬赏】 赏金: 2元

5. 总结

如果这是你在R中的第一个深度学习模型, 我希望你会喜欢上它。 编写非常简单的代码, 你就能够分类手写数字并达到98% 准确率。  这应该足以让你开始深度学习的动机。

如果你已经采用Python 在keras库上进行深度学习, 那么你将会发现R中的keras库的语法和结构要同Python中非常相似。事实上, R环境下的 keras 包会创建一个conda 环境,并安装运行keras所需的依赖库。但是,现在我更兴奋的是数据科学家采用R正构建真实生活深度学习模型。事实上,竞争本不该停止。我还想听听你对R这个新发展的看法,请随意评论。

lh_lihuinihao
翻译于 2017-06-29 18:40:05
 

参与本段翻译用户:
lh_lihuinihao

显示原文内容

GMT+8, 2018-10-16 07:15 , Processed in 0.044728 second(s), 11 queries .