R语言中的深度学习:Keras与TensorFlow

深度学习领域,Python因其丰富的库和框架而长期占据主导地位。然而,随着Keras在R语言中的引入,这一局面开始发生变化。本文将探讨如何在R中安装和使用Keras,并构建第一个神经网络模型,以MNIST数据集为例,展示手写数字的识别过程。

目录

  • 在R中安装Keras及其TensorFlow后端
  • 使用Keras在R中构建的不同类型模型
  • 使用MLP在R中对MNIST手写数字进行分类
  • 将MNIST结果与Python代码进行比较
  • 结束语

在R中安装Keras及其TensorFlow后端

在RStudio中安装Keras非常简单,只需遵循以下步骤即可开始在R中构建神经网络模型。

install.packages("devtools") devtools::install_github("rstudio/keras")

上述步骤将从GitHub仓库加载keras库。接下来,将加载keras到R中并安装TensorFlow

library(keras) install_tensorflow()

默认情况下,RStudio加载TensorFlow的CPU版本。使用以下命令下载TensorFlow的CPU版本。

install_tensorflow()

对于需要GPU支持的单用户/桌面系统,使用以下命令安装TensorFlow版本。

install_tensorflow(gpu=TRUE)

对于多用户安装,请参考。

使用Keras在R中构建的不同类型模型

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

  • 多层感知器(Multi-Layer Perceptrons)
  • 卷积神经网络(Convoluted Neural Networks)
  • 递归神经网络(Recurrent Neural Networks)
  • Skip-Gram模型
  • 使用预训练模型,如VGG16、RESNET等
  • 微调预训练模型

将从构建一个简单的MLP模型开始,该模型仅使用一个隐藏层来尝试分类手写数字。

使用MLP在R中对MNIST手写数字进行分类

# 加载keras库

library(keras) 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) 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 train_y <- to_categorical(train_y, 10) test_y <- to_categorical(test_y, 10)

# 定义keras顺序模型

model <- keras_model_sequential() 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')

# 编译定义的模型,使用准确度作为度量标准,优化器为adam。

model %>% compile( loss = 'categorical_crossentropy', optimizer = 'adam', metrics = c('accuracy') )

# 在训练数据集上拟合模型

model %>% fit(train_x, train_y, epochs = 100, batch_size = 128)

# 在交叉验证数据集上评估模型

loss_and_metrics <- model %>% evaluate(test_x, test_y, batch_size = 128)

上述代码在训练集上的准确度为99.14%,在验证集上的准确度为96.89%。代码在i5处理器上运行,每个epoch大约需要13.5秒,而在TITANx GPU上,验证准确度为98.44%,平均每个epoch需要2秒。

import keras from keras.models import Sequential import numpy as np from keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() 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) y_train = np.array(y_train) y_test = np.array(y_test) model = Sequential() from keras.layers import Dense model.add(Dense(784, input_dim=784, activation='relu')) model.add(keras.layers.core.Dropout(rate=0.4)) model.add(Dense(10, input_dim=784, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=['accuracy']) model.fit(x_train, y_train, epochs=50, batch_size=128, validation_data=(x_test, y_test))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485