首页 理论教育 深度网络包优化算法与性能

深度网络包优化算法与性能

时间:2023-06-28 理论教育 版权反馈
【摘要】:deepnet包实现了一些DNN结构和神经网络相关算法,包括BP、RBM训练、DBN、AE、CNN和RNN算法等。使用deepnet包建立一个传统的反向传播DNN。加载所需的包>library设置变量使用set.seed方法保证程序的可重复性,并将属性变量存储在R对象X中,响应变量存储在R对象Y中。deepnet包允许指定神经元权重和偏差的起始值;将这两个值都设置为NULL,以便算法随机选择它们的值。

深度网络包优化算法与性能

R的伟大之处在于,它有多个估算神经网络模型的包。建议读者使用多种多样的包和学习算法来构建模型。

deepnet包实现了一些DNN结构和神经网络相关算法,包括BP、RBM训练、DBN、AE、CNN和RNN算法等。

【例11.4】使用deepnet包建立一个传统的反向传播DNN。

(1)加载所需的包

>library(deepnet)

(2)设置变量

使用set.seed方法保证程序的可重复性,并将属性变量存储在R对象X中,响应变量存储在R对象Y中。

>set.seed(2016)

>X=data[train,1:9]

>Y=data[train,10]

(3)建立DNN

>fitB<-nn.train(x=X,y=Y,

initW=NULL,

initB=NULL,

hidden=c(10,12,20),

learningrate=0.58,

momentum=0.74,

learningrate_scale=1,

activationfun="sigm", #激活函数

output="linear", #输出神经元使用线性激活函数

numepochs=970,(www.xing528.com)

batchsize=60,

hidden_dropout=0,

visible_dropout=0)

这些语句与以前看到的非常相似,然而,仍旧要逐行地看一下。神经网络存储在R对象fitB中。注意,这里使用语句x=X,y=Y传递属性变量和响应变量。deepnet包允许指定神经元权重(initW)和偏差(initB)的起始值;将这两个值都设置为NULL,以便算法随机选择它们的值。此处的DNN有三个隐藏层,在第一、第二和第三隐藏层中分别具有10、12和20个神经元。

若要使用反向传播算法,必须指定学习率和动量。学习率控制神经网络收敛的速度。简而言之,动量在梯度下降更新中增加了上一梯度的加权平均。它倾向于抑制噪声,特别是在误差函数的高曲率区域中。因此,动量可以帮助网络避免陷入局部最小值。这三个参数一般通过反复试验来设置,学习率、动量和学习率标度分别选择0.58、0.74和1。

接下来的两行指定了隐藏神经元和输出神经元的激活函数。对于隐藏神经元使用逻辑函数sigm;其他选项则包括linear或tanh。对于输出神经元使用线性激活函数,其他选项则包括sigm和softmax。该模型迭代超过970次,每次块的大小为60。在输入层或隐藏层没有Dropout神经元。

(4)模型部署

>Xtest<-data[-train,1:9]

>predB<-nn.predict(fitB,Xtest)

性能指标计算如下:

<round(cor(predB,data[-train,10])^2,6)

[,1]

[1,]0.930665

>mse(data[-train,10],predB)

[1]0.08525447959

>rmse(data[-train,10],predB)

[1]0.2919836975

总的来说,使用deepnet包构建模型的过程与使用神经网络包的过程非常相似。这是使用R的最大的优点,包通常以类似的方式工作(当然要指定的参数可能有所不同)。这种灵活性可以使我们能够使用各种不同的学习算法和调整参数来快速构建类似的DNN模型。

DNN常常具有相同的拓扑,但是不同的学习算法或调整参数将在相同的底层数据上以不同的方式执行。还有重要一点不能忘记,选择最佳DNN模型的过程需要选择拓扑、神经元、层数、学习算法和调整参数,这使得模型的组合相当复杂。尽管如此,已经看到,强大的DNN模型可以在R中被快速构建、训练和测试。这能够使得它在图像、声音和信号处理等传统领域之外的各学科的使用异常繁荣。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