深度推荐模型学习-DeepCrossing学习

10 篇文章 0 订阅
1 篇文章 0 订阅

介绍

前言

DeepCrossing模型原理

这个模型就是一个真正的把深度学习架构应用于推荐系统中的模型了, 2016年由微软提出, 完整的解决了特征工程、稀疏向量稠密化, 多层神经网络进行优化目标拟合等一系列深度学习在推荐系统的应用问题。 这个模型涉及到的技术比较基础,在传统神经网络的基础上加入了embedding, 残差连接等思想, 且结构比较简单, 对初学者复现和学习都比较友好。

DeepCrossing模型应用场景是微软搜索引擎Bing中的搜索广告推荐, 用户在输入搜索词之后, 搜索引擎除了返回相关结果, 还返回与搜索词相关的广告,Deep Crossing的优化目标就是预测对于某一广告, 用户是否会点击, 依然是点击率预测的一个问题。

这种场景下, 我们的输入一般会有类别型特征, 比如广告id, 和数值型特征, 比如广告预算,两种情况。 对于类别型特征, 我们需要进行one-hot编码处理, 而数值型特征, 一般需要进行归一化处理, 这样算是把数据进行了一个简单清洗。 DeepCrossing模型就是利用这些特征向量进行CTR预估,那么它的结构长啥样, 又是怎么做CTR预估的呢? 这又是DeepCrossing的核心内容。

1.产生背景
传统的机器学习方法非常依赖输入的特征进行预测与分类。但是,仅仅使用原始的特征很难得到最优的结果,于是一些大佬就提出了利用组合特征(Combinatorial Features)来预测或者分类,事实证明,使用组合特征的效果确实很好,但是产生组合特征所需的代价很大。那么,有没有一个模型可以自动组合所需的特征呢?就是本文介绍的深度交叉(Deep Crossing)模型。

2016年由微软提出的Deep Crossing,完整的解决了特征工程、稀疏向量稠密化、多层神经网络进行优化目标拟合等一系列深度学习思想在推荐系统的应用问题。并且只涉及传统神经网络,embedding、残差连接等基础技术。它可以接受诸如文本,分类,ID和数值特征之类的各个特征,并根据特定任务自动搜索最佳组合。

DeepCrossing模型应用场景是微软搜索引擎Bing中的搜索广告推荐, 用户在输入搜索词之后, 搜索引擎除了返回相关结果, 还返回与搜索词相关的广告,Deep Crossing的优化目标就是预测对于某一广告, 用户是否会点击,依然是点击率(CRT)预测的一个问题。

于是,在这种场景下,我们需要将像广告ID这样的分类特征用one-hot编码处理,将数值特征进行归一化处理,然后传入模型。DeepCrossing模型利用这些特征向量进行CRT预估。


2. 模型结构与原理
2.1 特征表示
单一特征:直接采用one-hot编码表示。

组合特征:DeepCrossing避免使用组合特征。它可以同时处理稀疏和密集的单个特征,并支持前面提到的各种特征类型。这使用户可以自由使用其特定应用程序中选择的功能。此时,用户需要将特征转换成正确的表示形式,其他部分由模型完成。

2.2 模型结构
为了完成端到端的训练, DeepCrossing模型要在内部网络结构中解决如下问题:

离散类特征编码后过于稀疏, 不利于直接输入神经网络训练, 需要解决稀疏特征向量稠密化的问题

如何解决特征自动交叉组合的问题

如何在输出层中达成问题设定的优化目标

下图是DeepCrossing的模型结构,一共包含四种神经网络层,分别是嵌入层,连接层,残差单元层和计分层

目标函数采用的是对数损失函数,其定义如下:


在实际应用中,可以根据不同的需求可以灵活替换为其他目标函数。

下面分别介绍下各层的定义:

2.2.1 Embedding Layer
Embedding Layer用于将稀疏的类别型特征转换成稠密的Embedding向量,Embedding的维度会远小于原始的稀疏特征向量。它一般只包含一个全连接层,采用ReLU激活函数,结构如下:

【注意】:只有one-hot编码维度大于某一值(文中是256)的类别特征需要embedding,比如模型结构中Feature #1表示类别特征(one-hot编码后的稀疏特征向量)需要embedding,而Feature #2 要么是数值型特征,要么是维度较小的类别特征,不用embedding, 直接到了Stacking Layer。

