deepfm代码参考

https://github.com/lambdaji/tf_repos/blob/master/deep_ctr/Model_pipeline/DeepFM.py

 

https://www.cnblogs.com/wkang/p/9881921.html 单机版连续型和分类型有效数据处理过程

import shutil
import os
import json
#import glob
from datetime import date, timedelta
import time
import random
import tensorflow as tf
import ast
import numpy as np
import pandas as pd
from tensorflow.python.estimator.inputs import numpy_io
import re

line='0.0 f101001:520;f102001:5026,5048,5073;f106001:10034;f108001:15364;f110001:20001;f201001:25248;f301001:30339;f306001:35002;f501001:40001;f502001:45001;f502002:50001;f503001:55025;f505001:60006;f601002:65004;f602002:70004;f603002:75002;f604002:80002;f605002:85002;f606002:90002;f607001:95001;f608001:100001;f609001:105002;f610001:110001;f611001:115004;f808001:120158,120255,120126,120457,120015,120469,120153,120473,120093;f809001:125027,125015,125034;f810001:130022,130039,130021;f808002:135305,135223,135024,135101,135315,135172,135200,135113,135322;f809002:140030,140047,140028;f810002:145025,145023,145042;f9916:150036,150272,150112,150146,150054,150322;f9917:155035,155338,155052,155134,155180,155349;f9918:160024,160176,160032,160070,160089,160182'

sess = tf.Session()

columns = tf.string_split([line], ' ')
labels = tf.string_to_number(columns.values[0], out_type=tf.float32)
splits = tf.string_split(columns.values[1:], ';')

 

# print splits
# for i in range(0,tf.size(splits).):
# print(sess.run(splits.read(i)))

sess.run(splits)
print sess.run(tf.size(splits))
print sess.run(tf.shape(splits))

 

id_vals = tf.reshape(splits.values,splits.dense_shape)
print sess.run(id_vals)
s1=tf.string_split([id_vals[0][1]],',')
s2=s1.values[0]

print sess.run(s1)
print sess.run(s2)

# a1=id_vals[0][1]
# a2=sess.run(id_vals[0][1])
# print a2

 


feat_ids, feat_vals = tf.split(id_vals,num_or_size_splits=2,axis=1)

转载于:https://www.cnblogs.com/zhangbojiangfeng/p/10899684.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 DeepFM 模型的 TensorFlow 2.0 实现代码: ```python import tensorflow as tf from tensorflow.keras.layers import Input, Dense, Dropout, Concatenate from tensorflow.keras.regularizers import l2 from tensorflow.keras.models import Model from tensorflow.keras.optimizers import Adam class DeepFM: def __init__(self, feature_dim, embedding_dim=8, hidden_units=(32, 32), dropout_rate=0.5, l2_reg=0.01, learning_rate=0.001): self.feature_dim = feature_dim self.embedding_dim = embedding_dim self.hidden_units = hidden_units self.dropout_rate = dropout_rate self.l2_reg = l2_reg self.learning_rate = learning_rate def build(self): input_layer = Input((self.feature_dim,)) embedding_layer = tf.keras.layers.Embedding(self.feature_dim, self.embedding_dim)(input_layer) embedding_layer = tf.keras.layers.Flatten()(embedding_layer) linear_layer = tf.keras.layers.Dense(units=1, activation=None)(input_layer) fm_layer = tf.keras.layers.GlobalAveragePooling1D()(embedding_layer) deep_layer = tf.keras.layers.Dense(units=self.hidden_units[0], activation='relu')(embedding_layer) deep_layer = tf.keras.layers.Dropout(self.dropout_rate)(deep_layer) for units in self.hidden_units[1:]: deep_layer = tf.keras.layers.Dense(units=units, activation='relu')(deep_layer) deep_layer = tf.keras.layers.Dropout(self.dropout_rate)(deep_layer) deep_fm_layer = Concatenate()([fm_layer, deep_layer]) output_layer = tf.keras.layers.Dense(units=1, activation='sigmoid', kernel_regularizer=l2(self.l2_reg))(deep_fm_layer) model = Model(inputs=input_layer, outputs=output_layer) optimizer = Adam(lr=self.learning_rate) model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy']) return model ``` 其中,`feature_dim` 表示特征的维度,`embedding_dim` 表示嵌入层的维度,`hidden_units` 表示深度部分的神经元数量,`dropout_rate` 表示 dropout 比例,`l2_reg` 表示 L2 正则项系数,`learning_rate` 表示学习率。在 `build()` 方法里,我们首先定义了输入层和嵌入层,然后分别计算了线性部分、FM 部分和深度部分的结果,最后将 FM 和深度部分的结果拼接起来,并通过一个全连接层输出最终结果。这里使用了 Adam 优化器和二分类交叉熵损失函数,并编译了模型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值