专栏首页大数据具有mxnetR的前馈神经网络

具有mxnetR的前馈神经网络

mxnetR是一个深度学习软件包,可与所有深度学习类型一起使用,包括前馈神经网络(FNN)。FNN具有隐藏层的简单处理单元。

这是我们的深度学习系列的第三部分。本系列的第一本是“深入深度学习”,重点介绍深度学习的基础知识。第二个是使用H2O Deep Learning软件包作为自动编码器来创建一个异常检测器

在这篇文章中,我们将向您介绍前馈神经网络。本部分将重点讨论mxnetR,这是一个开放源代码的深度学习软件包,可与所有深度学习类型一起使用:前馈神经网络(FNN),卷积神经网络(CNN)和递归神经网络(RNN)。

前馈神经网络

为了从一个正式的定义开始,一个前馈神经网络(即一个多层感知器或MLP)由大量简单的处理单元组成,这些处理单元称为以多个隐藏层组织的感知器。

重申一下我在前一篇文章中所描述的内容。

输入层由接受输入值的神经元组成。这些神经元的输出与输入预测器相同。

输出层是神经网络的最后一层,将结果返回给用户环境。基于神经网络的设计,它也表示以前的层次在学习资讯方面有何表现,并据此改善功能。

隐藏的图层位于输入图层和输出图层之间。通常,隐藏层的数量从一个到多个不等。这些中央计算层具有将输入映射到节点输出的功能。

我们可以说感知器是人工神经网络的基本处理单元。感知器需要几个输入并产生一个输出,如下图所示。

通常,这些感知器的输入与权重相关。感知器计算输入的加权和并对其应用特定的函数。这个功能被称为激活或传递函数。传递函数使用数学函数将求和输出的结果转换为工作输出。

大多数情况下,传递函数是微分函数,可以连续纠错并计算局部梯度(如Sigmoid函数或tanh函数)。这类似于输出所有输出类别概率的真实神经元。但是,它们通常也可以是基于某个阈值将输出设置在两个级别的阶梯函数。线性单位也有第三类,其中输出与总加权输出成正比。维基百科有一个完整的激活功能列表

神经网络的最好的部分是神经元能适应从错误中学习并改善其结果。各种方法被纳入神经网络,使其具备适应性。最常用的是Delta规则(Delta rule)和误差反向传播算法(back error propagation)。前者用于前馈网络,基于梯度下降学习,后者用于反馈网络,如递归神经网络。

在我的书Data Science Using Oracle Data Miner and Oracle R Enterprise(由Apress出版)中,我已经介绍了更多关于神经网络的内容。

从MXNet开始使用R

如前所述,MXNet是包含前馈神经网络(FNN),卷积神经网络(CNN)和递归神经网络(RNN)的深度神经网络。使用MXNet的CNN和RNN是未来文章讨论的一部分。

MXNet R软件包为R提供了灵活高效的GPU计算和最先进的深度学习。虽然我们使用R来演示MXNet,但它也得到Python,Julia,C ++和Scala等其他语言的支持。所以,如果你对R不感兴趣,可以用你最喜欢的编程语言来尝试这个例子。

R中的MXNet安装非常直接。您可以直接在R环境中运行以下脚本进行设置。

# Installation
 install.packages("drat", repos="https://cran.rstudio.com")
 drat:::addRepo("dmlc")
 install.packages("mxnet")

但是,对于Windows 7用户,DiagrammeR的其中一个组件存在版本问题。您可以使用以下命令将其降级到v 0.8.1。如果遇到任何其他问题,MXNet网站会列出常见的安装问题。

install_version("DiagrammeR", version = "0.8.1", repos = "http://cran.us.r-project.org")

使用MXNet创建深度学习模型

我们都准备在R中探索MXNet。我正在使用Kaggle的HR分析数据集进行演示。数据集是大约14,999行的小样本。学习如何使用MXNet构建前馈网络后,你可以使用其他数据集进行试用。我们在本文中的目的是帮助您了解和使用MXNet。

library(mxnet)
hr_data <- read.csv("F:/git/deep_learning/mxnet/hrdata/HR.csv")
head(hr_data)
str(hr_data)
summary(hr_data)

接下来,我们将执行一些必要的数据预处理,并将数据划分为训练集和测试集。训练数据集将用于训练模型和测试数据集,以验证新训练模型的准确性。

#将一些变量转换为因素
 hr_data$sales<-as.factor(hr_data$sales)
 hr_data$salary<-as.factor(hr_data$salary)
 hr_data$Work_accident <-as.factor(hr_data$Work_accident)
 hr_data$promotion_last_5years <-as.factor(hr_data$promotion_last_5years)
 smp_size <- floor(0.70 * nrow(hr_data))
## 设置种子,使您的分区变成可被复制的
 set.seed(1)
 train_ind <- sample(seq_len(nrow(hr_data)), size = smp_size)
 train <- hr_data[train_ind, ]
 test <- hr_data[-train_ind, ]
 train.preds <- data.matrix(train[,! colnames(hr_data) %in% c("left")])
 train.target <- train$left
 head(train.preds)
 head(train.target)
 test.preds <- data.matrix(test[,! colnames(hr_data) %in% c("left")])
 test.target <- test$left
 head(test.preds)
 head(test.target)

要创建一个前馈网络,您可以直接使用mx.mlp,这是一个方便的用来创建多层感知器的界面。参数描述在每个使用的参数的注释中。