2.2.2 Stacking Layer
Stacking Layer用于将不同的特征拼接在一起,形成新的包含全部特征的特征向量,公式如下:

其中K是全部特征的数量。

2.2.3 Multiple Residual Units Layer
该层的主要结构是多层感知机(MLP), 但DeepCrossing采用了残差网络进行的连接。通过多层残差网络对特征向量各个维度充分的交叉组合, 使得模型能够抓取更多的非线性特征和组合特征信息, 增加模型的表达能力。残差网络结构如下图所示:


Deep Crossing模型使用的是稍微修改过的残差单元,它不使用卷积内核,改为了两层神经网络。我们可以看到,残差单元是通过两层ReLU变换再将原输入特征相加回来实现的。

2.2.4 Scoring Layer
Scoring Layer作为输出层,为了拟合优化目标存在。 对于CTR预估二分类问题, Scoring往往采用逻辑回归,模型通过叠加多个残差块加深网络的深度,最后将结果转换成一个概率值输出。

3. 实验部分
3.1 文本输入
针对CP1(以DSSM为baseline)和CP2的数据(以production为baseline)训练了 DSSM 和 Deep Crossing 模型,将Deep Crossing模型限制为与DSSM相同的数据(即两者都使用包含查询文本、关键字或者标题文字的同一对输入),采用相对AUC评价模型。

实验结果如下表所示 :

在这两个数据集上,Deep Crossing的表现均优于DSSM。但是在针对CP2的数据的实验中,DeepCrossing的表现却弱于Production模型,因为Production模型使用的训练数据集不同,且有更丰富的特征(包括组合特征)。

3.2 衍生特征(Counting Feature)的重要性比较
为了对高基数特征进行降维处理,引入了统计类衍生特征(Counting Feature)。对比此类特征对于模型的影响,从实验结果可以看出衍生特征能够带来较大提升。

3.3 与Production模型的比较
文中使用训练Production模型的子集,使用22亿条数据训练了Deep Crossing模型。实验结果如下表所示:


显然,新模型在CP1上的表现已经超过了Production模型。

4. 总结
DeepCrossing的结构简单、清晰,没有引入特殊的模型结构,只是常规的Embedding+多层神经网络。但这个网络模型的出现有革命意义。DeepCrossing模型中没有任何人工特征工程的参与,只需要简单的特征处理,原始特征经Embedding Layer输入神经网络层,自主交叉和学习。 相比于FM,FFM只具备二阶特征交叉能力的模型,DeepCrossing可以通过调整神经网络的深度进行特征之间的“深度交叉”,这也是Deep Crossing名称的由来。
 

代码

import warnings

warnings.filterwarnings("ignore")
import itertools
import pandas as pd
import numpy as np
from tqdm import tqdm
from collections import namedtuple

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import *
from tensorflow.keras.models import *

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, LabelEncoder

from utils import SparseFeat, DenseFeat, VarLenSparseFeat


def data_process(data_df, dense_features, sparse_features):
    """
    简单处理特征,包括填充缺失值,数值处理,类别编码
    param data_df: DataFrame格式的数据
    param dense_features: 数值特征名称列表
    param sparse_features: 类别特征名称列表
    """
    data_df[dense_features] = data_df[dense_features].fillna(0.0)
    for f in dense_features:
        data_df[f] = data_df[f].apply(lambda x: np.log(x + 1) if x > -1 else -1)

    data_df[sparse_features] = data_df[sparse_features].fillna("-1")
    for f in sparse_features:
        lbe = LabelEncoder()
        data_df[f] = lbe.fit_transform(data_df[f])

    return data_df[dense_features + sparse_features]


def build_input_layers(feature_columns):
    """
    构建输入层
    param feature_columns: 数据集中的所有特征对应的特征标记之
    """
    # 构建Input层字典,并以dense和sparse两类字典的形式返回
    dense_input_dict, sparse_input_dict = {}, {}

    for fc in feature_columns:
        if isinstance(fc, SparseFeat):
            sparse_input_dict[fc.name] = Input(shape=(1,), name=fc.name)
        elif isinstance(fc, DenseFeat):
            dense_input_dict[fc.name] = Input(shape=(fc.dimension,), name=fc.name)

    return dense_input_dict, sparse_input_dict


