【CTR模型】TensorFlow2.0 的 DCN(Deep & Cross Network) 实现与实战(附代码+数据)

TensorFlow 2.0实战:DCN深度交叉网络CTR预估从原理到部署 特征交叉是CTR预估的核心技术,通过自动构造高阶组合特征提升模型表达能力。DCN(Deep & Cross Network)利用Cross Network以线性复杂度显式建模高阶交叉,并行Deep Network学习隐式非线性,在推荐系统和广告点击率预估中广泛应用。相比FM仅支持二阶交叉,DCN可逐层递推任意阶交叉,参数量与输入维度线性相关,工程友好。在TensorFlow 2.0中,借助Keras Functional API可高效搭建DCN模型,涵盖Embedding处理、Cross Layer自定义、 阅读详情

CTR 系列文章:

  1. 广告点击率(CTR)预测经典模型 GBDT + LR 理解与实践(附数据 + 代码)
  2. CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解
  3. CTR深度学习模型之 DeepFM 模型解读
  4. 【CTR模型】TensorFlow2.0 的 DeepFM 实现与实战(附代码+数据)
  5. CTR 模型之 Deep & Cross (DCN) 与 xDeepFM 解读
  6. 【CTR模型】TensorFlow2.0 的 DCN(Deep & Cross Network) 实现与实战(附代码+数据)
  7. 【CTR模型】TensorFlow2.0 的 xDeepFM 实现与实战(附代码+数据)

本篇文章讲解 DCN(Deep & Cross Network) 的 tensorflow2.0 实现,并使用 Criteo 数据集的子集加以实践。如果在看本文时有所困惑,可以看看 DCN(Deep & Cross Network) 的相关理论:CTR 模型之 Deep & Cross (DCN) 与 xDeepFM 解读。

本文使用的数据下载地址于代码获取地址在文末获取。

首先了解一下 Criteo数据集,它由有39个特征,1个label列,其中以I开头的为数值型特征,以C开头的为类别特征:

在这里插入图片描述

可以看到数据中有缺失值需要填充,并且类别变量需要进行类别编码(onehot 编码的任务交给模型),这部分预处理的代码不详细讲了。

为了方便后面建立模型,先将特征划分为 dense 特征与 sparse 特征两个类别:

# 数值型
dense_feats = [f for f in cols if f[0] == "I"]
# 类别型
sparse_feats = [f for f in cols if f[0] == "C"]

Deep & Cross Network

DCN网络结构如下:

在这里插入图片描述

构造模型输入

对于 dense 特征,按下面的代码构造输入:

# 构造每个 dense 特征的输入
dense_inputs = []
for f in dense_feats:
    _input = Input([1], name=f)
    dense_inputs.append(_input)
# 将输入拼接到一起
concat_dense_inputs = Concatenate(axis=1)(dense_inputs)  # ?, 13

对于 sparse 特征,按下面的代码构造输入:

# 这里单独对每一个 sparse 特征构造输入,
# 目的是方便后面构造二阶组合特征
sparse_inputs = []
for f in sparse_feats:
    _input = Input([1], name=f)
    sparse_inputs.append(_input)

# embedding size
k = 8
# 对sparse特征进行embedding
sparse_kd_embed = []
for _input in sparse_inputs:
    f = _input.name.split(':')[0]
    voc_size = total_data[f].nunique()
    _embed = Flatten()(Embedding(voc_size, k, embeddings_regularizer=tf.keras.regularizers.l2(0.7))(_input))
    sparse_kd_embed.append(_embed)

# 将sparse特征拼接在一起
concat_sparse_inputs = Concatenate(axis=1)(sparse_kd_embed)

然后将所有的 dense 输入和 sparse 输入拼接到一起:

embed_inputs = Concatenate(axis=1)([concat_sparse_inputs, concat_dense_inputs])

Cross Network

终于来到最核心的 Cross 部分,其中第 l + 1 l + 1 l+1 层的计算过程为:

在这里插入图片描述

x l + 1 = x 0 x l T w l + b l + x l x_{l+1} =x_0x^T_lw_l + b_l + x_l xl+1​=x0​xlT​wl​+bl​+xl​
此公式的实现代码如下:

