由于深度学习参数较多, 用脚本直接指定参数的方式比较麻烦. 从Angel 2.0开始支持用Json文件指定模型参数(注:系统参数仍用脚本配置), 目前Json文件有两个用途:
可用Json文件配置的参数主要有:
下面一一介绍
一个完全的数据配置如下:
"data": {
"format": "dummy",
"indexrange": 148,
"numfield": 13,
"validateratio": 0.1,
"sampleratio": 0.2,
"useshuffle": true,
"translabel": "NoTrans",
"posnegratio": 0.01
}
下面对照说明:
Json key | 对应配置项 | 说明 |
---|---|---|
format | ml.data.type | 输入数据的格式, 有dense, dummy, libsvm三种选择, 默认为dummy |
indexrange | ml.feature.index.range | 特征维度 |
numfield | ml.fm.field.num | 输入数据中域的数目. 虽然特征交叉能生成非常高维的数据, 对于一些数据集, 每个样本域的数目是一定的 |
validateratio | ml.data.validate.ratio | Angel会将输入数据划分成训练集与验证集, 这个参数就是用于指定验证集的比例. 注:所有的验证集匀存于内存, 当数据量特别大时, 可能会OOM |
sampleratio | ml.batch.sample.ratio | 这个参数是Spark on Angel专用的, Spark用采样的方式生成mini-batch, 这个参数用于指定采样率 |
useshuffle | ml.data.use.shuffle | 是否在每个epoch前shuffle数据. 注: 当数据量大时, 这一操作非常影响性能, 请慎重使用. 默认为false, 不用shuffle. |
translabel | ml.data.label.trans.class | 对于二分类, Angel要求标签为(+1, -1), 如果数据集的标簦是(0, 1)则可以用这一参数进行转换, 默认关闭 |
posnegratio | ml.data.posneg.ratio | Angel也支持采样生成mini-batch, 但方式与Spark不同, Angel先将数据集的正负例分开, 然后分别按比例从正例, 负例中抽样生成mini-batch, posnegratio就是控制mini-batch中正负样本比例的. 这个参数对不平衡数据集的训有帮助. posnegratio默认为-1, 表示不进行采样 |
注: 除了indexrange外, 其它参数都有默认值, 因此都是可选的.
一个完全的模型配置如下:
"model": {
"loadPath": "path_to_your_model_for_loading",
"savePath": "path_to_your_model_for_saving",
"modeltype": "T_DOUBLE_SPARSE_LONGKEY",
"modelsize": 148
}
下面对照说明:
Json key | 对应配置项 | 说明 |
---|---|---|
loadpath | angel.load.model.path | 模型加载路径 |
savepath | angel.save.model.path | 模型保存路径 |
modeltype | ml.model.type | 模型类型, 指输入层参数在PS上的类型(数据与存储), 同时它也会决定非输入层的数据类型(非输入层的存储类型为dense) |
modelsize | ml.model.size | 对于整个数据集, 在某些维度上可能没有数据, 特征维度与模型维度不一致. 模型维度是有效 数据维度 |
常用的modeltype有:
一个完全的模型配置如下:
"train": {
"epoch": 10,
"numupdateperepoch": 10,
"batchsize": 1024,
"lr": 0.5,
"decayclass": "StandardDecay",
"decayalpha": 0.001,
"decaybeta": 0.9
}
下面对照说明:
Json key | 对应配置项 | 说明 |
---|---|---|
epoch | ml.epoch.num | 迭代轮数 |
numupdateperepoch | ml.num.update.per.epoch | 这个参数只对Angel有用, 指每轮迭代中更新参数据的次数 |
batchsize | ml.minibatch.size | 这个参数只对Spark On Angel有用, 指mini-batch的大小 |
lr | ml.learn.rate | 学习率 |
decayclass | ml.opt.decay.class.name | 指定学习率衰减类 |
decayalpha | ml.opt.decay.alpha | 指定学习率衰减参数据alpha |
decayalpha | ml.opt.decay.beta | 指定学习率衰减类数据beta |
其中有: |
由于每种优化器都有默认的参数, 所以有两种方式设置默认优化器, 以Momentum为例:
"default_optimizer": "Momentum"
"default_optimizer": {
"type": "Momentum",
"momentum": 0.9,
"reg1": 0.0,
"reg2": 0.0
}
关于优化器的具体参数, 请参考Angel中的优化器
大部分传输函数是没有参数的, 只有少量传输函数, 如dropout, 需要参数. 所以默认传输函数的指定也有两种方式:
"default_transfunc": "Relu"
"default_transfunc": {
"type": "Dropout",
"actiontype": "train",
"proba": 0.5
}
注: 由于dropout传递函数在训练与测试(预测)中计算方式不一样, 所以要用actiontype表明是哪种场景, train/inctrain, predict.
关于传递函数有更多细节请参考Angel中的传递函数
Angel中的深度学习算法都表示为一个AngelGraph, 而AngelGraph中的节点就是层(Layer). 按层的拓朴结构可分为三类:
注: 虽然Angel的层可以有多个输入, 但最多只有一个输入. 一个层的输出可以作为多个层的输入, 即输出可以"重复消费".
在Json中, 所有与层相关的参数都放在一个列表中, 如下:
"layers" : [
{parameters of layer},
{parameters of layer},
...
{parameters of layer}
]
虽然不同的层有不同的参数, 但它们有一些共性:
类名
下面是一个DeepFM的类子:
"layers": [
{
"name": "wide",
"type": "SimpleInputLayer",
"outputdim": 1,
"transfunc": "identity"
},
{
"name": "embedding",
"type": "Embedding",
"numfactors": 8,
"outputdim": 104,
"optimizer": {
"type": "momentum",
"momentum": 0.9,
"reg2": 0.01
}
},
{
"name": "fclayer",
"type": "FCLayer",
"outputdims": [
100,
100,
1
],
"transfuncs": [
"relu",
"relu",
"identity"
],
"inputlayer": "embedding"
},
{
"name": "biinnersumcross",
"type": "BiInnerSumCross",
"inputlayer": "embedding",
"outputdim": 1
},
{
"name": "sumPooling",
"type": "SumPooling",
"outputdim": 1,
"inputlayers": [
"wide",
"biinnersumcross",
"fclayer"
]
},
{
"name": "simplelosslayer",
"type": "SimpleLossLayer",
"lossfunc": "logloss",
"inputlayer": "sumPooling"
}
]
注: 在Angel中FCLayer在指定参数时采用了"折叠"方式. 更多例子请参考具体算法和Angel中的层
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。