def build_embedding_layers(feature_columns, input_layers_dict, is_linear):
    # 定义一个embedding层对应的字典
    embedding_layers_dict = dict()

    # 将特征中的sparse特征筛选出来
    sparse_feature_columns = list(filter(lambda x: isinstance(x, SparseFeat), feature_columns)) if feature_columns else []

    # 如果是用于线性部分的embedding层,其维度为1,否则维度就是自己定义的embedding维度
    if is_linear:
        for fc in sparse_feature_columns:
            embedding_layers_dict[fc.name] = Embedding(fc.vocabulary_size + 1, 1, name='1d_emb_' + fc.name)
    else:
        for fc in sparse_feature_columns:
            embedding_layers_dict[fc.name] = Embedding(fc.vocabulary_size + 1, fc.embedding_dim, name='kd_emb_' + fc.name)

    return embedding_layers_dict


# 将所有的sparse特征embedding拼接
def concat_embedding_list(feature_columns, input_layer_dict, embedding_layer_dict, flatten=False):
    # 将sparse特征筛选出来
    sparse_feature_columns = list(filter(lambda x: isinstance(x, SparseFeat), feature_columns))

    embedding_list = []
    for fc in sparse_feature_columns:
        _input = input_layer_dict[fc.name]  # 获取输入层
        _embed = embedding_layer_dict[fc.name]  # B x 1 x dim  获取对应的embedding层
        embed = _embed(_input)  # B x dim  将input层输入到embedding层中

        # 是否需要flatten, 如果embedding列表最终是直接输入到Dense层中,需要进行Flatten,否则不需要
        if flatten:
            embed = Flatten()(embed)

        embedding_list.append(embed)

    return embedding_list


# DNN残差块的定义
class ResidualBlock(Layer):
    def __init__(self, units):  # units表示的是DNN隐藏层神经元数量
        super(ResidualBlock, self).__init__()
        self.units = units

    def build(self, input_shape):
        out_dim = input_shape[-1]
        self.dnn1 = Dense(self.units, activation='relu')
        self.dnn2 = Dense(out_dim, activation='relu')  # 保证输入的维度和输出的维度一致才能进行残差连接

    def call(self, inputs):
        x = inputs
        x = self.dnn1(x)
        x = self.dnn2(x)
        x = Activation('relu')(x + inputs)  # 残差操作
        return x


# block_nums表示DNN残差块的数量
def get_dnn_logits(dnn_inputs, block_nums=3):
    dnn_out = dnn_inputs
    for i in range(block_nums):
        dnn_out = ResidualBlock(64)(dnn_out)

    # 将dnn的输出转化成logits
    dnn_logits = Dense(1, activation='sigmoid')(dnn_out)

    return dnn_logits


def DeepCrossing(dnn_feature_columns):
    # 构建输入层,即所有特征对应的Input()层,这里使用字典的形式返回,方便后续构建模型
    dense_input_dict, sparse_input_dict = build_input_layers(dnn_feature_columns)
    # 构建模型的输入层,模型的输入层不能是字典的形式,应该将字典的形式转换成列表的形式
    # 注意:这里实际的输入与Input()层的对应,是通过模型输入时候的字典数据的key与对应name的Input层
    input_layers = list(dense_input_dict.values()) + list(sparse_input_dict.values())

    # 构建维度为k的embedding层,这里使用字典的形式返回,方便后面搭建模型
    embedding_layer_dict = build_embedding_layers(dnn_feature_columns, sparse_input_dict, is_linear=False)

    # 将所有的dense特征拼接到一起
    dense_dnn_list = list(dense_input_dict.values())
    dense_dnn_inputs = Concatenate(axis=1)(dense_dnn_list)  # B x n (n表示数值特征的数量)

    # 因为需要将其与dense特征拼接到一起所以需要Flatten,不进行Flatten的Embedding层输出的维度为:Bx1xdim
    sparse_dnn_list = concat_embedding_list(dnn_feature_columns, sparse_input_dict, embedding_layer_dict, flatten=True)

    sparse_dnn_inputs = Concatenate(axis=1)(sparse_dnn_list)  # B x m*dim (n表示类别特征的数量,dim表示embedding的维度)

    # 将dense特征和Sparse特征拼接到一起
    dnn_inputs = Concatenate(axis=1)([dense_dnn_inputs, sparse_dnn_inputs])  # B x (n + m*dim)

    # 输入到dnn中,需要提前定义需要几个残差块
    output_layer = get_dnn_logits(dnn_inputs, block_nums=3)

    model = Model(input_layers, output_layer)
    return model


