当前位置: 首页 > news >正文

旅游兼职网站建设信阳企业网站建设

旅游兼职网站建设,信阳企业网站建设,会计培训班初级费用,python的网站开发源码目录 1 keras实现Deepfm demo 2 deepctr模版 3 其他实现方式 ctr_Kera 模型 数据集 预处理 执行步骤 4何为focal loss 参考 1 keras实现Deepfm 假设我们有两种 field 的特征#xff0c;连续型和离散型#xff0c;连续型 field 一般不做处理沿用原值#xff0c;离散型一…目录 1 keras实现Deepfm demo 2 deepctr模版 3 其他实现方式 ctr_Kera 模型 数据集 预处理 执行步骤 4何为focal loss 参考 1 keras实现Deepfm 假设我们有两种 field 的特征连续型和离散型连续型 field 一般不做处理沿用原值离散型一般会做One-hot编码。离散型又能进一步分为单值型和多值型单值型在Onehot后的稀疏向量中只有一个特征为1其余都是0而多值型在Onehot后有多于1个特征为1其余是0。 DeepFM模型本质 将Wide Deep 部分的wide部分由 人工特征工程LR 转换为FM模型避开了人工特征工程 FM模型与deep part共享feature embedding。 为什么要用FM代替线性部分wide呢 因为线性模型有个致命的缺点无法提取高阶的组合特征。 FM通过隐向量latent vector做内积来表示组合特征从理论上解决了低阶和高阶组合特征提取的问题。但是实际应用中受限于计算复杂度一般也就只考虑到2阶交叉特征。 DeepFM包含两部分神经网络部分与因子分解机部分分别负责低阶特征的提取和高阶特征的提取。这两部分共享同样的输入。 不需要预训练 FM 得到隐向量 不需要人工特征工程 能同时学习低阶和高阶的组合特征 FM 模块和 Deep 模块共享 Feature Embedding 部分可以更快的训练以及更精确的训练学习。 https://blog.csdn.net/m0_51933492/article/details/126888136 # FM的一阶特征运算 #将预处理完的类别特征列合并 cat_columns [movie_ind_col, user_ind_col, user_genre_ind_col, item_genre_ind_col]#数值型特征不用经过独热编码和特征稠密化转换成可以输入神经网络的dense类型直接输入网络【推荐系统】DeepFM模型_deepfm多分类求auc_—Xi—的博客-CSDN博客 Model: model __________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to movieAvgRating (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ movieGenre1 (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ movieGenre2 (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ movieGenre3 (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ movieId (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ movieRatingCount (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ movieRatingStddev (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ releaseYear (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ userAvgRating (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ userGenre1 (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ userGenre2 (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ userGenre3 (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ userGenre4 (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ userGenre5 (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ userId (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ userRatedMovie1 (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ userRatingCount (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ userRatingStddev (InputLayer) [(None,)] 0 __________________________________________________________________________________________________ dense_features_16 (DenseFeature (None, 10) 190 movieAvgRating[0][0] movieGenre1[0][0] movieGenre2[0][0] movieGenre3[0][0] movieId[0][0] movieRatingCount[0][0] movieRatingStddev[0][0] releaseYear[0][0] userAvgRating[0][0] userGenre1[0][0] userGenre2[0][0] userGenre3[0][0] userGenre4[0][0] userGenre5[0][0] userId[0][0] userRatedMovie1[0][0] userRatingCount[0][0] userRatingStddev[0][0] __________________________________________________________________________________________________ dense_features_17 (DenseFeature (None, 10) 10010 movieAvgRating[0][0] movieGenre1[0][0] movieGenre2[0][0] movieGenre3[0][0] movieId[0][0] movieRatingCount[0][0] movieRatingStddev[0][0] releaseYear[0][0] userAvgRating[0][0] userGenre1[0][0] userGenre2[0][0] userGenre3[0][0] userGenre4[0][0] userGenre5[0][0] userId[0][0] userRatedMovie1[0][0] userRatingCount[0][0] userRatingStddev[0][0] __________________________________________________________________________________________________ dense_features_18 (DenseFeature (None, 10) 190 movieAvgRating[0][0] movieGenre1[0][0] movieGenre2[0][0] movieGenre3[0][0] movieId[0][0] movieRatingCount[0][0] movieRatingStddev[0][0] releaseYear[0][0] userAvgRating[0][0] userGenre1[0][0] userGenre2[0][0] userGenre3[0][0] userGenre4[0][0] userGenre5[0][0] userId[0][0] userRatedMovie1[0][0] userRatingCount[0][0] userRatingStddev[0][0] __________________________________________________________________________________________________ dense_features_19 (DenseFeature (None, 10) 300010 movieAvgRating[0][0] movieGenre1[0][0] movieGenre2[0][0] movieGenre3[0][0] movieId[0][0] movieRatingCount[0][0] movieRatingStddev[0][0] releaseYear[0][0] userAvgRating[0][0] userGenre1[0][0] userGenre2[0][0] userGenre3[0][0] userGenre4[0][0] userGenre5[0][0] userId[0][0] userRatedMovie1[0][0] userRatingCount[0][0] userRatingStddev[0][0] __________________________________________________________________________________________________ dense_features_20 (DenseFeature (None, 7) 0 movieAvgRating[0][0] movieGenre1[0][0] movieGenre2[0][0] movieGenre3[0][0] movieId[0][0] movieRatingCount[0][0] movieRatingStddev[0][0] releaseYear[0][0] userAvgRating[0][0] userGenre1[0][0] userGenre2[0][0] userGenre3[0][0] userGenre4[0][0] userGenre5[0][0] userId[0][0] userRatedMovie1[0][0] userRatingCount[0][0] userRatingStddev[0][0] __________________________________________________________________________________________________ dense_18 (Dense) (None, 64) 704 dense_features_16[0][0] __________________________________________________________________________________________________ dense_19 (Dense) (None, 64) 704 dense_features_17[0][0] __________________________________________________________________________________________________ dense_20 (Dense) (None, 64) 704 dense_features_18[0][0] __________________________________________________________________________________________________ dense_21 (Dense) (None, 64) 704 dense_features_19[0][0] __________________________________________________________________________________________________ dense_22 (Dense) (None, 64) 512 dense_features_20[0][0] __________________________________________________________________________________________________ reshape_10 (Reshape) (None, 10, 64) 0 dense_18[0][0] __________________________________________________________________________________________________ reshape_11 (Reshape) (None, 10, 64) 0 dense_19[0][0] __________________________________________________________________________________________________ reshape_12 (Reshape) (None, 10, 64) 0 dense_20[0][0] __________________________________________________________________________________________________ reshape_13 (Reshape) (None, 10, 64) 0 dense_21[0][0] __________________________________________________________________________________________________ reshape_14 (Reshape) (None, 10, 64) 0 dense_22[0][0] __________________________________________________________________________________________________ concatenate_2 (Concatenate) (None, 50, 64) 0 reshape_10[0][0] reshape_11[0][0] reshape_12[0][0] reshape_13[0][0] reshape_14[0][0] __________________________________________________________________________________________________ dense_features_14 (DenseFeature (None, 31040) 0 movieAvgRating[0][0] movieGenre1[0][0] movieGenre2[0][0] movieGenre3[0][0] movieId[0][0] movieRatingCount[0][0] movieRatingStddev[0][0] releaseYear[0][0] userAvgRating[0][0] userGenre1[0][0] userGenre2[0][0] userGenre3[0][0] userGenre4[0][0] userGenre5[0][0] userId[0][0] userRatedMovie1[0][0] userRatingCount[0][0] userRatingStddev[0][0] __________________________________________________________________________________________________ dense_features_15 (DenseFeature (None, 7) 0 movieAvgRating[0][0] movieGenre1[0][0] movieGenre2[0][0] movieGenre3[0][0] movieId[0][0] movieRatingCount[0][0] movieRatingStddev[0][0] releaseYear[0][0] userAvgRating[0][0] userGenre1[0][0] userGenre2[0][0] userGenre3[0][0] userGenre4[0][0] userGenre5[0][0] userId[0][0] userRatedMovie1[0][0] userRatingCount[0][0] userRatingStddev[0][0] __________________________________________________________________________________________________ reduce_layer (ReduceLayer) (None, 64) 0 concatenate_2[0][0] __________________________________________________________________________________________________ multiply_1 (Multiply) (None, 50, 64) 0 concatenate_2[0][0] concatenate_2[0][0] __________________________________________________________________________________________________ flatten_2 (Flatten) (None, 3200) 0 concatenate_2[0][0] __________________________________________________________________________________________________ dense_16 (Dense) (None, 1) 31041 dense_features_14[0][0] __________________________________________________________________________________________________ dense_17 (Dense) (None, 1) 8 dense_features_15[0][0] __________________________________________________________________________________________________ multiply (Multiply) (None, 64) 0 reduce_layer[0][0] reduce_layer[0][0] __________________________________________________________________________________________________ reduce_layer_1 (ReduceLayer) (None, 64) 0 multiply_1[0][0] __________________________________________________________________________________________________ dense_23 (Dense) (None, 32) 102432 flatten_2[0][0] __________________________________________________________________________________________________ add_2 (Add) (None, 1) 0 dense_16[0][0] dense_17[0][0] __________________________________________________________________________________________________ subtract (Subtract) (None, 64) 0 multiply[0][0] reduce_layer_1[0][0] __________________________________________________________________________________________________ dense_24 (Dense) (None, 16) 528 dense_23[0][0] __________________________________________________________________________________________________ concatenate_3 (Concatenate) (None, 81) 0 add_2[0][0] subtract[0][0] dense_24[0][0] __________________________________________________________________________________________________ dense_25 (Dense) (None, 1) 82 concatenate_3[0][0] Total params: 447,819 Trainable params: 447,819 Non-trainable params: 0 __________________________________________________________________________________________________ None TensorFlow的plot_model功能_plot_model函数_buptwhq的博客-CSDN博客 from keras.utils.vis_utils import plot_model ... plot_model(model, to_filemodel.png, show_shapesTrue, show_layer_namesFalse, rankdirTB)8. keras - 绘制网络结构_keras 设计网络_Micheal超的博客-CSDN博客 问题一什么是特征交互为什么要进行特征交互 二阶特征交互通过对主流应用市场的研究我们发现人们经常在用餐时间下载送餐的应用程序这就表明应用类别和时间戳之间的阶数-2交互作用是CTR预测的一个信号。 三阶或者高阶特征交互我们还发现男性青少年喜欢射击游戏和RPG游戏这意味着应用类别、用户性别和年龄的(阶数-3)交互是CTR的另一个信号。 根据谷歌的WD模型的应用 作者发现同时考虑低阶和高阶的交互特征比单独考虑其中之一有更多的改进 问题二为啥人工特征工程有挑战性 一些特征工程比较容易理解就比如上面提到的那两个 这时候往往我们都能很容易的设计或者组合那样的特征。 然而其他大部分特征交互都隐藏在数据中难以先验识别比如经典的关联规则 尿布和啤酒 就是从数据中挖掘出来的而不是由专家发现的只能由机器学习自动捕捉即使是对于容易理解的交互专家们似乎也不可能详尽地对它们进行建模特别是当特征的数量很大的时候.。 demo 【CTR模型】TensorFlow2.0 的 xDeepFM 实现与实战(附代码数据)_tensorflow ctr 模型_VariableX的博客-CSDN博客 python相减substract_浅谈keras中的Merge层(实现层的相加、相减、相乘实例)_林祈墨的博客-CSDN博客 # coding:utf-8 from keras.layers import * from keras.models import Model from MyMeanPooling import MyMeanPool from MySumLayer import MySumLayer from MyFlatten import MyFlatten from keras.utils import plot_model# numeric fields in_score Input(shape[1], namescore) # None*1 in_sales Input(shape[1], namesales) # None*1 # single value categorical fields in_gender Input(shape[1], namegender) # None*1 in_age Input(shape[1], nameage) # None*1 # multiple value categorical fields in_interest Input(shape[3], nameinterest) # None*3, 最长长度3 in_topic Input(shape[4], nametopic) # None*4, 最长长度4First Order Embeddings numeric Concatenate()([in_score, in_sales]) # None*2 dense_numeric Dense(1)(numeric) # None*1 emb_gender_1d Reshape([1])(Embedding(3, 1)(in_gender)) # None*1, 性别取值3种 emb_age_1d Reshape([1])(Embedding(10, 1)(in_age)) # None*1, 年龄取值10种 emb_interest_1d Embedding(11, 1, mask_zeroTrue)(in_interest) # None*3*1 emb_interest_1d MyMeanPool(axis1)(emb_interest_1d) # None*1 emb_topic_1d Embedding(22, 1, mask_zeroTrue)(in_topic) # None*4*1 emb_topic_1d MyMeanPool(axis1)(emb_topic_1d) # None*1compute y_first_order Add()([dense_numeric,emb_gender_1d, emb_age_1d,emb_interest_1d,emb_topic_1d]) # None*1latent 8 Second Order Embeddings emb_score_Kd RepeatVector(1)(Dense(latent)(in_score)) # None * 1 * K emb_sales_Kd RepeatVector(1)(Dense(latent)(in_sales)) # None * 1 * K emb_gender_Kd Embedding(3, latent)(in_gender) # None * 1 * K emb_age_Kd Embedding(10, latent)(in_age) # None * 1 * K emb_interest_Kd Embedding(11, latent, mask_zeroTrue)(in_interest) # None * 3 * K emb_interest_Kd RepeatVector(1)(MyMeanPool(axis1)(emb_interest_Kd)) # None * 1 * K emb_topic_Kd Embedding(22, latent, mask_zeroTrue)(in_topic) # None * 4 * K emb_topic_Kd RepeatVector(1)(MyMeanPool(axis1)(emb_topic_Kd)) # None * 1 * Kemb Concatenate(axis1)([emb_score_Kd,emb_sales_Kd,emb_gender_Kd,emb_age_Kd,emb_interest_Kd,emb_topic_Kd]) # None * 6 * Kcompute summed_features_emb MySumLayer(axis1)(emb) # None * K summed_features_emb_square Multiply()([summed_features_emb,summed_features_emb]) # None * Ksquared_features_emb Multiply()([emb, emb]) # None * 9 * K squared_sum_features_emb MySumLayer(axis1)(squared_features_emb) # Non * Ksub Subtract()([summed_features_emb_square, squared_sum_features_emb]) # None * K sub Lambda(lambda x:x*0.5)(sub) # None * Ky_second_order MySumLayer(axis1)(sub) # None * 1deep parts y_deep MyFlatten()(emb) # None*(6*K) y_deep Dropout(0.5)(Dense(128, activationrelu)(y_deep)) y_deep Dropout(0.5)(Dense(64, activationrelu)(y_deep)) y_deep Dropout(0.5)(Dense(32, activationrelu)(y_deep)) y_deep Dropout(0.5)(Dense(1, activationrelu)(y_deep))deepFM y Concatenate(axis1)([y_first_order, y_second_order,y_deep]) y Dense(1, activationsigmoid)(y)model Model(inputs[in_score, in_sales,in_gender, in_age,in_interest, in_topic],outputs[y])plot_model(model, model.png, show_shapesTrue) in_interest本身one-hot 2 deepctr模版 DeepCTR DeepMatch简单实用指南_tf.Print(**)的博客-CSDN博客 文档 Welcome to DeepCTR’s documentation! — DeepCTR 0.9.3 documentation 模型保存 FAQ — DeepCTR 0.9.3 documentation deepctr.models.deepfm module — DeepCTR 0.9.3 documentation model DeepFM() model.save_weights(DeepFM_w.h5) model.load_weights(DeepFM_w.h5) sparse_features [C str(i) for i in range(1, 27)] #稀疏离散特征 dense_features [I str(i) for i in range(1, 14)] #连续全连接 def get_feature_names(feature_columns):features build_input_features(feature_columns)return list(features.keys())def build_input_features(feature_columns, prefix):input_features OrderedDict()# 字典for fc in feature_columns:if isinstance(fc, SparseFeat):input_features[fc.name] Input(shape(1,), nameprefix fc.name, dtypefc.dtype)elif isinstance(fc, DenseFeat):input_features[fc.name] Input(shape(fc.dimension,), nameprefix fc.name, dtypefc.dtype)elif isinstance(fc, VarLenSparseFeat):input_features[fc.name] Input(shape(fc.maxlen,), nameprefix fc.name,dtypefc.dtype)if fc.weight_name is not None:input_features[fc.weight_name] Input(shape(fc.maxlen, 1), nameprefix fc.weight_name,dtypefloat32)if fc.length_name is not None:input_features[fc.length_name] Input((1,), nameprefix fc.length_name, dtypeint32)else:raise TypeError(Invalid feature column type,got, type(fc))return input_features class DenseFeat(namedtuple(DenseFeat, [name, dimension, dtype, transform_fn])): Dense featureArgs:name: feature name.dimension: dimension of the feature, default 1.dtype: dtype of the feature, defaultfloat32.transform_fn: If not None , a function that can be used to transformvalues of the feature. the function takes the input Tensor as itsargument, and returns the output Tensor.(e.g. lambda x: (x - 3.0) / 4.2).__slots__ ()def __new__(cls, name, dimension1, dtypefloat32, transform_fnNone):return super(DenseFeat, cls).__new__(cls, name, dimension, dtype, transform_fn)def __hash__(self):return self.name.__hash__()# def __eq__(self, other):# if self.name other.name:# return True# return False# def __repr__(self):# return DenseFeat:self.name class SparseFeat(namedtuple(SparseFeat,[name, vocabulary_size, embedding_dim, use_hash, vocabulary_path, dtype, embeddings_initializer,embedding_name,group_name, trainable])):__slots__ ()def __new__(cls, name, vocabulary_size, embedding_dim4, use_hashFalse, vocabulary_pathNone, dtypeint32, embeddings_initializerNone,embedding_nameNone,group_nameDEFAULT_GROUP_NAME, trainableTrue):if embedding_dim auto:embedding_dim 6 * int(pow(vocabulary_size, 0.25))if embeddings_initializer is None:embeddings_initializer RandomNormal(mean0.0, stddev0.0001, seed2020)if embedding_name is None:embedding_name namereturn super(SparseFeat, cls).__new__(cls, name, vocabulary_size, embedding_dim, use_hash, vocabulary_path, dtype,embeddings_initializer,embedding_name, group_name, trainable) 使用例子 python:sklearn标签编码(LabelEncoder)_sklearn labelencoder_jenny_paofu的博客-CSDN博客 from sklearn import preprocessingdata[电脑,手机,手机,手表]encpreprocessing.LabelEncoder() encenc.fit([电脑,手机,手表])#训练LabelEncoder,将电脑手表手机编码为0,1,2 dataenc.transform(data)#使用训练好的LabelEncoder对原数据进行编码也叫归一化print(data)#[2 0 0 1]import pandas as pd from sklearn.metrics import log_loss, roc_auc_score from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder, MinMaxScalerfrom deepctr.models import DeepFM from deepctr.feature_column import SparseFeat, DenseFeat, get_feature_namesif __name__ __main__:data pd.read_csv(./criteo_sample.txt)sparse_features [C str(i) for i in range(1, 27)]dense_features [I str(i) for i in range(1, 14)]data[sparse_features] data[sparse_features].fillna(-1, )data[dense_features] data[dense_features].fillna(0, )target [label]# 1.Label Encoding for sparse features,and do simple Transformation for dense featuresfor feat in sparse_features:lbe LabelEncoder()data[feat] lbe.fit_transform(data[feat])mms MinMaxScaler(feature_range(0, 1))data[dense_features] mms.fit_transform(data[dense_features])# 2.count #unique features for each sparse field,and record dense feature field namefixlen_feature_columns [SparseFeat(feat, vocabulary_sizedata[feat].nunique(),embedding_dim4 )for i,feat in enumerate(sparse_features)] [DenseFeat(feat, 1,)for feat in dense_features]dnn_feature_columns fixlen_feature_columnslinear_feature_columns fixlen_feature_columnsfeature_names get_feature_names(linear_feature_columns dnn_feature_columns)# 3.generate input data for modeltrain, test train_test_split(data, test_size0.2, random_state2018)train_model_input {name:train[name] for name in feature_names}test_model_input {name:test[name] for name in feature_names}# 4.Define Model,train,predict and evaluatemodel DeepFM(linear_feature_columns, dnn_feature_columns, taskbinary)model.compile(adam, binary_crossentropy,metrics[binary_crossentropy], )history model.fit(train_model_input, train[target].values,batch_size256, epochs10, verbose2, validation_split0.2, )pred_ans model.predict(test_model_input, batch_size256)print(test LogLoss, round(log_loss(test[target].values, pred_ans), 4))print(test AUC, round(roc_auc_score(test[target].values, pred_ans), 4)) fm 输入 model Model(inputsinputs_list, outputsoutput)return model 输入样式 def input_from_feature_columns(features, feature_columns, l2_reg, seed, prefix, seq_mask_zeroTrue,support_denseTrue, support_groupFalse):sparse_feature_columns list(filter(lambda x: isinstance(x, SparseFeat), feature_columns)) if feature_columns else []varlen_sparse_feature_columns list(filter(lambda x: isinstance(x, VarLenSparseFeat), feature_columns)) if feature_columns else []embedding_matrix_dict create_embedding_matrix(feature_columns, l2_reg, seed, prefixprefix,seq_mask_zeroseq_mask_zero)group_sparse_embedding_dict embedding_lookup(embedding_matrix_dict, features, sparse_feature_columns)dense_value_list get_dense_input(features, feature_columns)if not support_dense and len(dense_value_list) 0:raise ValueError(DenseFeat is not supported in dnn_feature_columns)sequence_embed_dict varlen_embedding_lookup(embedding_matrix_dict, features, varlen_sparse_feature_columns)group_varlen_sparse_embedding_dict get_varlen_pooling_list(sequence_embed_dict, features,varlen_sparse_feature_columns)group_embedding_dict mergeDict(group_sparse_embedding_dict, group_varlen_sparse_embedding_dict)if not support_group:group_embedding_dict list(chain.from_iterable(group_embedding_dict.values()))return group_embedding_dict, dense_value_listdef build_input_features(feature_columns, prefix):input_features OrderedDict()for fc in feature_columns:if isinstance(fc, SparseFeat):input_features[fc.name] Input(shape(1,), nameprefix fc.name, dtypefc.dtype)elif isinstance(fc, DenseFeat):input_features[fc.name] Input(shape(fc.dimension,), nameprefix fc.name, dtypefc.dtype)elif isinstance(fc, VarLenSparseFeat):input_features[fc.name] Input(shape(fc.maxlen,), nameprefix fc.name,dtypefc.dtype)if fc.weight_name is not None:input_features[fc.weight_name] Input(shape(fc.maxlen, 1), nameprefix fc.weight_name,dtypefloat32)if fc.length_name is not None:input_features[fc.length_name] Input((1,), nameprefix fc.length_name, dtypeint32)else:raise TypeError(Invalid feature column type,got, type(fc))return embedding 深度学习框架Keras中的embedding简单理解 - 简书 def create_embedding_dict(sparse_feature_columns, varlen_sparse_feature_columns, seed, l2_reg,prefixsparse_, seq_mask_zeroTrue):sparse_embedding {}for feat in sparse_feature_columns:emb Embedding(feat.vocabulary_size, feat.embedding_dim,embeddings_initializerfeat.embeddings_initializer,embeddings_regularizerl2(l2_reg),nameprefix _emb_ feat.embedding_name)emb.trainable feat.trainablesparse_embedding[feat.embedding_name] embif varlen_sparse_feature_columns and len(varlen_sparse_feature_columns) 0:for feat in varlen_sparse_feature_columns:# if feat.name not in sparse_embedding:emb Embedding(feat.vocabulary_size, feat.embedding_dim,embeddings_initializerfeat.embeddings_initializer,embeddings_regularizerl2(l2_reg),nameprefix _seq_emb_ feat.name,mask_zeroseq_mask_zero)emb.trainable feat.trainablesparse_embedding[feat.embedding_name] embreturn # -*- coding:utf-8 -*-Author:Weichen Shen, weichenswc163.com Reference:[1] Guo H, Tang R, Ye Y, et al. Deepfm: a factorization-machine based neural network for ctr prediction[J]. arXiv preprint arXiv:1703.04247, 2017.(https://arxiv.org/abs/1703.04247) from itertools import chainfrom tensorflow.python.keras.models import Model from tensorflow.python.keras.layers import Densefrom ..feature_column import build_input_features, get_linear_logit, DEFAULT_GROUP_NAME, input_from_feature_columns from ..layers.core import PredictionLayer, DNN from ..layers.interaction import FM from ..layers.utils import concat_func, add_func, combined_dnn_inputdef DeepFM(linear_feature_columns, dnn_feature_columns, fm_group(DEFAULT_GROUP_NAME,), dnn_hidden_units(256, 128, 64),l2_reg_linear0.00001, l2_reg_embedding0.00001, l2_reg_dnn0, seed1024, dnn_dropout0,dnn_activationrelu, dnn_use_bnFalse, taskbinary):Instantiates the DeepFM Network architecture.:param linear_feature_columns: An iterable containing all the features used by the linear part of the model.:param dnn_feature_columns: An iterable containing all the features used by the deep part of the model.:param fm_group: list, group_name of features that will be used to do feature interactions.:param dnn_hidden_units: list,list of positive integer or empty list, the layer number and units in each layer of DNN:param l2_reg_linear: float. L2 regularizer strength applied to linear part:param l2_reg_embedding: float. L2 regularizer strength applied to embedding vector:param l2_reg_dnn: float. L2 regularizer strength applied to DNN:param seed: integer ,to use as random seed.:param dnn_dropout: float in [0,1), the probability we will drop out a given DNN coordinate.:param dnn_activation: Activation function to use in DNN:param dnn_use_bn: bool. Whether use BatchNormalization before activation or not in DNN:param task: str, binary for binary logloss or regression for regression loss:return: A Keras model instance.features build_input_features(linear_feature_columns dnn_feature_columns)inputs_list list(features.values())linear_logit get_linear_logit(features, linear_feature_columns, seedseed, prefixlinear,l2_regl2_reg_linear)group_embedding_dict, dense_value_list input_from_feature_columns(features, dnn_feature_columns, l2_reg_embedding,seed, support_groupTrue)fm_logit add_func([FM()(concat_func(v, axis1))for k, v in group_embedding_dict.items() if k in fm_group])dnn_input combined_dnn_input(list(chain.from_iterable(group_embedding_dict.values())), dense_value_list)dnn_output DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seedseed)(dnn_input)dnn_logit Dense(1, use_biasFalse)(dnn_output)final_logit add_func([linear_logit, fm_logit, dnn_logit])output PredictionLayer(task)(final_logit)model Model(inputsinputs_list, outputsoutput)return model3 其他实现方式 GitHub - as472780551/ctr_Keras: LR, WideDeep, DCN, NFM, DeepFM, NFFM ctr_Keras 很简单的ctr模型实现欢迎指出bug提出宝贵意见 模型 LR FNNhttp://www0.cs.ucl.ac.uk/staff/w.zhang/rtb-papers/deep-ctr.pdf WideDeephttps://arxiv.org/abs/1606.07792 IPNNhttps://arxiv.org/abs/1611.00144 DCNhttps://arxiv.org/abs/1708.05123 NFMhttps://www.comp.nus.edu.sg/~xiangnan/papers/sigir17-nfm.pdf DeepFMhttps://arxiv.org/abs/1703.04247 NFFM腾讯赛冠军模型 数据集 kaggle-criteo-2014 dataset Kaggle Display Advertising Challenge Dataset - Criteo Engineering 数据集按9:1划分请自行划分 traintest412565564584063 预处理 连续型特征(13)缺失值补0离散分桶 离散型特征(26)过滤频率低于10的特征值 执行步骤 运行preprocess.py生成train.csv和test.csv文件 python preprocess.py运行相应的ctr模型代码文件如 python lr.py 代码 Embedding理解及keras中Embedding参数详解代码案例说明_小时不识月123的博客-CSDN博客 from keras.layers.embeddings import Embedding keras.layers.Embedding(input_dim, #词汇表大小就是你的文本里你感兴趣词的数量 output_dim, #词向量的维度 embeddings_initializeruniform,# Embedding矩阵的初始化方法 embeddings_regularizerNone,# Embedding matrix 的正则化方法 activity_regularizerNone, embeddings_constraintNone, # Embedding matrix 的约束函数 mask_zeroFalse, #是否把 0 看作padding 值取值为True时接下来的所有层都必须支持 masking词汇表的索引要从1开始因为文档填充用的是0如果词汇表索引从0开始会产生混淆input_dim vocabulary 1 input_lengthNone)# 输入序列的长度就是文档经过padding后的向量的长度。函数输入尺寸为batch_size, input_length的2D张量 batch_size就是你的mini batch里的样本量 input_length就是你的文档转化成索引向量每个词用词索引表示的向量后的维数。函数输出尺寸为batch_size, input_length,output_dim的3D张量 上面说了output_dim就是词向量的维度就是词转化为向量这个向量的维度 比如word2vec把“哈哈”转化为向量[1.01,2.9,3]那么output_dim就是3.embedding #!/usr/bin/python # -*- coding: utf-8 -*-author: contact: time: context:from keras.layers.embeddings import Embedding from keras.models import Sequential import numpy as np#我们随机生成第一层输入即每个样本存储于单独的list此list里的每个特征或者说元素用正整数索引表示同时所有样本构成list input_array np.random.randint(1000, size(32, 10))[[250 219 228 56 572 110 467 214 173 342][678 13 994 406 678 995 966 398 732 715]...[426 519 254 180 235 707 887 962 834 269][775 380 706 784 842 369 514 265 797 976][666 832 821 953 369 836 656 808 562 263]] model Sequential() model.add(Embedding(1000, 64, input_length10))#词汇表里词999,词向量的维度64,输入序列的长度10 # keras.layers.Embedding(input_dim, output_dim, input_length)#词汇表大小,词向量的维度,输入序列的长度print(model.input_shape) print(model.output_shape)(None, 10) #其中 None的取值是batch_size (None, 10, 64)input_shape:函数输入,尺寸为batch_size, 10的2D张量(矩阵的意思) output_shape:函数输出,尺寸为batch_size, 10,64的3D张量 model.compile(rmsprop, mse) output_array model.predict(input_array) assert output_array.shape (32, 10, 64) print(output_array) print(len(output_array)) print(len(output_array[1])) print(len(output_array[1][1]))[ [[] [] [] ... [] [] []] [[] [] [] ... [] [] []] ... [[] [] [] ... [] [] []] ]32:最外层维数3232个样本 10第二层维数10每个样本用10个词表示 64最内层维数64每个词用64维向量表示for cat in cat_columns:input Input(shape(1,))cat_field_input.append(input)nums pd.concat((train[cat], test[cat])).max() 1embed Embedding(nums, 1, input_length1, trainableTrue)(input) def base_model(cat_columns, train, test):cat_num len(cat_columns)field_cnt cat_numcat_field_input []field_embedding []lr_embedding []for cat in cat_columns:input Input(shape(1,))cat_field_input.append(input)nums pd.concat((train[cat], test[cat])).max() 1embed Embedding(nums, 1, input_length1, trainableTrue)(input)reshape Reshape((1,))(embed)lr_embedding.append(reshape)# fm embeddingsfield []embed Embedding(nums, 10, input_length1, trainableTrue)(input)reshape Reshape((10,))(embed)field_embedding.append(reshape)# fm embeddings#######fm layer##########fm_square Lambda(lambda x: K.square(x))(add(field_embedding))square_fm add([Lambda(lambda x:K.square(x))(embed)for embed in field_embedding])inner_product subtract([fm_square, square_fm])inner_product Lambda(lambda x: K.sum(x / 2, axis-1, keepdimsTrue))(inner_product)#######dnn layer##########embed_layer concatenate(field_embedding, axis-1)embed_layer Dense(64)(embed_layer)embed_layer BatchNormalization()(embed_layer)embed_layer Activation(relu)(embed_layer)embed_layer Dense(64)(embed_layer)embed_layer BatchNormalization()(embed_layer)embed_layer Activation(relu)(embed_layer)embed_layer Dense(1)(embed_layer)########linear layer##########lr_layer add(lr_embedding [embed_layer, inner_product])preds Activation(sigmoid)(lr_layer)opt Adam(0.001)model Model(inputscat_field_input, outputspreds)model.compile(lossbinary_crossentropy, optimizeropt, metrics[acc])print(model.summary())return model 4何为focal loss focal loss 是随网络RetinaNet一起提出的一个令人惊艳的损失函数 paper 下载主要针对的是解决正负样本比例严重偏斜所产生的模型难以训练的问题。 在keras中使用此函数作为损失函数只需在编译模型时指定损失函数为focal loss model.compile(loss[binary_focal_loss(alpha.25, gamma2)], metrics[accuracy], optimizeroptimizer) 参考 深度学习推荐系统作业deepFM介绍和代码实现_deepfm代码_J_co的博客-CSDN博客CTR算法总结_Roger-Liu的博客-CSDN博客DeepCTR模型优缺点对比_deepctr训练加速_ChristineC_的博客-CSDN博客deepFm的keras实现_deepfm keras_xxaxtt的博客-CSDN博客如何用keras实现deepFM_DemonHunter211的博客-CSDN博客最通俗的deepFM理解及keras实现_keras实现deepfm_Mr_不想起床的博客-CSDN博客用Keras实现一个DeepFM_deepfm 基于libsvm实现_蕉叉熵的博客-CSDN博客DeepCTR易用可扩展的深度学习点击率预测算法包 - 知乎python:sklearn标签编码(LabelEncoder)_sklearn labelencoder_jenny_paofu的博客-CSDN博客【推荐系统】DeepFM模型_deepfm多分类求auc_—Xi—的博客-CSDN博客GitHub - shenweichen/DeepCTR: Easy-to-use,Modular and Extendible package of deep-learning based CTR models .理解推荐算法之DeepFM_Aliert的博客-CSDN博客
http://www.ho-use.cn/article/10812434.html

