From 0b7f3e5d841da1e9372254b2fc15e408d5ad9238 Mon Sep 17 00:00:00 2001 From: Weichen Shen Date: Sat, 23 Nov 2019 23:51:33 +0800 Subject: [PATCH] update --- deepctr/layers/activation.py | 9 +++++---- deepctr/models/afm.py | 15 ++++++++------- deepctr/models/autoint.py | 2 +- deepctr/models/ccpm.py | 9 +++++---- deepctr/models/dcn.py | 11 +++++++---- deepctr/models/deepfm.py | 17 ++++++++++------- deepctr/models/fnn.py | 12 ++++++------ deepctr/models/nfm.py | 11 ++++++----- deepctr/models/pnn.py | 9 +++++---- deepctr/models/wdl.py | 5 +++-- deepctr/models/xdeepfm.py | 16 +++++++--------- 11 files changed, 63 insertions(+), 53 deletions(-) diff --git a/deepctr/layers/activation.py b/deepctr/layers/activation.py index 9207c4aa..88bc5f28 100644 --- a/deepctr/layers/activation.py +++ b/deepctr/layers/activation.py @@ -40,12 +40,12 @@ def build(self, input_shape): self.bn = tf.keras.layers.BatchNormalization( axis=self.axis, epsilon=self.epsilon, center=False, scale=False) self.alphas = self.add_weight(shape=(input_shape[-1],), initializer=Zeros( - ), dtype=tf.float32, name= 'dice_alpha') # name='alpha_'+self.name + ), dtype=tf.float32, name='dice_alpha') # name='alpha_'+self.name super(Dice, self).build(input_shape) # Be sure to call this somewhere! self.uses_learning_phase = True - def call(self, inputs,training=None,**kwargs): - inputs_normed = self.bn(inputs,training=training) + def call(self, inputs, training=None, **kwargs): + inputs_normed = self.bn(inputs, training=training) # tf.layers.batch_normalization( # inputs, axis=self.axis, epsilon=self.epsilon, center=False, scale=False) x_p = tf.sigmoid(inputs_normed) @@ -59,9 +59,10 @@ def get_config(self, ): base_config = super(Dice, self).get_config() return dict(list(base_config.items()) + list(config.items())) + def activation_layer(activation): if activation == "dice" or activation == "Dice": - act_layer = Dice() + act_layer = Dice() elif (isinstance(activation, str)) or (sys.version_info.major == 2 and isinstance(activation, (str, unicode))): act_layer = tf.keras.layers.Activation(activation) elif issubclass(activation, Layer): diff --git a/deepctr/models/afm.py b/deepctr/models/afm.py index 22ea2d71..6850484d 100644 --- a/deepctr/models/afm.py +++ b/deepctr/models/afm.py @@ -11,7 +11,7 @@ """ import tensorflow as tf -from ..inputs import input_from_feature_columns, get_linear_logit,build_input_features,DEFAULT_GROUP_NAME +from ..inputs import input_from_feature_columns, get_linear_logit, build_input_features, DEFAULT_GROUP_NAME from ..layers.core import PredictionLayer from ..layers.interaction import AFMLayer, FM from ..layers.utils import concat_func, add_func @@ -37,24 +37,25 @@ def AFM(linear_feature_columns, dnn_feature_columns, fm_group=DEFAULT_GROUP_NAME :return: A Keras model instance. """ - - features = build_input_features(linear_feature_columns + dnn_feature_columns) + features = build_input_features( + linear_feature_columns + dnn_feature_columns) inputs_list = list(features.values()) group_embedding_dict, _ = input_from_feature_columns(features, dnn_feature_columns, l2_reg_embedding, init_std, - seed, support_dense=False,support_group=True) + seed, support_dense=False, support_group=True) linear_logit = get_linear_logit(features, linear_feature_columns, init_std=init_std, seed=seed, prefix='linear', l2_reg=l2_reg_linear) if use_attention: fm_logit = add_func([AFMLayer(attention_factor, l2_reg_att, afm_dropout, - seed)(list(v)) for k, v in group_embedding_dict.items() if k in fm_group]) + seed)(list(v)) for k, v in group_embedding_dict.items() if k in fm_group]) else: - fm_logit = add_func([FM()(concat_func(v, axis=1)) for k, v in group_embedding_dict.items() if k in fm_group]) + fm_logit = add_func([FM()(concat_func(v, axis=1)) + for k, v in group_embedding_dict.items() if k in fm_group]) - final_logit = add_func([linear_logit,fm_logit]) + final_logit = add_func([linear_logit, fm_logit]) output = PredictionLayer(task)(final_logit) model = tf.keras.models.Model(inputs=inputs_list, outputs=output) diff --git a/deepctr/models/autoint.py b/deepctr/models/autoint.py index d0b90f40..b09957fc 100644 --- a/deepctr/models/autoint.py +++ b/deepctr/models/autoint.py @@ -80,7 +80,7 @@ def AutoInt(linear_feature_columns, dnn_feature_columns, att_layer_num=3, att_em else: # Error raise NotImplementedError - final_logit = add_func([final_logit,linear_logit]) + final_logit = add_func([final_logit, linear_logit]) output = PredictionLayer(task)(final_logit) model = tf.keras.models.Model(inputs=inputs_list, outputs=output) diff --git a/deepctr/models/ccpm.py b/deepctr/models/ccpm.py index 5e8afa1b..290c2119 100644 --- a/deepctr/models/ccpm.py +++ b/deepctr/models/ccpm.py @@ -11,7 +11,7 @@ """ import tensorflow as tf -from ..inputs import input_from_feature_columns, get_linear_logit,build_input_features +from ..inputs import input_from_feature_columns, get_linear_logit, build_input_features from ..layers.core import DNN, PredictionLayer from ..layers.sequence import KMaxPooling from ..layers.utils import concat_func, add_func @@ -41,7 +41,8 @@ def CCPM(linear_feature_columns, dnn_feature_columns, conv_kernel_width=(6, 5), raise ValueError( "conv_kernel_width must have same element with conv_filters") - features = build_input_features(linear_feature_columns + dnn_feature_columns) + features = build_input_features( + linear_feature_columns + dnn_feature_columns) inputs_list = list(features.values()) sparse_embedding_list, _ = input_from_feature_columns(features, dnn_feature_columns, l2_reg_embedding, init_std, @@ -68,10 +69,10 @@ def CCPM(linear_feature_columns, dnn_feature_columns, conv_kernel_width=(6, 5), flatten_result = tf.keras.layers.Flatten()(pooling_result) dnn_out = DNN(dnn_hidden_units, l2_reg=l2_reg_dnn, - dropout_rate=dnn_dropout)(flatten_result) + dropout_rate=dnn_dropout)(flatten_result) dnn_logit = tf.keras.layers.Dense(1, use_bias=False)(dnn_out) - final_logit = add_func([dnn_logit,linear_logit]) + final_logit = add_func([dnn_logit, linear_logit]) output = PredictionLayer(task)(final_logit) model = tf.keras.models.Model(inputs=inputs_list, outputs=output) diff --git a/deepctr/models/dcn.py b/deepctr/models/dcn.py index 7fd882e5..40baeaaf 100644 --- a/deepctr/models/dcn.py +++ b/deepctr/models/dcn.py @@ -8,7 +8,7 @@ """ import tensorflow as tf -from deepctr.layers.utils import add_func +from ..layers.utils import add_func from ..inputs import input_from_feature_columns, build_input_features, combined_dnn_input, get_linear_logit from ..layers.core import PredictionLayer, DNN from ..layers.interaction import CrossNet @@ -53,14 +53,17 @@ def DCN(linear_feature_columns, dnn_feature_columns, cross_num=2, dnn_hidden_uni dnn_use_bn, seed)(dnn_input) cross_out = CrossNet(cross_num, l2_reg=l2_reg_cross)(dnn_input) stack_out = tf.keras.layers.Concatenate()([cross_out, deep_out]) - final_logit = tf.keras.layers.Dense(1, use_bias=False, activation=None)(stack_out) + final_logit = tf.keras.layers.Dense( + 1, use_bias=False, activation=None)(stack_out) elif len(dnn_hidden_units) > 0: # Only Deep deep_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed)(dnn_input) - final_logit = tf.keras.layers.Dense(1, use_bias=False, activation=None)(deep_out) + final_logit = tf.keras.layers.Dense( + 1, use_bias=False, activation=None)(deep_out) elif cross_num > 0: # Only Cross cross_out = CrossNet(cross_num, l2_reg=l2_reg_cross)(dnn_input) - final_logit = tf.keras.layers.Dense(1, use_bias=False, activation=None)(cross_out) + final_logit = tf.keras.layers.Dense( + 1, use_bias=False, activation=None)(cross_out) else: # Error raise NotImplementedError diff --git a/deepctr/models/deepfm.py b/deepctr/models/deepfm.py index a43e2764..cb99ee13 100644 --- a/deepctr/models/deepfm.py +++ b/deepctr/models/deepfm.py @@ -11,7 +11,7 @@ from itertools import chain import tensorflow as tf -from ..inputs import input_from_feature_columns, get_linear_logit,build_input_features,combined_dnn_input,DEFAULT_GROUP_NAME +from ..inputs import input_from_feature_columns, get_linear_logit, build_input_features, combined_dnn_input, DEFAULT_GROUP_NAME from ..layers.core import PredictionLayer, DNN from ..layers.interaction import FM from ..layers.utils import concat_func, Add, add_func @@ -38,24 +38,27 @@ def DeepFM(linear_feature_columns, dnn_feature_columns, fm_group=[DEFAULT_GROUP_ :return: A Keras model instance. """ - features = build_input_features(linear_feature_columns + dnn_feature_columns) + features = build_input_features( + linear_feature_columns + dnn_feature_columns) inputs_list = list(features.values()) group_embedding_dict, dense_value_list = input_from_feature_columns(features, dnn_feature_columns, l2_reg_embedding, - init_std, seed,support_group=True) + init_std, seed, support_group=True) linear_logit = get_linear_logit(features, linear_feature_columns, init_std=init_std, seed=seed, prefix='linear', l2_reg=l2_reg_linear) - fm_logit = add_func([FM()(concat_func(v, axis=1)) for k, v in group_embedding_dict.items() if k in fm_group]) + fm_logit = add_func([FM()(concat_func(v, axis=1)) + 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_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, seed)(dnn_input) + dnn_use_bn, seed)(dnn_input) dnn_logit = tf.keras.layers.Dense( 1, use_bias=False, activation=None)(dnn_output) - final_logit = add_func([linear_logit,fm_logit,dnn_logit]) + final_logit = add_func([linear_logit, fm_logit, dnn_logit]) output = PredictionLayer(task)(final_logit) model = tf.keras.models.Model(inputs=inputs_list, outputs=output) diff --git a/deepctr/models/fnn.py b/deepctr/models/fnn.py index 7e24f4a1..c1ebc56e 100644 --- a/deepctr/models/fnn.py +++ b/deepctr/models/fnn.py @@ -8,12 +8,11 @@ """ import tensorflow as tf -from deepctr.layers.utils import add_func -from ..inputs import input_from_feature_columns, get_linear_logit,build_input_features,combined_dnn_input +from ..layers.utils import add_func +from ..inputs import input_from_feature_columns, get_linear_logit, build_input_features, combined_dnn_input from ..layers.core import PredictionLayer, DNN - def FNN(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(128, 128), l2_reg_embedding=1e-5, l2_reg_linear=1e-5, l2_reg_dnn=0, init_std=0.0001, seed=1024, dnn_dropout=0, dnn_activation='relu', task='binary'): @@ -32,7 +31,8 @@ def FNN(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(128, 128) :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) + features = build_input_features( + linear_feature_columns + dnn_feature_columns) inputs_list = list(features.values()) @@ -42,12 +42,12 @@ def FNN(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(128, 128) linear_logit = get_linear_logit(features, linear_feature_columns, init_std=init_std, seed=seed, prefix='linear', l2_reg=l2_reg_linear) - dnn_input = combined_dnn_input(sparse_embedding_list,dense_value_list) + dnn_input = combined_dnn_input(sparse_embedding_list, dense_value_list) deep_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, False, seed)(dnn_input) dnn_logit = tf.keras.layers.Dense( 1, use_bias=False, activation=None)(deep_out) - final_logit = add_func([dnn_logit,linear_logit]) + final_logit = add_func([dnn_logit, linear_logit]) output = PredictionLayer(task)(final_logit) diff --git a/deepctr/models/nfm.py b/deepctr/models/nfm.py index 35650881..d270ef9b 100644 --- a/deepctr/models/nfm.py +++ b/deepctr/models/nfm.py @@ -8,7 +8,7 @@ """ import tensorflow as tf -from ..inputs import input_from_feature_columns, get_linear_logit, build_input_features,combined_dnn_input +from ..inputs import input_from_feature_columns, get_linear_logit, build_input_features, combined_dnn_input from ..layers.core import PredictionLayer, DNN from ..layers.interaction import BiInteractionPooling from ..layers.utils import concat_func, add_func @@ -34,7 +34,8 @@ def NFM(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(128, 128) :return: A Keras model instance. """ - features = build_input_features(linear_feature_columns + dnn_feature_columns) + features = build_input_features( + linear_feature_columns + dnn_feature_columns) inputs_list = list(features.values()) @@ -48,13 +49,13 @@ def NFM(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(128, 128) bi_out = BiInteractionPooling()(fm_input) if bi_dropout: bi_out = tf.keras.layers.Dropout(bi_dropout)(bi_out, training=None) - dnn_input = combined_dnn_input([bi_out],dense_value_list) + dnn_input = combined_dnn_input([bi_out], dense_value_list) dnn_output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, - False, seed)(dnn_input) + False, seed)(dnn_input) dnn_logit = tf.keras.layers.Dense( 1, use_bias=False, activation=None)(dnn_output) - final_logit = add_func([linear_logit,dnn_logit]) + final_logit = add_func([linear_logit, dnn_logit]) output = PredictionLayer(task)(final_logit) diff --git a/deepctr/models/pnn.py b/deepctr/models/pnn.py index ffc52d01..d63db2f0 100644 --- a/deepctr/models/pnn.py +++ b/deepctr/models/pnn.py @@ -9,7 +9,7 @@ import tensorflow as tf -from ..inputs import input_from_feature_columns,build_input_features,combined_dnn_input +from ..inputs import input_from_feature_columns, build_input_features, combined_dnn_input from ..layers.core import PredictionLayer, DNN from ..layers.interaction import InnerProductLayer, OutterProductLayer from ..layers.utils import concat_func @@ -45,7 +45,8 @@ def PNN(dnn_feature_columns, embedding_size=8, dnn_hidden_units=(128, 128), l2_r sparse_embedding_list, dense_value_list = input_from_feature_columns(features, dnn_feature_columns, l2_reg_embedding, init_std, seed) - inner_product = tf.keras.layers.Flatten()(InnerProductLayer()(sparse_embedding_list)) + inner_product = tf.keras.layers.Flatten()( + InnerProductLayer()(sparse_embedding_list)) outter_product = OutterProductLayer(kernel_type)(sparse_embedding_list) # ipnn deep input @@ -64,9 +65,9 @@ def PNN(dnn_feature_columns, embedding_size=8, dnn_hidden_units=(128, 128), l2_r else: deep_input = linear_signal - dnn_input = combined_dnn_input([deep_input],dense_value_list) + dnn_input = combined_dnn_input([deep_input], dense_value_list) dnn_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, - False, seed)(dnn_input) + False, seed)(dnn_input) dnn_logit = tf.keras.layers.Dense( 1, use_bias=False, activation=None)(dnn_out) diff --git a/deepctr/models/wdl.py b/deepctr/models/wdl.py index 24eae32f..0372da1f 100644 --- a/deepctr/models/wdl.py +++ b/deepctr/models/wdl.py @@ -10,7 +10,7 @@ from tensorflow.python.keras.models import Model from tensorflow.python.keras.layers import Dense -from ..inputs import build_input_features, get_linear_logit,input_from_feature_columns,combined_dnn_input +from ..inputs import build_input_features, get_linear_logit, input_from_feature_columns, combined_dnn_input from ..layers.core import PredictionLayer, DNN from ..layers.utils import add_func @@ -34,7 +34,8 @@ def WDL(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(128, 128) :return: A Keras model instance. """ - features = build_input_features(linear_feature_columns + dnn_feature_columns) + features = build_input_features( + linear_feature_columns + dnn_feature_columns) inputs_list = list(features.values()) diff --git a/deepctr/models/xdeepfm.py b/deepctr/models/xdeepfm.py index c7dbcdae..73a39286 100644 --- a/deepctr/models/xdeepfm.py +++ b/deepctr/models/xdeepfm.py @@ -8,10 +8,10 @@ """ import tensorflow as tf -from ..inputs import input_from_feature_columns, get_linear_logit,build_input_features,combined_dnn_input +from ..inputs import input_from_feature_columns, get_linear_logit, build_input_features, combined_dnn_input from ..layers.core import PredictionLayer, DNN from ..layers.interaction import CIN -from ..layers.utils import concat_func,add_func +from ..layers.utils import concat_func, add_func def xDeepFM(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, 256), @@ -39,8 +39,8 @@ def xDeepFM(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, :return: A Keras model instance. """ - - features = build_input_features(linear_feature_columns + dnn_feature_columns) + features = build_input_features( + linear_feature_columns + dnn_feature_columns) inputs_list = list(features.values()) @@ -52,9 +52,9 @@ def xDeepFM(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, fm_input = concat_func(sparse_embedding_list, axis=1) - dnn_input = combined_dnn_input(sparse_embedding_list,dense_value_list) + dnn_input = combined_dnn_input(sparse_embedding_list, dense_value_list) dnn_output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, - dnn_use_bn, seed)(dnn_input) + dnn_use_bn, seed)(dnn_input) dnn_logit = tf.keras.layers.Dense( 1, use_bias=False, activation=None)(dnn_output) @@ -64,9 +64,7 @@ def xDeepFM(linear_feature_columns, dnn_feature_columns, dnn_hidden_units=(256, exFM_out = CIN(cin_layer_size, cin_activation, cin_split_half, l2_reg_cin, seed)(fm_input) exFM_logit = tf.keras.layers.Dense(1, activation=None, )(exFM_out) - final_logit = add_func([final_logit,exFM_logit]) - - + final_logit = add_func([final_logit, exFM_logit]) output = PredictionLayer(task)(final_logit)