Wide & Deep 模型是谷歌在2016年发表的论文中所提到的模型。在论文中,谷歌将 LR 模型与 深度神经网络 结合在一起作为 Google Play 的推荐获得了一定的效果。

官方提供的 Wide & Deep 模型的(简称,WD 模型)教程 都是使用 TensorFlow (简称,TF )自带的函数来做的特征工程,并且模型也进行了封装,所以如果要简单验证这个模型的话,自己用tf直接搭建一个或许是一个更好的主意。

所以本文就向您展示了如何自己用 TF 搭建一个结构清晰,定制性更高的 WD 模型。


1.先让我们来看看wide_deep模型是如何工作的:

上图左边是wide模型,对于右边是deep模型。可见wide模型就是一个RL模型,而右边的deep网络隐藏层有三层,神经元个数分别为256,128,64。

谷歌教程的图

上面的图示谷歌教程里,可见最后将wide的输出和deep的输出进行相加。最后用一个Relu激活函数,然后输出最终预测。

我自己写了一个小小的demo,可以展示这个过程,思路还是很清晰的,下面我将用自己的demo来解释这个过程。

2. demo解析

outline:
我用了三个函数,分别为:
wide_model:来建立wide模型
deep_model: 来建立deep模型
build_w_d : 来结合上面二者进行预测与反向传播

1. wide_model函数解析

下面是我的代码,用的是TensorFlow框架:
我再代码内部已经给了一些注释,有一定解释作用

def wide_model(data) :#得到数据的长度,即每个样例有多少个输入len = np.shape(data)[1]#随机初始化参数tf.set_random_seed(1)W = tf.get_variable("W" , [len , 1] , initializer = tf.contrib.layers.xavier_initializer())b = tf.get_variable("b" , [1 , 1] , initializer = tf.zeros_initializer())#前向传播:Z = tf.add(tf.matmul(data , W) , b)A = tf.nn.relu(Z) #这个Relu我不知道要不要用。。。# 输出每个样本经过计算的值output = tf.reshape(A, [-1, 1])return output#======分割线由于不要反向传播,这里wide就写完了============

值得注意的是:
1.我用的是随机初始化,但是我见过用修正方式初始化权重的,我不知道这个模型,用那种方式是不是会更好,所以这里可能会有错误。
2.对于前向传播完成后,是否需要用一个relu激活函数,我也没有查到什么确切的资料,这也是个问题。

2. deep_model函数解析

这里我只做了个demo,所以我直接用了和之前图中一样的隐藏层网络层数(3层),然后神经元节点数目,我还是用的参数形式表示,以便于扩展。

下面是我的代码:

def deep_model(data , hidden1 , hidden2 , hidden3) :len = np.shape(data)[1]#随机初始化参数W1 = tf.get_variable("W1", [len , hidden1], initializer=tf.contrib.layers.xavier_initializer())b1 = tf.get_variable("b1", [hidden1 , 1], initializer=tf.zeros_initializer())W2 = tf.get_variable("W2", [hidden1 , hidden2], initializer=tf.contrib.layers.xavier_initializer())b2 = tf.get_variable("b2", [hidden2 , 1], initializer=tf.zeros_initializer())W3 = tf.get_variable("W3", [hidden2 , hidden3], initializer=tf.contrib.layers.xavier_initializer())b3 = tf.get_variable("b3", [hidden3 , 1], initializer=tf.zeros_initializer())# 前向传播Z1 = tf.add(tf.matmul(data, W1), b1)  # Z1 = np.dot(W1, X) + b1A1 = tf.nn.relu(Z1)  # A1 = relu(Z1)Z2 = tf.add(tf.matmul(A1, W2), b2)  # Z2 = np.dot(W2, a1) + b2A2 = tf.nn.relu(Z2)  # A2 = relu(Z2)Z3 = tf.add(tf.matmul(A2, W3), b3)  # Z3 = np.dot(W3,Z2) + b3output = tf.nn.relu(Z3) #这个Relu我不知道要不要用。。。return output

问题:同样,,,这个最后的relu我不知道要不要用。

3. build_w_d函数解释

下面是代码:

def build_w_d(deep_input, wide_input, y):dmodel = deep_model(deep_input, 256, 128, 64)wmodel = wide_model(wide_input)#初始化参数(就是类似于前面函数的b)central_bias = tf.Variable([np.random.randn()], name="central_bias")# 使用 LR 将两个模型组合在一起dmodel_weight = tf.Variable(tf.truncated_normal([1, 1]), name="dmodel_weight")wmodel_weight = tf.Variable(tf.truncated_normal([1, 1]), name="wmodel_weight")#将wide和deep的输出结合起来network = tf.add(tf.matmul(dmodel , dmodel_weight) , tf.matmul(wmodel, wmodel_weight))prediction = tf.add(network, central_bias)#计算cost函数cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y , logits=prediction))#反向传播,用了Adam优化train_step = tf.train.AdamOptimizer(0.001).minimize(cost)return train_step , cost , prediction

好了,结合起来就是这样,这展现了wide_deep模型的基本结构,当然,需要得到一个很厉害的,应用级的模型的话,还需要很多的优化与连接措施。