相关文章:

  • 网站开发是固定资产吗优化绿松石是什么意思
  • 秋莱网站建设商业空间设计公司
  • 网站快速排名互点软件现货交易平台排名
  • 网站推广方案怎么写的网页设计素材主题
  • v9做的网站被攻击链接吧跳转深圳定制工作装
  • 吉林做网站公司网站建设得缺点
  • 怎么做一个局域网站个人网站做哪些流程
  • 网站建设类目免费制作企业小程序
  • 新网站前期seo怎么做域名链接网站
  • 网迎客 网站建设网站互动
  • 紫金网站建设价格选做旅游网站的课题分析
  • 做网站用什么服务器好网站解析不过来
  • 免费网站建设模板一个页面多少钱
  • 网站推广排名服务wordpress主题后台设置
  • php做电影网站有哪些智能建站系统个人网站
  • 山东网站建设口碑好Ext做网站
  • 扶余市建设局网站网站做全好吗
  • 东莞网站制作多少钱网页怎么打不开
  • 商丘市做网站的公司网站改版重新备案
  • 泰州网站建设优化wordpress源码整合
  • 济南住房和城乡建设厅网站wordpress 同步 朋友圈
  • 青岛市城阳区建设局网站网站建设广州天河
  • 网站建设的需求方案免费接码网页版中国
  • 公司网站如何做的美丽郑州做网站推广的公司哪家好
  • 网站快照怎么更新工程建设教育网
  • 广州天河建网站的公司网站建设在微信里打广告内容
  • 值得浏览的外国网站网站建设硬件环境
  • 西安分类信息网站wordpress 超级搜索
  • 网站内容更新方案江苏省二级建造师考试网
  • 小程序嵌套wordpress厦门网站seo建设