推荐系统之Wide&Deep

Wide&Deep

一、思维框架

在这里插入图片描述

二、正文

在这里插入图片描述

三、代码实现

代码实战主要分为两大部分,第一部分是使用tensorflow中已经封装好的wide&deep模型,这一部分主要是熟悉模型训练的整体结构。第二部分是使用tensorflow中的keras实现wide&deep,这一部分主要是尽可能的看到模型内部的细节并将其实现。

Tensorflow内置的WideDeepModel

在Tensorflow的库中是已经内置了Wide-Deep model的,想要查看源代码了解具体实现过程可以看这里 。下面参考Tensorflow官网的示例代码进行讲解。我们用到的数据集下载链接戳这里

首先看全局实现:

tf.keras.experimental.WideDeepModel(
    linear_model, dnn_model, activation=None, **kwargs
)

这一步很容易看出来就是将linear_model与dnn_model拼接在了一起,对应于Wide-Deep FM中的最后一步。比如我们可以将linear_model与dnn_model做一个最简单的实现:

linear_model = LinearModel()
dnn_model = keras.Sequential([keras.layers.Dense(units=64),
                             keras.layers.Dense(units=1)])
combined_model = WideDeepModel(linear_model, dnn_model)
combined_model.compile(optimizer=['sgd', 'adam'], 'mse', ['mse'])
# define dnn_inputs and linear_inputs as separate numpy arrays or
# a single numpy array if dnn_inputs is same as linear_inputs.
combined_model.fit([linear_inputs, dnn_inputs], y, epochs)
# or define a single `tf.data.Dataset` that contains a single tensor or
# separate tensors for dnn_inputs and linear_inputs.
dataset = tf.data.Dataset.from_tensors(([linear_inputs, dnn_inputs], y))
combined_model.fit(dataset, epochs)

这里第一步就是直接调用一个keras.experimental中的linear_model,第二步简单实现了一个全连接神经网络,第三步使用WideDeepModel将前两步产生的两个model拼接在一起,形成最终的combined_model,接着就是常规的compile和fit了。

除此之外线性模型与DNN模型在联合训练之前均可进行分别训练:

linear_model = LinearModel()
linear_model.compile('adagrad', 'mse')
linear_model.fit(linear_inputs, y, epochs)
dnn_model = keras.Sequential([keras.layers.Dense(units=1)])
dnn_model.compile('rmsprop', 'mse')
dnn_model.fit(dnn_inputs, y, epochs)
combined_model = WideDeepModel(linear_model, dnn_model)
combined_model.compile(optimizer=['sgd', 'adam'], 'mse', ['mse'])
combined_model.fit([linear_inputs, dnn_inputs], y, epochs)

这里前三行代码训练了一个线性模型,中间三行代码训练了一个DNN模型,最后三行代码则将两个模型联合训练,以上就完成了对Tensorflow的WideDeepModel的调用,其中每个函数有一些其他参数我们这里不详细说明,读者若有需要可自行在tensorflow官网查询,另外该部分的源代码在Tensorflow的Github上有展示,链接在这

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值