#设置种子来重现结果
 mx.set.seed(1)
  mlpmodel <- mx.mlp(data = train.preds
   ,label = train.target
   ,hidden_node = c(3,2) #2层——第1、2层分别3、2个节点
   ,out_node = 2 #设置输出节点的数量
   ,activation="sigmoid" #隐藏层的激活函数
   ,out_activation = "softmax" 
   ,num.round = 10 #迭代次数
   ,array.batch.size = 5 #更新权重批量大小
   ,learning.rate = 0.03 #和步长相同
   ,eval.metric= mx.metric.accuracy
   ,eval.data = list(data = test.preds, label = test.target))

一旦训练完成,您可以使用预测方法对测试数据集进行预测:

#做出预测
 preds <- predict(mlpmodel, test.x)
 dim(preds)

函数mx.mlp()本质上是使用MXNet定义神经网络的更灵活但冗长的符号系统的替代品。该符号是MXNet中的构件块神经网络。它是一种功能对象,可以接受多个输入变量并产生多个输出变量。各个符号可以堆叠在一起以产生复杂的符号。这有助于形成具有各层的复杂神经网络,每层被定义为彼此堆叠的单个符号。

符号定义中前一个网络的等价物将是:

#配置网络结构
 data <- mx.symbol.Variable("data")
 fc1 <- mx.symbol.FullyConnected(data, name = "fc1", num_hidden=3) #first hidden layer with activation function sigmoid
 act1 <- mx.symbol.Activation(fc1, name = "sig", act_type="sigmoid") 
 fc2 <- mx.symbol.FullyConnected(act1, name = "fc2", num_hidden=2) #second hidden layer with activation function relu
 act2 <- mx.symbol.Activation(fc2, name = "relu", act_type="relu") 
 out <- mx.symbol.SoftmaxOutput(act2, name = "soft")
#训练网络
 dp_model <- mx.model.FeedForward.create(symbol = out
  ,X = train.preds
  ,y = train.target
  ,ctx = mx.cpu()
  ,num.round = 10
  ,eval.metric = mx.metric.accuracy
  ,array.batch.size = 50
  ,learning.rate = 0.005
  ,eval.data = list(data = test.preds, label = test.target))

这种类型的配置可以灵活地为多个隐藏层配置具有不同参数的网络。例如,我们可以使用第1层的sigmoid激活函数,第2层使用ReLu(Rectified Linear Units)激活函数,等等。

你也可以通过使用下面的代码片段来可视化地检查创建的神经网络:

graph.viz(mlpmodel$symbol$as.json())

计算图显示了定义的神经网络的结构。我们可以看到第一个带有三个节点和sigmoid激活函数的隐藏层,第二个隐藏层带有两个节点和Relu激活函数,最后的输出带有softmax函数。

最后,我们可以使用相同的预测应用程序编程接口(API)来创建预测,并创建一个混淆矩阵来确定新数据集上预测的准确性。

#做出预测
preds <- predict(dp_model, test.preds)
preds.target <- apply(data.frame(preds[1,]), 1, function(x) {ifelse(x >0.5, 1, 0)})
table(test.target,preds.target)

你可以从我的GitHub页面上下载代码,也可以学习MXNet的优秀教程,因为我们在MXNet上有更多关于创建CNN和RNN的文章。

原文链接:https://dzone.com/articles/feed-forward-neural-network-with-mxnetr

原文作者:Sibanjan Das

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 想知道深度学习如何工作?这里让你快速入门!

    最近更新时间 2017年11月8日 14:58:51

    人工智能资讯小编
  • Scrapy 爬虫框架入门案例详解

    本篇会通过介绍一个简单的项目,走一遍Scrapy抓取流程,通过这个过程,可以对Scrapy对基本用法和原理有大体的了解,作为入门。

    崔庆才
  • 基于深度学习的图像真实风格迁移

    本文详细讲解论文“ Deep Photo Style Transfer ”算法原理与实现和该模型优于之前相关模型的关键之处。

    蒋心为
  • CNN网络介绍与实践:王者荣耀英雄图片识别

    本文主要是对CS231n课程学习笔记的提炼,添加了一些Deep Learning Book和Tensorflow 实战,以及Caffe框架的知识。

    旺仔小小鹿
  • 使用腾讯云 GPU 学习深度学习系列之一:传统机器学习的回顾

    本文主要回顾了传统机器学习的主要思想,并基于传统机器学习的内容引入了深度学习部分。

    集智
  • 深度学习入门实战(二):用TensorFlow训练线性回归

    上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能是要看源代码才能理解某个方法的含义,所以今天我们就介绍一下 Te...

    serena
  • 神经网络大发现:一种模仿大脑遗忘机制的新型智能材料

    受到人类健忘的启发 - 我们的大脑是如何放弃不必要的数据来为新信息腾出空间 - 科学家们最近进行了一项研究,将一种可以实现逐渐遗忘的物质的超级计算机模拟图和它的...

    全球资讯翻译官
  • 深度学习与强化学习

    随着 DeepMind 公司的崛起,深度学习和强化学习已经成为了人工智能领域的热门研究方向。除了众所周知的 AlphaGo 之外,DeepMind 之前已经使用...

    张戎
  • 当深度学习遇见自动文本摘要

    随着近几年文本信息的爆发式增长,人们每天能接触到海量的文本信息,从大量文本信息中提取重要的内容,已成为我们的一个迫切需求。

    云加社区专栏
  • 深度学习入门实战(一):像Prisma一样算法生成梵高风格画像

    现在人工智能是个大热点,而人工智能离不开机器学习,机器学习中深度学习又是比较热门的方向,本系列文章就从实战出发,介绍下如何使用MXnet进行深度学习~

    serena

扫码关注云+社区

领取腾讯云代金券