-
Notifications
You must be signed in to change notification settings - Fork 1k
快速开始
yiling-dc edited this page Dec 24, 2018
·
3 revisions
本节描述如何使用XDL进行DeepCtr(Deep+Embeddings)模型训练
- 示例模型包含一路Deep(deep0)特征以及两路sparse特征(sparse[0-1]),sparse特征通过Embedding计算生成两个8维的dense向量,并与Deep特征concat之后经过4层全连接层输出loss
- 样本格式
- 完整代码
2. 读取数据 (detail)
import xdl
import tensorflow as tf
reader = xdl.DataReader("r1", # reader名称
paths=["./data.txt"], # 文件列表
enable_state=False) # 是否打开reader state,用于分布式failover,开启的时候需要额外的命令行参数(task_num)
reader.epochs(1).threads(1).batch_size(10).label_count(1)
reader.feature(name='sparse0', type=xdl.features.sparse)\ # 定义reader需要读取的特征,本例包括两个sparse特征组和一个dense特征组
.feature(name='sparse1', type=xdl.features.sparse)\
.feature(name='deep0', type=xdl.features.dense, nvec=256)
reader.startup()
3. 定义模型 (detail)
- Embedding:
emb1 = xdl.embedding('emb1', # embedding名称,如果多路embedding共享同一个参数,name需配成同一个
batch['sparse0'], # 输入特征(xdl.SparseTensor)
xdl.TruncatedNormal(stddev=0.001), # 参数初始化方法
8, # embedding维度
1024, # sparse特征的维度
vtype='hash') # sparse特征类型:index(id类特征)/hash(hash特征)
emb2 = xdl.embedding('emb2', batch['sparse1'], xdl.TruncatedNormal(stddev=0.001), 8, 1024, vtype='hash')
- Dense:
@xdl.tf_wrapper()
def model(deep, embeddinc1 = tf.layers.dense(
input, 128, kernel_initializer=tf.truncated_normal_initializer(
fc3 = tf.layers.dense(
fc2, 32, kernel_initializer=tf.truncated_normal_initializer(
stddev=0.001, dtype=tf.float32))
y = tf.layers.dense(
fc3, 1, kernel_initializer=tf.truncated_normal_initializer(
stddev=0.001, dtype=tf.float32))
loss = tf.losses.sigmoid_cross_entropy(labels, y)
return loss
4. 定义优化器 (detail)
loss = model(batch['deep0'], [emb1, emb2], batch['label'])
train_op = xdl.SGD(0.5).optimize()
log_hook = xdl.LoggerHook(loss, "loss:{0}", 10)
sess = xdl.TrainSession(hooks=[log_hook])
while not sess.should_stop():
sess.run(train_op)
6. 执行训练 (detail)
将上述代码保存为deepctr.py,执行以下步骤开始单机训练
# 进入docker,将代码和数据目录一起挂载进docker
sudo docker run -v [path_to_xdl]/examples/deepctr:/home/xxx/deepctr -it registry.cn-hangzhou.aliyuncs.com/xdl/xdl:ubuntu-cpu-tf1.12 /bin/bash
# 进入训练目录
cd /home/xxx/deepctr
# 开始单机训练
python deepctr.py --run_mode=local
注:data.txt为随机构造的一组数据,测试结果不收敛为正常现象,该测试样例主要是为了让用户快速熟悉XDL的api使用方法。