darch包是建立于Hinton和Salakhutdinov的MATLAB代码之上的,其实现方法包括了对比散度预训练算法和微调算法(如反向传播法或共轭梯度法)。
darch(x, #输入数据矩阵或data.frame(默认)
y #目标数据矩阵或data.frame,依赖于x是矩阵还是data.frame而定
layers=10, #每一层神经元数量
layers是一个向量。默认是c(a,10,b),其中a是训练数据的列数;b是目标的列数。如果这个长度为1,那么它就作为隐藏层神经元的数量,而不是层的数量。
bootstrap.unique表示是否采用特定的样本用于训练(默认为TRUE1),如果取值FALSE,则采用所有样本用于训练。采用所有样本将导致训练开销增大。注意:如果bootstrap.num大于0,bootstrap.unique选项将被忽略。
darch.fineTuneFunction表示微调函数。可能的取值包括backpropag-ation(默认)、rpropagation、minimizeClassifier和minimizeAutoencoder(非监督学习)。
darch.initialMomentum=0.5, #微调阶段的初始动量
darch.isClass=T, #微调阶段输出是否应该被视作类标签
darch.maxout.poolSize=2, #当使用maxout激活函数时,池化的尺寸(maxout)
darch.maxout.unitFunction=linearUnit,#maxout使用的初始值
darch.momentumRampLength=1,
darch.momentumRampLength参数与训练阶段的总体数量有关,即多少个阶段后,动量应该达到darch.finalMomentum?值为1表明应该在最后时期达到darch.finalMo-mentum,值为0.5表明应该在一半的训练完成后达到darch.finalMomentum。注意,如果训练恢复到darch.initialMomentum和darch.finalMomentum相同的参数,这将导致动量坡道中的碰撞。在恢复训练时,可将darch.momentumRampLength设置为0以避免这一问题。
darch.nesterovMomentum=T, #是否使用Nesterov加速
darch.numEpochs=100, #微调的次数
darch.returnBestModel=T, #在训练的最后是否返回最好的模型,而不是在微调后
darch.returnBestModel.validationErrorFactor=1-exp(-1),
当使用验证数据评估模型时,与训练错相比,验证错误应该被赋予多高的值?这个值介于0到1之间。默认情况下,这个值是1-e1。训练误差因素和验证误差因素总会增加到1。因此,如果在这里超过了1,训练误差将会被忽略;如果在这里超过了0,验证误差将会被忽略。
darch.stopClassErr=-Inf, #当分类错误低于该值,训练就停止
darch.stopErr=-Inf, #当错误函数低于该值,训练就会停止
darch.stopValidClassErr=-Inf, #当验证数据上的分类错误低于该值,训练就会停止
darch.stopValidErr=-Inf, #当验证数据上的误差函数的值低于该值,训练就会停止
darch.trainLayers=T, #是否训练所有层
darch.unitFunction=sigmoidUnit,
层1的长度数的层函数或者层向量函数。注意:第一个条目表明层1和层2之间的层函数,也就是层2的输出;层1没有层函数,因为输入值被直接使用。可能的函数包括linearUnit、sigmoidUnit、tanhUnit、rectifiedLinearUnit、softplusUnit、soft-maxUnit和maxoutUnit。
darch.weightDecay=0, #权重衰减系数,默认是0
darch.weightUpdateFunction=weightDecayWeightUpdate,
权重更新函数或者权重向量更新函数darch.weightUpdateFunction与darch.unitFunction非常相似,权重更新函数包括weightDecayWeightUpdate和maxoutWeightUpdate。
注意:maxoutWeightUpdate必须在maxout激活函数之后使用。
dataSet=NULL, #来源于darch.DataSet(),可以手动指定
dataSetValid=NULL, #DataSet包含验证数据的实例
generateWeightsFunction=generateWeightsGlorotUniform,
#层1长度数的权重产生函数或者层向量产生函数
gputools=F, #是否对矩阵乘法使用gputools
gputools.deviceId=0, #指定用于GPU混合乘法使用的设备(www.xing528.com)
logLevel=NULL,
logLevel表示futile.logger日志级别。默认使用当前设定的日志级别,如果没有被改变则是futile.logger::flog.info。其他可能的等级(从最精简到最详细)包括FA-TAL、ERROR、WARN、DEBUG和TRACE。
normalizeWeights=F, #是否归一化权重
normalizeWeightsBound=15, #收益权重向量的L2 norm上界
preProc.factorToNumeric=F, #是否把因子都要转换成数值型
preProc.factorToNumeric.targets=F, #是否所有的因子都要转换成目标数据中的数值型
preProc.fullRank=T, #是否使用满秩编码
preProc.fullRank.targets=F, #是否使用目标数据的满秩编码
preProc.orderedToFactor.targets=T, #目标数据中的有序因子转换成无序因子
注意:有序因子通过dummyVars转换成数值型,而且不再用于分类任务。
preProc.params=F, #传递给preProcess函数的参数列表
preProc.targets=F,
preProc.targets表示是否以目标数据为中心,是否扩展。与preProc.params不同,当预测新数据时,由于这一预处理必须恢复,所以这仅仅是一种用于目标数据使用和关闭的逻辑转换预处理。对于回归任务最有用。
注意:这将使原始网络倾斜。
rbm.allData=F, #是否将训练和验证数据用于预训练
rbm.batchSize=1, #训练块的大小
rbm.consecutive=T,
rbm.consecutive表示是否一次rbm.numEpochs阶段(TRUE,默认)训练一个RBMs或者一阶段交替训练每个RBM(FALSE)。
rbm.errorFunction=mseError,
rbm.errorFunction表示预训练期间的误差函数。这仅仅用于评估RBM误差,不影响训练本身。可能的误差函数包括mseError和rmseError。
rbm.finalMomentum=0.9, #预训练期间的最后动量
rbm.initialMomentum=0.5, #预训练期间的初始动量
rbm.lastLayer=0,
rbm.lastLayer表明在哪一层停止预训练。可能的取值包括0,意味着训练所有层;正整数,意味着RBM中rbm.lastLayer形成可见层之后停止训练;负整数,意味着在来源于顶层RBM的rbm.lastLayer RBM停止训练。
rbm.learnRate=1, #预训练期间的学习速率
rbm.learnRateScale=1, #每个阶段后学习速率将会乘以这个值
rbm.momentumRampLength=1,
rbm.momentumRampLength参数表示多少个与rbm.numEpochs相关阶段后,动量应该达到rbm.finalMomentum?值为1表明rbm.finalMomentum应该在最后阶段达到,值0.5表明rbm.finalMomentum应该在训练完成一半时达到。
【例11.1】训练有效误差测试。
>library(darch)
>data(iris)
>model<-darch(Species~.,iris,darch.errorFunction="crossEntropyError")
运行结果显示如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。