if __name__ == "__main__":
    # 读取数据
    data = pd.read_csv('./data/criteo_sample.txt')

    # 划分dense和sparse特征
    columns = data.columns.values
    dense_features = [feat for feat in columns if 'I' in feat]
    sparse_features = [feat for feat in columns if 'C' in feat]

    # 简单的数据预处理
    train_data = data_process(data, dense_features, sparse_features)
    train_data['label'] = data['label']

    # 将特征做标记
    dnn_feature_columns = [SparseFeat(feat, vocabulary_size=data[feat].nunique(), embedding_dim=4)
                           for feat in sparse_features] + [DenseFeat(feat, 1, )
                                                           for feat in dense_features]

    # 构建DeepCrossing模型
    history = DeepCrossing(dnn_feature_columns)

    history.summary()
    history.compile(optimizer="adam",
                    loss="binary_crossentropy",
                    metrics=["binary_crossentropy", tf.keras.metrics.AUC(name='auc')])

    # 将输入数据转化成字典的形式输入
    train_model_input = {name: data[name] for name in dense_features + sparse_features}
    # 模型训练
    history.fit(train_model_input, train_data['label'].values,
                batch_size=64, epochs=5, validation_split=0.2, )

输出:

Model: "functional_1"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
C1 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
C2 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
C3 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
C4 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
C5 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
C6 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
C7 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
C8 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
C9 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
C10 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C11 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C12 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C13 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C14 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C15 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C16 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C17 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C18 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C19 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C20 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C21 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C22 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C23 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C24 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C25 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
C26 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
kd_emb_C1 (Embedding)           (None, 1, 4)         112         C1[0][0]                         
__________________________________________________________________________________________________
kd_emb_C2 (Embedding)           (None, 1, 4)         372         C2[0][0]                         
__________________________________________________________________________________________________
kd_emb_C3 (Embedding)           (None, 1, 4)         692         C3[0][0]                         
__________________________________________________________________________________________________
kd_emb_C4 (Embedding)           (None, 1, 4)         632         C4[0][0]                         
__________________________________________________________________________________________________
kd_emb_C5 (Embedding)           (None, 1, 4)         52          C5[0][0]                         
__________________________________________________________________________________________________
kd_emb_C6 (Embedding)           (None, 1, 4)         32          C6[0][0]                         
__________________________________________________________________________________________________
kd_emb_C7 (Embedding)           (None, 1, 4)         736         C7[0][0]                         
__________________________________________________________________________________________________
kd_emb_C8 (Embedding)           (None, 1, 4)         80          C8[0][0]                         
__________________________________________________________________________________________________
kd_emb_C9 (Embedding)           (None, 1, 4)         12          C9[0][0]                         
__________________________________________________________________________________________________
kd_emb_C10 (Embedding)          (None, 1, 4)         572         C10[0][0]                        
__________________________________________________________________________________________________
kd_emb_C11 (Embedding)          (None, 1, 4)         696         C11[0][0]                        
__________________________________________________________________________________________________
kd_emb_C12 (Embedding)          (None, 1, 4)         684         C12[0][0]                        
__________________________________________________________________________________________________
kd_emb_C13 (Embedding)          (None, 1, 4)         668         C13[0][0]                        
__________________________________________________________________________________________________
kd_emb_C14 (Embedding)          (None, 1, 4)         60          C14[0][0]                        
__________________________________________________________________________________________________
kd_emb_C15 (Embedding)          (None, 1, 4)         684         C15[0][0]                        
__________________________________________________________________________________________________
kd_emb_C16 (Embedding)          (None, 1, 4)         676         C16[0][0]                        
__________________________________________________________________________________________________
kd_emb_C17 (Embedding)          (None, 1, 4)         40          C17[0][0]                        
__________________________________________________________________________________________________
kd_emb_C18 (Embedding)          (None, 1, 4)         512         C18[0][0]                        
__________________________________________________________________________________________________
kd_emb_C19 (Embedding)          (None, 1, 4)         180         C19[0][0]                        
__________________________________________________________________________________________________
kd_emb_C20 (Embedding)          (None, 1, 4)         20          C20[0][0]                        
__________________________________________________________________________________________________
kd_emb_C21 (Embedding)          (None, 1, 4)         680         C21[0][0]                        
__________________________________________________________________________________________________
kd_emb_C22 (Embedding)          (None, 1, 4)         28          C22[0][0]                        
__________________________________________________________________________________________________
kd_emb_C23 (Embedding)          (None, 1, 4)         44          C23[0][0]                        
__________________________________________________________________________________________________
kd_emb_C24 (Embedding)          (None, 1, 4)         504         C24[0][0]                        
__________________________________________________________________________________________________
kd_emb_C25 (Embedding)          (None, 1, 4)         84          C25[0][0]                        
__________________________________________________________________________________________________
kd_emb_C26 (Embedding)          (None, 1, 4)         364         C26[0][0]                        
__________________________________________________________________________________________________
I1 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
I2 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
I3 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
I4 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
I5 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
I6 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
I7 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
I8 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
I9 (InputLayer)                 [(None, 1)]          0                                            
__________________________________________________________________________________________________
I10 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
I11 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
I12 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
I13 (InputLayer)                [(None, 1)]          0                                            
__________________________________________________________________________________________________
flatten (Flatten)               (None, 4)            0           kd_emb_C1[0][0]                  
__________________________________________________________________________________________________
flatten_1 (Flatten)             (None, 4)            0           kd_emb_C2[0][0]                  
__________________________________________________________________________________________________
flatten_2 (Flatten)             (None, 4)            0           kd_emb_C3[0][0]                  
__________________________________________________________________________________________________
flatten_3 (Flatten)             (None, 4)            0           kd_emb_C4[0][0]                  
__________________________________________________________________________________________________
flatten_4 (Flatten)             (None, 4)            0           kd_emb_C5[0][0]                  
__________________________________________________________________________________________________
flatten_5 (Flatten)             (None, 4)            0           kd_emb_C6[0][0]                  
__________________________________________________________________________________________________
flatten_6 (Flatten)             (None, 4)            0           kd_emb_C7[0][0]                  
__________________________________________________________________________________________________
flatten_7 (Flatten)             (None, 4)            0           kd_emb_C8[0][0]                  
__________________________________________________________________________________________________
flatten_8 (Flatten)             (None, 4)            0           kd_emb_C9[0][0]                  
__________________________________________________________________________________________________
flatten_9 (Flatten)             (None, 4)            0           kd_emb_C10[0][0]                 
__________________________________________________________________________________________________
flatten_10 (Flatten)            (None, 4)            0           kd_emb_C11[0][0]                 
__________________________________________________________________________________________________
flatten_11 (Flatten)            (None, 4)            0           kd_emb_C12[0][0]                 
__________________________________________________________________________________________________
flatten_12 (Flatten)            (None, 4)            0           kd_emb_C13[0][0]                 
__________________________________________________________________________________________________
flatten_13 (Flatten)            (None, 4)            0           kd_emb_C14[0][0]                 
__________________________________________________________________________________________________
flatten_14 (Flatten)            (None, 4)            0           kd_emb_C15[0][0]                 
__________________________________________________________________________________________________
flatten_15 (Flatten)            (None, 4)            0           kd_emb_C16[0][0]                 
__________________________________________________________________________________________________
flatten_16 (Flatten)            (None, 4)            0           kd_emb_C17[0][0]                 
__________________________________________________________________________________________________
flatten_17 (Flatten)            (None, 4)            0           kd_emb_C18[0][0]                 
__________________________________________________________________________________________________
flatten_18 (Flatten)            (None, 4)            0           kd_emb_C19[0][0]                 
__________________________________________________________________________________________________
flatten_19 (Flatten)            (None, 4)            0           kd_emb_C20[0][0]                 
__________________________________________________________________________________________________
flatten_20 (Flatten)            (None, 4)            0           kd_emb_C21[0][0]                 
__________________________________________________________________________________________________
flatten_21 (Flatten)            (None, 4)            0           kd_emb_C22[0][0]                 
__________________________________________________________________________________________________
flatten_22 (Flatten)            (None, 4)            0           kd_emb_C23[0][0]                 
__________________________________________________________________________________________________
flatten_23 (Flatten)            (None, 4)            0           kd_emb_C24[0][0]                 
__________________________________________________________________________________________________
flatten_24 (Flatten)            (None, 4)            0           kd_emb_C25[0][0]                 
__________________________________________________________________________________________________
flatten_25 (Flatten)            (None, 4)            0           kd_emb_C26[0][0]                 
__________________________________________________________________________________________________
concatenate (Concatenate)       (None, 13)           0           I1[0][0]                         
                                                                 I2[0][0]                         
                                                                 I3[0][0]                         
                                                                 I4[0][0]                         
                                                                 I5[0][0]                         
                                                                 I6[0][0]                         
                                                                 I7[0][0]                         
                                                                 I8[0][0]                         
                                                                 I9[0][0]                         
                                                                 I10[0][0]                        
                                                                 I11[0][0]                        
                                                                 I12[0][0]                        
                                                                 I13[0][0]                        