def cross_layer(x0, xl):
    """
    实现一层cross layer
    @param x0: 特征embeddings
    @param xl: 前一层的输出结果
    """
    # 1.获取xl层的embedding size
    embed_dim = xl.shape[-1]
    # 2.初始化当前层的W和b
    w = tf.Variable(tf.random.truncated_normal(shape=(embed_dim,), stddev=0.01))
    b = tf.Variable(tf.zeros(shape=(embed_dim,)))
    # 3.计算feature crossing
    # 下面的reshape操作相当于将列向量转换为行向量
    x1_T = tf.reshape(xl, [-1, 1, embed_dim])
    # 行向量与列向量的乘积结果是一个标量
    x_lw = tf.tensordot(x1_T, w, axes=1)
    cross = x0 * x_lw 
    return cross + b + xl

这个代码的执行结果是第 l + 1 l+1 l+1 层的输出,共分为三个步骤:

  1. 获取前一层的输出结果的嵌入维度
  2. 初始化本层的网络参数
  3. 进行特征交叉

关键在于第三步,计算 x 0 x l T w l x_0x^T_lw_l x0​xlT​wl​ 时,如果先计算 x 0 x T x_0x^T x0​xT则会得到一个矩阵,为了优化内存的使用,可以先计算 x l T w l x^T_lw_l xlT​wl​ 得到标量,然后再与 x 0 x_0 x0​ 相乘得到 feature crossing。

接下来可以利用循环构建多层 crossing layer:

def build_cross_layer(x0, num_layer=3):
    """
    构建多层cross layer
    @param x0: 所有特征的embeddings
    @param num_layers: cross net的层数
    """
    # 初始化xl为x0
    xl = x0
    # 构建多层cross net
    for i in range(num_layer):
        xl = cross_layer(x0, xl)
    
    return xl
    
# cross net
cross_layer_output = build_cross_layer(embed_inputs, 3)

DNN 部分

这部分好理解,直接上代码吧:

fc_layer = Dropout(0.5)(Dense(128, activation='relu')(embed_inputs))
fc_layer = Dropout(0.3)(Dense(128, activation='relu')(fc_layer))
fc_layer_output = Dropout(0.1)(Dense(128, activation='relu')(fc_layer))

输出部分

代码如下:

stack_layer = Concatenate()([cross_layer_output, fc_layer_output])
output_layer = Dense(1, activation='sigmoid', use_bias=True)(stack_layer)

完善模型

model = Model(dense_inputs+sparse_inputs, output_layer)
model.compile(optimizer="adam", 
              loss="binary_crossentropy", 
              metrics=["binary_crossentropy", tf.keras.metrics.AUC(name='auc')])

训练模型

train_data = total_data.loc[:500000-1]
valid_data = total_data.loc[500000:]

train_dense_x = [train_data[f].values for f in dense_feats]
train_sparse_x = [train_data[f].values for f in sparse_feats]
train_label = [train_data['label'].values]

val_dense_x = [valid_data[f].values for f in dense_feats]
val_sparse_x = [valid_data[f].values for f in sparse_feats]
val_label = [valid_data['label'].values]

model.fit(train_dense_x+train_sparse_x, 
          train_label, epochs=5, batch_size=128,
          validation_data=(val_dense_x+val_sparse_x, val_label),
         )

最后,本文的代码链接在:https://github.com/zxxwin/tf2_DCN 。

数据下载地址为:链接:https://pan.baidu.com/s/1Qy3yemu1LYVtj0Wn47myHQ 提取码:pv7u

参考文章:

CTR预估模型:DeepFM/Deep&Cross/xDeepFM/AutoInt代码实战与讲解

NELSONZHAO/zhihu/ctr_models/DCN

DCN实战:用TensorFlow手把手实现Deep & Cross Network(附完整代码) 本文详细介绍了如何使用TensorFlow实现Deep & Cross Network(DCN),包括环境配置、数据预处理、模型构建和训练调优全流程。DCN通过创新的网络结构实现自动特征交叉,显著提升推荐系统和广告点击率预测的效果。附完整代码和实战技巧,帮助开发者快速掌握DCN的核心技术。 阅读详情

相关推荐

DeepFM vs DCN vs xDeepFM:3 大 CTR 预估模型核心差异与 TensorFlow 2.x 实现对比

本文深入对比了DeepFM、DCN和xDeepFM三大CTR预估模型的核心差异与TensorFlow 2.x实现。从特征交互演进、架构设计到工业实践,详细解析了各模型优势及适用场景,为推荐系统领域的算法工程师提供全面的技术选型指南。特别关注Factorization-Machine在模型中的应用与优化策略。

