前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度推荐模型——FM

深度推荐模型——FM

作者头像
小爷毛毛_卓寿杰
发布2021-03-20 14:16:22
4770
发布2021-03-20 14:16:22
举报
文章被收录于专栏:Soul Joy HubSoul Joy Hub

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

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
import tensorflow as tf
import numpy as np
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
base, test = loadData()
FEAT_NUM = base.shape[1] - 1
K = tf.keras.backend


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

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

    def call(self, inputs, **kwargs):
        a = K.pow(K.dot(inputs, self.V), 2)
        b = K.dot(K.pow(inputs, 2), K.pow(self.V, 2))
        return 0.5 * K.mean(a - b, 1, keepdims=True)


def run():
    val_x, val_y = getAllData(test)
    train_x, train_y = getAllData(base)

    inputs = keras.Input((val_x.shape[1],))
    liner = keras.layers.Dense(1)(inputs)
    cross = CrossLayer(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',  # log 目录
                                             histogram_freq=0,  # 按照何等频率(epoch)来计算直方图,0为不计算
                                             #                  batch_size=32,     # 用多大量的数据计算直方图
                                             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()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档