__________________________________________________________________________________________________
concatenate_1 (Concatenate)     (None, 104)          0           flatten[0][0]                    
                                                                 flatten_1[0][0]                  
                                                                 flatten_2[0][0]                  
                                                                 flatten_3[0][0]                  
                                                                 flatten_4[0][0]                  
                                                                 flatten_5[0][0]                  
                                                                 flatten_6[0][0]                  
                                                                 flatten_7[0][0]                  
                                                                 flatten_8[0][0]                  
                                                                 flatten_9[0][0]                  
                                                                 flatten_10[0][0]                 
                                                                 flatten_11[0][0]                 
                                                                 flatten_12[0][0]                 
                                                                 flatten_13[0][0]                 
                                                                 flatten_14[0][0]                 
                                                                 flatten_15[0][0]                 
                                                                 flatten_16[0][0]                 
                                                                 flatten_17[0][0]                 
                                                                 flatten_18[0][0]                 
                                                                 flatten_19[0][0]                 
                                                                 flatten_20[0][0]                 
                                                                 flatten_21[0][0]                 
                                                                 flatten_22[0][0]                 
                                                                 flatten_23[0][0]                 
                                                                 flatten_24[0][0]                 
                                                                 flatten_25[0][0]                 
__________________________________________________________________________________________________
concatenate_2 (Concatenate)     (None, 117)          0           concatenate[0][0]                
                                                                 concatenate_1[0][0]              