weixin_32597009的博客 307

tensorflow2.0实现Deep & Cross Network(DCN)

本文基于tensorflow2.0实现Deep & Cross Network(DCN)结构,数据集:Criteo 的500000条数据子集。 预处理 必要的库: import numpy as np import pandas as pd import tensorflow as tf from tensorflow.keras.layers import * from tensorflow.keras.models import Model import tensorflow.keras.bac

zhong_ddbb的博客 2831

S-DCNet:S-DCNet和SS-DCNet的非官方Pytorch实现

S-DCNet和SS-DCNet 这是S-DCNet和SS-DCNet的非官方实现(Pytorch)。 这些文件是 () () 请参阅此页面底部的确切参考。 讨论表明作者没有计划发布培训代码(截至2019年10月)。 该存储库包含用于对已发布的数据集ShanghaiTech Part_A和Part_B进行模型训练和评估的代码。 还提供了用于推断用户提供的独立图像的代码。 仅实现基于分类的计数器(C-Counter)(未实现基于回归的计数器(R-Counter))。 环境 根据requirements.txt安装所需的软件包。 所有脚本的意图由用户(运行gen_density_maps.py , train.py , evaluate.py , inference.py )通过被供电配置系统。 使用--help运行任何脚本以查看可用选项。 配置文件位于目录中。 数据集 使用

DCN和DCNV2(tensorflow keras实现)

推荐系统模型DCN模型的cross network部分实现

醉意流年go的博客 1171

DCNet:使用深度学习从大量表达数据中解开细胞谱

DCNet套件 使用深度学习从大量表达数据中解开细胞谱 反卷积网络(DCNet)是一种“可解释的”人工神经网络模型,可以从大量RNA-Seq样本中推断细胞含量。它在神经网络中嵌入了434个细胞与9078个标记基因之间的关系,并使用隐藏层来表征细胞的类型和含量。 安装 tar zxvf DCNet-0.0.1.tar.gz cd DCNet-0.0.1 python setup.py install 使用DCNet from DCNet . build import ObjectiveDCnet from DCNet . models import DCNet , DCNetNoise import os if __name__ == '__main__' : epoch = 5 output_dir = 'test_output' dd

Python-DynamicCoattentionNetworkPlusDCNTensorFlow实现

Dynamic Coattention Network Plus (DCN ) TensorFlow 实现,使用Deep NLP回答问题。

小样本检测:蒸馏&上下文助力小样本检测(代码已开源)

计算机视觉研究院专栏作者:Edison_G目标检测现在的框架越来越多,我们“计算机视觉研究院”最近也分享了众多的目标检测框架!今天我们继续分享一个最新的检测框架——DCNet。公众号ID|ComputerVisionGzq学习群|扫码在主页获取加入方式论文:https://arxiv.org/pdf/2103.17115.pdf开源代码:https://github.com/hzhupku/DC...

gzq0723的博客 679

DCNet-X-开源

DCNet-X是基于Direct Connect ADC协议构建的服务器,用C ++编写,适用于32位Windows和所有POSIX操作系统

教你复现顶会论文网络结构(二)--DCN模型网络结构(tensorflow2.0)

参考文章: 1、https://blog.csdn.net/roguesir/article/details/79763204 2、论文:https://arxiv.org/abs/1708.05123 3、https://www.jianshu.com/p/77719fc252fa 4、https://zhuanlan.zhihu.com/p/55234968 edition=yidianzix...

一碗竹叶青的博客 2201

S-DCNet:S-DCNet的实施(ICCV 2019)

网络 这是S-DCNet的存储库,我们在ICCV 2019的论文中介绍了该存储库: 1 ,郝浩2 ,刘承新1 ,刘亮1 ,曹志国1 ,沉春华2 1华中科技大学,中国 2澳大利亚阿德莱德大学 消息 !!! S-DCNet的扩展版本,即现在可用!!! 会费 重新定义计数问题:我们建议使用S-DCNet,它可以通过空间分而治之将开放集计数转换为封闭集问题; 简单有效: S-DCNet在三个人群计数数据集(ShanghaiTech,UCF_CC_50和UCF-QNRF),车辆计数数据集(TRANCOS)和工厂计数数据集(MTC)上实现了最先进的性能。 与以前的最佳方法相比,S-DCNet在ShanghaiTech Part_B上有20.2%的相对改进,在UCF-QNRF上有20.9%的改进,在TRANCOS上有22.5%的改进,在MTC上有15.1%的改进。 环境 请根据requiremen

