deepctr/models/pnn.py
def PNN(dnn_feature_columns, dnn_hidden_units=(128, 128), l2_reg_embedding=1e-5, l2_reg_dnn=0, init_std=0.0001,
        seed=1024, dnn_dropout=0, dnn_activation='relu', use_inner=True, use_outter=False, kernel_type='mat',
        task='binary'):
    """Instantiates the Product-based Neural Network architecture.

    :param dnn_feature_columns: An iterable containing all the features used by deep part of the model.
    :param dnn_hidden_units: list,list of positive integer or empty list, the layer number and units in each layer of deep net
    :param l2_reg_embedding: float . L2 regularizer strength applied to embedding vector
    :param l2_reg_dnn: float. L2 regularizer strength applied to DNN
    :param init_std: float,to use as the initialize std of embedding vector
    :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 use_inner: bool,whether use inner-product or not.
    :param use_outter: bool,whether use outter-product or not.
    :param kernel_type: str,kernel_type used in outter-product,can be ``'mat'`` , ``'vec'`` or ``'num'``
    :param task: str, ``"binary"`` for  binary logloss or  ``"regression"`` for regression loss
    :return: A Keras model instance.
    """

    if kernel_type not in ['mat', 'vec', 'num']:
        raise ValueError("kernel_type must be mat,vec or num")

    features = build_input_features(dnn_feature_columns)

    inputs_list = list(features.values())

    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))
    outter_product = OutterProductLayer(kernel_type)(sparse_embedding_list)

    # ipnn deep input
    linear_signal = tf.keras.layers.Reshape(
        [sum(map(lambda x:int(x.shape[-1]) ,sparse_embedding_list))])(concat_func(sparse_embedding_list))
    # signal这个命名可以学一下
    # 不知道product的形状是什么样的，所以不知道这个reshape到底要干嘛

    if use_inner and use_outter:
        deep_input = tf.keras.layers.Concatenate()(
            [linear_signal, inner_product, outter_product])
    elif use_inner:
        deep_input = tf.keras.layers.Concatenate()(
            [linear_signal, inner_product])
    elif use_outter:
        deep_input = tf.keras.layers.Concatenate()(
            [linear_signal, outter_product])
    else:
        deep_input = linear_signal

    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)
    dnn_logit = tf.keras.layers.Dense(
        1, use_bias=False, activation=None)(dnn_out)

    output = PredictionLayer(task)(dnn_logit)

    model = tf.keras.models.Model(inputs=inputs_list,
                                  outputs=output)
    return model
Instantiates the Product-based Neural Network architecture.

    :param dnn_feature_columns: An iterable containing all the features used by deep part of the model.
    :param dnn_hidden_units: list,list of positive integer or empty list, the layer number and units in each layer of deep net
    :param l2_reg_embedding: float . L2 regularizer strength applied to embedding vector
    :param l2_reg_dnn: float. L2 regularizer strength applied to DNN
    :param init_std: float,to use as the initialize std of embedding vector
    :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 use_inner: bool,whether use inner-product or not.
    :param use_outter: bool,whether use outter-product or not.
    :param kernel_type: str,kernel_type used in outter-product,can be ``'mat'`` , ``'vec'`` or ``'num'``
    :param task: str, ``"binary"`` for  binary logloss or  ``"regression"`` for regression loss
    :return: A Keras model instance.
    
Instantiates the Product-based Neural Network architecture.
Instantiates the Product - based Neural Network architecture .
def PNN(dnn_feature_columns, dnn_hidden_units=(128, 128), l2_reg_embedding=1e-5, l2_reg_dnn=0, init_std=0.0001,
        seed=1024, dnn_dropout=0, dnn_activation='relu', use_inner=True, use_outter=False, kernel_type='mat',
        task='binary'):
    if kernel_type not in ['mat', 'vec', 'num']:
        raise ValueError("kernel_type must be mat,vec or num")
    features = build_input_features(dnn_feature_columns)
    inputs_list = list(features.values())
    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))
    outter_product = OutterProductLayer(kernel_type)(sparse_embedding_list)
    linear_signal = tf.keras.layers.Reshape(
        [sum(map(lambda x:int(x.shape[-1]) ,sparse_embedding_list))])(concat_func(sparse_embedding_list))
    if use_inner and use_outter:
        deep_input = tf.keras.layers.Concatenate()(
            [linear_signal, inner_product, outter_product])
    elif use_inner:
        deep_input = tf.keras.layers.Concatenate()(
            [linear_signal, inner_product])
    elif use_outter:
        deep_input = tf.keras.layers.Concatenate()(
            [linear_signal, outter_product])
    else:
        deep_input = linear_signal
    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)
    dnn_logit = tf.keras.layers.Dense(
        1, use_bias=False, activation=None)(dnn_out)
    output = PredictionLayer(task)(dnn_logit)
    model = tf.keras.models.Model(inputs=inputs_list,
                                  outputs=output)
    return model