__________________________________________________________________________________________________
residual_block (ResidualBlock)  (None, 117)          15157       concatenate_2[0][0]              
__________________________________________________________________________________________________
residual_block_1 (ResidualBlock (None, 117)          15157       residual_block[0][0]             
__________________________________________________________________________________________________
residual_block_2 (ResidualBlock (None, 117)          15157       residual_block_1[0][0]           
__________________________________________________________________________________________________
dense (Dense)                   (None, 1)            118         residual_block_2[0][0]           
==================================================================================================
Total params: 54,805
Trainable params: 54,805
Non-trainable params: 0
__________________________________________________________________________________________________
Epoch 1/5
3/3 [==============================] - 1s 245ms/step - loss: 1.3253 - binary_crossentropy: 1.3253 - auc: 0.4711 - val_loss: 0.7532 - val_binary_crossentropy: 0.7532 - val_auc: 0.5741
Epoch 2/5
3/3 [==============================] - 0s 19ms/step - loss: 0.6843 - binary_crossentropy: 0.6843 - auc: 0.5240 - val_loss: 1.0938 - val_binary_crossentropy: 1.0938 - val_auc: 0.6111
Epoch 3/5
3/3 [==============================] - 0s 20ms/step - loss: 0.7714 - binary_crossentropy: 0.7714 - auc: 0.5924 - val_loss: 0.9385 - val_binary_crossentropy: 0.9385 - val_auc: 0.6311
Epoch 4/5
3/3 [==============================] - 0s 20ms/step - loss: 0.6290 - binary_crossentropy: 0.6290 - auc: 0.6262 - val_loss: 0.7062 - val_binary_crossentropy: 0.7062 - val_auc: 0.6339
Epoch 5/5
3/3 [==============================] - 0s 20ms/step - loss: 0.5251 - binary_crossentropy: 0.5251 - auc: 0.6303 - val_loss: 0.6145 - val_binary_crossentropy: 0.6145 - val_auc: 0.6040

 

参考

https://www.kaggle.com/c/criteo-display-ad-challenge/data

https://github.com/datawhalechina/team-learning-rs/tree/master/DeepRecommendationModel

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zda天天爱打卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值