数学建模更新10(蒙特卡罗模拟)

蒙特卡罗模拟一.目录二.引例1:布丰投针实验1.投针步骤2.思路3. 历史实验者二.蒙特卡罗模拟概述1.定义2.提出3.原理4.讨论三.应用实例1.三门问题【1】问题【2】代码2.模拟排队问题【1】题目【2】引入参数【3】总结题目信息【4】过程可视化【5】一些推导公式【6】代码3.有约束的非线性规划问题【1】问题的分类【2】例子【3】推导过程【4】代码 一.目录 二.引例1:布丰投针实验 1.投针步骤 步骤: 1:取一张白纸,在上面画出许多条间距为a的平行线 2:去一根长度为l的针,随机的向纸张上投掷n次

沉晨尘宸的博客 3039

【CTR模型】TensorFlow2.0 的 xDeepFM 实现与实战(附代码+数据)

本篇文章讲解 xDeepFM 的 tensorflow2.0 实现,并使用 Criteo 数据集的子集加以实践。如果在看本文时有所困惑,可以看看 xDeepFM 的相关理论:CTR 模型之 Deep & Cross (DCN) 与 xDeepFM 解读。 本文使用的数据下载地址于代码获取地址在文末获取。 首先了解一下 Criteo数据集,它由有39个特征,1个label列,其中以I开头的为数值型特征,以C开头的为类别特征: 可以看到数据中有缺失值需要填充,并且类别变量需要进行类别编码(onehot

VariableX的博客 2646

Fluent新手必看:如何正确解读scaled residuals曲线(附常见问题排查)

本文详细解析了Fluent中scaled residuals曲线的解读方法及常见问题排查技巧。针对continuity残差居高不下、湍流模型收敛困难等典型问题,提供了网格质量检查、边界条件验证和求解策略调整的实用解决方案,帮助CFD新手快速掌握计算收敛性的关键判断标准。

weixin_28698059的博客 376

《Deep & Cross Network for Ad Click Predictions》DCN模型以及python代码

论文的下载地址:https://arxiv.org/pdf/1708.05123.pdf 1 DEEP & CROSS NETWORK (DCN) 1.1 Embedding and Stacking Layer 在进行CTR预估时,特征经过one-hot之后,输入模型的向量会变得比较稀疏,维度非常大。因此开始有人将one-hot后的向量进行embedding,将每个特征向量转换成长度相...

十三 1620

谷歌(Google) Pixel 8/9 Pro(xl)如何获取 root 权限

谷歌(Google)Pixel8/9Pro(xl)等系列手机破解后,会在你的init_boot.img同路径生成一个magisk_patched.img,把这个文件拷贝到adb目录下,稍后还得把它刷回手机,这样手机才能获得Root权限,因为安卓14、15以后的内核结构调整,和Pixel7及以下的6、5、4、3、2等系列手机破解稍微不一致。因为ROOT权限的获取,需要使用ROM中的内核文件,个人强烈建议在官网下载ROM,直接刷最新版,其他地方的ROM如果没有校验码,请自行斟酌是否使用。

bugsycrack的博客 3485

Excel也能玩转K-means聚类?手把手教你用表格搞定用户分群(附完整公式)

本文详细介绍了如何在Excel中实现K-means聚类算法,无需编程即可完成用户分群。通过SUMIF、SQRT等基础函数,从数据预处理到最终分群全流程手把手教学,特别强调数据标准化和迭代优化的关键步骤,帮助运营团队低成本高效分析用户行为数据。

weixin_30555125的博客 180

【DNN】DCN(Deep & Cross Network)特征交叉机制与代码实战解析

本文深入解析了DCN(Deep & Cross Network)的特征交叉机制与代码实现。DCN通过并行的Cross Network和Deep Network,分别实现高效、显式的特征交叉与捕捉复杂隐式模式,有效解决了传统DNN在特征交叉上的黑盒问题。文章结合TensorFlow代码实战,详细拆解了网络结构、核心公式与实现细节,并对比了FM、Wide & Deep等模型,为推荐系统、CTR预估等任务提供了强大的自动化特征工程解决方案。

tensorflowjs6的博客 568

联想ThinkServer SR588 重装raid5阵列信息(装完centos7后,找不到硬盘)

这里写自定义目录标题找不到硬盘选择光盘启动 找不到硬盘 装完centos7之后,提示重启,重启之后,就一直无法启动。 进入bios 看了,确实是有设置硬盘为第一启动选项。 选择光盘启动 本地标准硬盘也是找不到。 1、 重启进入bios在系统手设置里找到存储信息, 然后找到如图选项回车进入。 选择主目录进入。 进入Configuration Management 里面 先清除原来的设置信息 选择已启用在yes 提示清除成功。 返回上一目录选择,选择 Create Virtual Drive 再选择S

熠铭心时空的博客 2万+

TensorFlow 2.0 实战:DCN 模型 CTR 预估从原理到线上部署

CTR 预估是推荐和广告系统的核心任务,其关键在于高效处理高维稀疏特征并捕捉特征交叉。传统方法依赖人工交叉或隐式学习,而 DCN(Deep & Cross Network)通过显式 Cross 网络与隐式 Deep 网络并行,平衡了交叉的表达效率与泛化能力。本文基于 TensorFlow 2.0 和 Criteo 数据集,完整实现 DCN 模型,涵盖特征工程、Cross 层数学推导、训练调参及线上推理优化,并分享 embedding 维度选择、梯度稳定等工程经验,为 CTR 预估任务提供可落地的解决方案。

weixin_34296641的博客 303

STC单片机 普通 I/O 口中断功能介绍和使用

STC32单片机 普通 I/O 口中断功能介绍和使用

perseverance51博客 3047

基于FDTD的涡旋光束发射器设计

为实现涡旋光束在小型设备中的应用,提出一种圆柱孔光栅蚀刻硅微环谐振腔结构,器件半径仅为4.1μm。建立一个理论模型,利用偶极子点表示沿微环腔内壁的光栅元件散射辐射,推导输出光场表达式,建模结果验证该结构可在不同波长下选择性地产生各种拓扑数的涡旋光束。此外,对器件进行性能分析与参数优化,结果表明,微环波导宽度过小会大大增加微环的辐射损耗。当微环波导宽度为450nm、耦合间距为100nm时,1 579nm波长附近的谐振峰输出功率为16.3dB,Q值为15 800。

qq_61890005的博客 827

深度学习 - 37.TF x Keras Deep & Cross Network DCN 实现

DCN Deep Cross Network 模型结构分析与实现。

BITDDD小栈 1702

UE4打包为Framework库嵌入iOS原生工程

UE4打包为Framework库嵌入iOS原生工程

tangfuling1991的博客 1294

【实践】广告ctr模型之Deep cross network (dcn)

广告ctr模型可用的深度模型其本质架构都一样(可见https://blog.csdn.net/dengxing1234/article/details/79916532),这也是限制了模型的发展路线。Deep cross network在广告ctr模型也是应用很常见,它聚焦于解决特征工程的问题,对比paper中提到:【DNN可以自动地学习特征地交互作用,然而,它们隐式地的生成所有的特征交互,这对于...

一寒惊鸿 2445

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

推荐算法(五)——谷歌经典 Deep&Cross Network原理及代码实践

目录1 介绍2 原理2.1 Embedding and stacking layer2.2 Cross Network2.3 Deep network2.4 Combination layer3 总结4 代码实践 1 介绍 DCN 是 2017 年由谷歌和斯坦福大学联合出品的 CTR 预估模型。 论文传送门:Deep & Cross Network 代码传送门:Deep & Cross Network 模型复现 传统模型比如 Wide&Deep 主要是通过 deep 部分提取高阶特征

予以初始的博客 1932

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

CTR深度学习模型之 DIN(Deep Interest Network) 的理解与例子

在电商领域,每个用户都有丰富的历史行为数据,这些数据具有如下特点: 多样性(Diversity):用户可能对多种商品感兴趣,例如手机、衣服。 局部激活(Local Activation):用户是否点击新商品,仅仅取决于历史行为中与新商品相关度高的部分数据。 如何从中捕获特征对CTR预估模型非常重要。论文 《Deep Interest Network for Click-Through Rate Prediction 提出了深度兴趣网络 Deep Interest Network,以下简称 DIN

VariableX的博客 5603

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: CTR 模型之 Deep & Cross (DCN) 与 xDeepFM 解读
下一篇: 【CTR模型】TensorFlow2.0 的 xDeepFM 实现与实战(附代码+数据)
VariableX
博客等级 码龄7年 142粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值