涛哥文集(29):Keras的R接口

Keras是开发的高级神经网络API,其重点是实现快速实验。能够以最小的延迟将想法付诸实践是进行良好研究的关键。 Keras具有以下主要功能:

  • 允许相同的代码无缝地在CPU或GPU上运行。
  • 用户友好的API,可轻松快速实现深度学习模型的原型。
  • 内置支持卷积网络(用于计算机视觉),循环网络(用于序列处理)以及二者的任意组合。
  • 支持任意网络架构:多输入或多输出模型,层共享,模型共享等。这意味着Keras基本上适合构建从内存网络到神经图灵机的任何深度学习模型。
  • 能够在多个后端(包括TensorFlow,CNTK或Theano)上运行。

有关该项目的更多信息,请参见Keras主网站。该网站提供有关Keras的R接口的文档。网址为https://keras.io。

入门

安装

首先,从GitHub安装keras R软件包,如下所示:

<code>devtools :: install_github(“rstudio / keras”)/<code>

默认情况下,Keras R接口使用TensorFlow后端引擎。要安装核心Keras库和TensorFlow后端,请使用install_keras()函数:

<code>library(keras)
install_keras()/<code>

这将为您提供Keras和TensorFlow的基于CPU的默认安装。 如果您想进行更多定制的安装,例如 如果要利用NVIDIA GPU,请参阅install_keras()的文档。

学习Keras

下面,我们通过一个简单的示例使用Keras从MNIST数据集中识别手写数字。 熟悉基础知识后,请查看本网站上可用的教程和其他学习资源。

FrançoisChollet(Keras的创建者)的《R深度学习》一书对Keras以及深度学习的概念和实践进行了更全面的介绍。

您可能还会发现下载带有Keras的深度学习备忘单很方便,这是对Keras所有功能的快速高级参考。

MNIST示例

我们可以通过简单的示例来学习Keras的基础知识:从MNIST数据集中识别手写数字。 MNIST由28*28手写数字的灰度图像组成,如下所示:

涛哥文集(29):Keras的R接口

数据集还包括每个图像的标签,告诉我们它是哪个数字。 例如,以上图像的标签为5、0、4和1。

准备数据

MNIST数据集包含在Keras中,并且可以使用dataset_mnist()函数进行访问。 在这里,我们加载数据集,然后为我们的测试和训练数据创建变量:

<code>library(keras)
mnist /<code>

x数据是灰度值的3维数组(图像,宽度,高度)。 为了准备训练数据,我们通过将宽度和高度重塑为一个维度来将3维数组转换为矩阵(将28x28图像展平为长度784个向量)。 然后,我们将灰度值从0到255之间的整数转换为0到1之间的浮点值:

<code># reshape
x_train /<code>

请注意,我们使用array_reshape()函数而不是dim

y数据是一个整数矢量,其值的范围从0到9。为了准备训练数据,我们使用Keras to_categorical()函数将这些矢量一元编码为二进制类矩阵:

<code>y_train /<code> 

定义模型

Keras的核心数据结构是一个模型,是组织层的一种方式。最简单的模型类型是顺序模型,即层的线性堆栈。

我们首先创建一个顺序模型,然后使用管道(%>%)运算符添加层:

<code>model % 
  layer_dense(units = 256, activation = 'relu', input_shape = c(784)) %>% 
  layer_dropout(rate = 0.4) %>% 
  layer_dense(units = 128, activation = 'relu') %>%
  layer_dropout(rate = 0.3) %>%
  layer_dense(units = 10, activation = 'softmax')/<code>

第一层的input_shape参数指定输入数据的形状(代表灰度图像的长度784的数字矢量)。 最后一层使用softmax激活函数输出长度为10的数字矢量(每个数字的概率)。

使用summary()函数可打印模型的详细信息:

<code>summary(model)/<code>
涛哥文集(29):Keras的R接口

接下来,使用适当的损失函数,优化器和指标来编译模型:

<code>model %>% compile(
  loss = 'categorical_crossentropy',
  optimizer = optimizer_rmsprop(),
  metrics = c('accuracy')
)/<code>

训练与评估

使用fit()函数可以使用每批128个图像30个epochs的规模来训练模型:

<code>history % fit(
  x_train, y_train, 
  epochs = 30, batch_size = 128, 
  validation_split = 0.2
)/<code>

fit()返回的历史记录对象包括损失和准确性指标,我们可以绘制它们:

<code>plot(history)/<code>
涛哥文集(29):Keras的R接口

根据测试数据评估模型的性能:

<code>model %>% evaluate(x_test, y_test)
$loss
[1] 0.1149
$acc
[1]0.9807/<code>

生成关于新数据的预测:

<code>model %>% predict_classes(x_test)/<code>
涛哥文集(29):Keras的R接口

Keras为构建深度学习模型提供了简单,优雅和直观的词汇。 建立问题回答系统,图像分类模型,神经图灵机或任何其他模型同样简单。

书籍Deep Learning with R

如果您想对Keras以及深度学习的概念和实践进行更全面的介绍,我们建议您从Manning那里获得Deep Learning with R这本书。 这本书是Keras的创作者FrançoisChollet与J.J. Allaire,他为Keras编写了R接口。需要的同志可以私信我,留下邮箱。

该书假定没有任何有关机器学习和深度学习的知识,并且从基础理论一直到高级实际应用,并且都使用了与Keras的R接口。

为什么叫Keras?

Keras(κέρας)在希腊语中是指号角。它是对古希腊和拉丁文学作品中的文学意象的参考,最早出现在奥德赛,梦中的精神(奥涅罗伊,奇异的奥涅罗伊斯)被划分为那些用虚假的眼神欺骗人,通过象牙门到达地球的人,以及那些宣布将要过去的未来的人们,他们是通过号角之门到达的。这是关于κέρας(角)/κραίνω(充填)和ἐλέφας(象牙)/ἐλεφαίρομαι(欺骗)的戏剧。

Keras最初是作为ONEIROS(开放式神经电子智能机器人操作系统)项目研究工作的一部分而开发的。

“ Oneiroi超出了我们的解释范围,谁能确定他们讲的是什么故事?并非所有男人想要的东西都成为现实。那里有两个大门可以通向转瞬即逝的奥尼罗伊;一种是由牛角制成,一种是象牙制成。穿过锯齿象牙的奥涅罗伊人是骗人的,带有无法实现的信息。那些从打磨的角出来的人背后有真理,要为看见它们的人成就。”荷马·奥德赛19.562 ff(Shewring翻译)。


分享到:


相關文章: