Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
Weichen Shen committed Nov 23, 2019
1 parent de7aea1 commit 0b7f3e5
Show file tree
Hide file tree
Showing 11 changed files with 63 additions and 53 deletions.
9 changes: 5 additions & 4 deletions deepctr/layers/activation.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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):
Expand Down
15 changes: 8 additions & 7 deletions deepctr/models/afm.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion deepctr/models/autoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
9 changes: 5 additions & 4 deletions deepctr/models/ccpm.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand All @@ -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)
Expand Down
11 changes: 7 additions & 4 deletions deepctr/models/dcn.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
17 changes: 10 additions & 7 deletions deepctr/models/deepfm.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down
12 changes: 6 additions & 6 deletions deepctr/models/fnn.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'):
Expand All @@ -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())

Expand All @@ -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)

Expand Down
11 changes: 6 additions & 5 deletions deepctr/models/nfm.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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())

Expand All @@ -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)

Expand Down
9 changes: 5 additions & 4 deletions deepctr/models/pnn.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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)

Expand Down
5 changes: 3 additions & 2 deletions deepctr/models/wdl.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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())

Expand Down
16 changes: 7 additions & 9 deletions deepctr/models/xdeepfm.py
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down Expand Up @@ -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())

Expand All @@ -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)

Expand All @@ -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)

Expand Down

0 comments on commit 0b7f3e5

Please sign in to comment.