def PNN ( dnn_feature_columns , dnn_hidden_units = ( 128 , 128 ) , l2_reg_embedding = 1e-5 , l2_reg_dnn = 0 , init_std = 0.0001 , seed = 1024 , dnn_dropout = 0 , dnn_activation = 'relu' , use_inner = True , use_outter = False , kernel_type = 'mat' , task = 'binary' ) : if kernel_type not in [ 'mat' , 'vec' , 'num' ] : raise ValueError ( "kernel_type must be mat,vec or num" ) features = build_input_features ( dnn_feature_columns ) inputs_list = list ( features . values ( ) ) 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 ) ) outter_product = OutterProductLayer ( kernel_type ) ( sparse_embedding_list ) linear_signal = tf . keras . layers . Reshape ( [ sum ( map ( lambda x : int ( x . shape [ - 1 ] ) , sparse_embedding_list ) ) ] ) ( concat_func ( sparse_embedding_list ) ) if use_inner and use_outter : deep_input = tf . keras . layers . Concatenate ( ) ( [ linear_signal , inner_product , outter_product ] ) elif use_inner : deep_input = tf . keras . layers . Concatenate ( ) ( [ linear_signal , inner_product ] ) elif use_outter : deep_input = tf . keras . layers . Concatenate ( ) ( [ linear_signal , outter_product ] ) else : deep_input = linear_signal 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 ) dnn_logit = tf . keras . layers . Dense ( 1 , use_bias = False , activation = None ) ( dnn_out ) output = PredictionLayer ( task ) ( dnn_logit ) model = tf . keras . models . Model ( inputs = inputs_list , outputs = output ) return model
Instantiates the Product-based Neural Network architecture.
Instantiates the Product - based Neural Network architecture .
"""Instantiates the Product-based Neural Network architecture.

    :param dnn_feature_columns: An iterable containing all the features used by deep part of the model.
    :param dnn_hidden_units: list,list of positive integer or empty list, the layer number and units in each layer of deep net
    :param l2_reg_embedding: float . L2 regularizer strength applied to embedding vector
    :param l2_reg_dnn: float. L2 regularizer strength applied to DNN
    :param init_std: float,to use as the initialize std of embedding vector
    :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 use_inner: bool,whether use inner-product or not.
    :param use_outter: bool,whether use outter-product or not.
    :param kernel_type: str,kernel_type used in outter-product,can be ``'mat'`` , ``'vec'`` or ``'num'``
    :param task: str, ``"binary"`` for  binary logloss or  ``"regression"`` for regression loss
    :return: A Keras model instance.
    """ # ipnn deep input # signal这个命名可以学一下 # 不知道product的形状是什么样的，所以不知道这个reshape到底要干嘛
A Keras model instance.
A Keras model instance .
dnn_feature_columns
An iterable containing all the features used by deep part of the model.
An iterable containing all the features used by deep part of the model .
dnn_hidden_units
list,list of positive integer or empty list, the layer number and units in each layer of deep net
list list of positive integer or empty list the layer number and units in each layer of deep net
l2_reg_embedding
float . L2 regularizer strength applied to embedding vector
float . L2 regularizer strength applied to embedding vector
l2_reg_dnn
float. L2 regularizer strength applied to DNN
float . L2 regularizer strength applied to DNN
init_std
float,to use as the initialize std of embedding vector
float to use as the initialize std of embedding vector
seed
integer ,to use as random seed.
integer to use as random seed .
dnn_dropout
float in [0,1), the probability we will drop out a given DNN coordinate.
float in [ 0 1 ) the probability we will drop out a given DNN coordinate .
dnn_activation
Activation function to use in DNN
Activation function to use in DNN
use_inner
bool,whether use inner-product or not.
bool whether use inner - product or not .
use_outter
bool,whether use outter-product or not.
bool whether use outter - product or not .
kernel_type
str,kernel_type used in outter-product,can be ``'mat'`` , ``'vec'`` or ``'num'``
str kernel_type used in outter - product can be ` ` ' mat ' ` ` ` ` ' vec ' ` ` or ` ` ' num ' ` `
task
str, ``"binary"`` for  binary logloss or  ``"regression"`` for regression loss
str ` ` " binary " ` ` for binary logloss or ` ` " regression " ` ` for regression loss