下面贴出几个参考资料:
https://www.tensorflow.org/tutorials/wide_and_deep
https://research.google.com/pubs/pub45413.html
https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html

TensorFlow搭建简易Wide and Deep 模型相关推荐

  1. TensorFlow Wide And Deep 模型详解与应用 TensorFlow Wide-And-Deep 阅读344 作者简介:汪剑,现在在出门问问负责推荐与个性化。曾在微软雅虎工作,

    TensorFlow Wide And Deep 模型详解与应用 TensorFlow Wide-And-Deep 阅读344  作者简介:汪剑,现在在出门问问负责推荐与个性化.曾在微软雅虎工作,从事 ...

  2. TensorFlow Wide And Deep 模型详解与应用

    Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右发布的一类用于分类和回归的模型,并应用到了 Google Play 的应用推荐中 [1].wide and dee ...

  3. Wide Deep模型的理解及实战(Tensorflow)

    目录 一.背景 二.概述 三.模型原理 3.1.Wide模型 3.2.Deep模型 3.3.Wide和Deep模型的协同训练 四.系统介绍 4.1.系统简介 4.2.系统流程 五.tensorflow ...

  4. 推荐系统:CTR模型学习总结--LR、FM、FFM、Wide and Deep、DeepFM

    推荐系统概括 推荐系统方法综述 推荐系统的目的 评价指标 Accuracy logloss AUC F1 score Collaborative Fliter CTR LR POLY2 FM FFM ...

  5. The Wide and Deep Learning Model(译文+Tensorlfow源码解析) 原创 2017年11月03日 22:14:47 标签: 深度学习 / 谷歌 / tensorf

    The Wide and Deep Learning Model(译文+Tensorlfow源码解析) 原创 2017年11月03日 22:14:47 标签: 深度学习 / 谷歌 / tensorfl ...

  6. 【CTR预估】The Wide and Deep Learning Model(译文+Tensorlfow源码解析)

    本文主要讲解Google的Wide and Deep Learning 模型.本文先从原始论文开始,先一步步分析论文,把论文看懂.再去分析官方开源的Tensorflow源码,解析各个特征的具体实现方法 ...

  7. 从Wide and Deep、DeepFM到DLRM,现代的推荐系统算法研究

    深入研究Facebook和谷歌等公司建立业务的人工智能算法. 2019年5月,Facebook开放了他们的一些推荐方法,并引入了DLRM(深度学习推荐模型).这篇文章旨在解释DLRM和其他现代推荐方法 ...

  8. 构建并用 TensorFlow Serving 部署 Wide Deep 模型

    Wide & Deep 模型是谷歌在 2016 年发表的论文中所提到的模型.在论文中,谷歌将 LR 模型与 深度神经网络 结合在一起作为 Google Play 的推荐获得了一定的效果.在这篇 ...

  9. 经典Wide Deep模型介绍及tensorflow 2代码实现

    Wide & Deep模型介绍 目标: 内容: 一. 模型介绍 二. 推荐系统架构 三. Wide部分 四. Deep部分 五. Wide和Deep一起训练 六. 系统实现 (1)数据生成阶段 ...

最新文章

  1. 沈阳人才市场7月精品招聘会
  2. 谷歌深度学习公开课任务 5: Word2VecCBOW
  3. The Elements of Statistical Learning的笔记
  4. Linux系统目录结构,文件类型以及ls、alias命令
  5. 人终究要活出自己对于这个世界的看法和自己的处事方式,并且由内而外的生成自信
  6. linux的as编译文件,Ubuntu Linux14 64位下在Android studio下用gradle编译Andrid项
  7. Android-04:线程的使用
  8. 2017西安交大ACM小学期数据结构 [又是树状数组、异或]
  9. android选择头像弹窗,Android App开发常用功能之用户头像选择-Go语言中文社区
  10. 升级Struts2.5后使用DMI动态方法调用遇到问题
  11. 动态字段列表实现及ListT排序
  12. [转]java 中的序列化是什么意思?有什么好处?
  13. Linux常见命令tar
  14. Python爬虫系列(五)360图库美女图片下载
  15. 早年的一篇关于80286保护模式的文章
  16. H.264媒体流AnnexB和AVCC格式分析 及 FFmpeg解析mp4的H.264码流方法
  17. 虚拟机中ip地址总是自动变化解决办法
  18. 如何成为一名获得Adobe认证的专业人员?
  19. windows主机测评
  20. Rcurl--炼数成金课程第一周

热门文章

  1. 微信小程序开发与应用 第一章 微信小程序的基本知识1
  2. Linux配置最基础的命令
  3. 实验图文详解——apache的编译安装及httpd服务开机自启
  4. jsp输入限制正则表达式
  5. ByteBuffer 类
  6. java 招聘需求_Java人员要具备哪些技能 招聘需求包括什么
  7. python面向对象作业_python面向对象编程作业
  8. visio思维导图模板_如何下载思维导图模板?在线教你找精美漂亮的思维导图
  9. word排版案例报告_停工不停学丨项目部开展Word办公软件使用技能培训
  10. java自定义findbugs规则_静态代码扫描 (三)——FindBugs 自定义规则入门