专栏首页Soul Joy Hub深度推荐模型——FFM

深度推荐模型——FFM

视频讲解:https://www.yuque.com/chudi/tzqav9/ny150b#aalY8

import tensorflow as tf
from tensorflow import keras
from utils import *

EPOCH = 10
STEP_PRINT = 200
STOP_STEP = 2000

LEARNING_RATE = 1e-4
BATCH_SIZE = 32
LAMDA = 1e-3

VEC_DIM = 10
FIELD_NUM = 5
base, test = loadData()
FEAT_NUM = base.shape[1] - 1
K = tf.keras.backend


class CrossLayer(keras.layers.Layer):
    def __init__(self, field_dict, field_dim, feat_num, vec_dim, **kwargs):
        self.field_dict = field_dict
        self.field_dim = field_dim
        self.feat_num = feat_num
        self.vec_dim = vec_dim
        super(CrossLayer, self).__init__(**kwargs)

    def build(self, input_shape):
        self.kernel = self.add_weight(name='kernel', shape=(self.feat_num, self.field_dim, self.vec_dim),
                                      initializer='uniform', trainable=True)
        super(CrossLayer, self).build(input_shape)

    def call(self, inputs, **kwargs):
        self.field_cross = K.constant(0, dtype='float32')
        for i in range(self.feat_num):
            for j in range(i + 1, self.feat_num):
                VV = tf.math.reduce_sum(
                    tf.math.multiply(self.kernel[i, self.field_dict[j]], self.kernel[j, self.field_dict[i]]))
                value = tf.math.multiply(VV, tf.math.multiply(inputs[:, i], inputs[:, j]))
                self.field_cross += value


def run():
    val_x, val_y = getAllData(test)
    train_x, train_y = getAllData(base)
    field_dict = getFieldMap(base.columns.values.tolist())

    inputs = keras.Input((val_x.shape[1],))
    liner = keras.layers.Dense(1)(inputs)
    cross = CrossLayer(field_dict, FIELD_NUM, FEAT_NUM, VEC_DIM)(inputs)
    add = keras.layers.Add()([liner, cross])
    predictions = keras.layers.Activation('sigmoid')(add)

    model = keras.Model(inputs, predictions)
    model.compile(loss='binary_crossentropy', optimizer=tf.train.AdamOptimizer(0.001), metrics=[keras.metrics.AUC()])
    tbCallBack = keras.callbacks.TensorBoard(log_dir='./logs',
                                             histogram_freq=0,
                                             write_graph=True,
                                             write_grads=True,
                                             write_images=True,
                                             embeddings_freq=0,
                                             embeddings_layer_names=None,
                                             embeddings_metadata=None)

    model.fit(train_x, train_y, batch_size=BATCH_SIZE, epochs=EPOCH, verbose=2, validation_data=(val_x, val_y),
              callbacks=[tbCallBack])


run()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 推荐系统遇上深度学习(二)--FFM模型理论和实践

    推荐系统遇上深度学习系列: 推荐系统遇上深度学习(一)--FM模型理论和实践 1、FFM理论 在CTR预估中,经常会遇到one-hot类型的变量,one-ho...

    石晓文
  • FFM算法解析及Python实现

    通过引入field的概念,FFM把相同性质的特征归于同一个field,相当于把FM中已经细分的feature再次进行拆分从而进行特征组合的二分类模型。

    Bo_hemian
  • 深度推荐模型——PNN [TOIS 16][交大]

    视频讲解:https://www.yuque.com/chudi/tzqav9/ny150b#aalY8

    用户1621453
  • 深度推荐模型——FNN [ECIR 16]

    视频讲解:https://www.yuque.com/chudi/tzqav9/ny150b#aalY8

    用户1621453
  • 深度推荐模型——FM

    视频讲解:https://www.yuque.com/chudi/tzqav9/ny150b#aalY8

    用户1621453
  • 深度推荐模型——FiBiNet[RecSys 19][Weibo]

    微博提出的FiBiNet相当于对FNN进行了两部分的改进: 1、SENET Layer。作者认为模型需要学习不同特征的一个重要程度,对重要特征加权,对蕴含信息...

    用户1621453
  • 深度推荐模型——AutoInt [CIKM 19][北大]

    视频讲解:https://www.yuque.com/chudi/tzqav9/ny150b#aalY8

    用户1621453
  • 深度推荐模型——xDeepFM [KDD 18][Microsoft]

    视频讲解:https://www.yuque.com/chudi/tzqav9/ny150b#aalY8

    用户1621453
  • 深度推荐模型——AFM [IJCAI 17][浙大、新加坡国立大学]

    视频讲解:https://www.yuque.com/chudi/tzqav9/ny150b#2XiWP

    用户1621453

扫码关注云+社区

领取腾讯云代金券