DeepCTR icon indicating copy to clipboard operation
DeepCTR copied to clipboard

unsupported operand type(s) for +: 'int' and 'str'

Open kamskanagi opened this issue 3 years ago • 1 comments

i get this error error below when training the model.


TypeError                                 Traceback (most recent call last)
<ipython-input-44-82654bff4de9> in <module>()
----> 1 model = DSSM(user_feature_columns, item_feature_columns)
      2 model.compile(optimizer='adagrad', loss="binary_crossentropy", metrics=['accuracy'])
      3 
      4 history = model.fit(train_model_input, train_label,
      5                     batch_size=256, epochs=10, verbose=1, validation_split=0.2, )

1 frames
/usr/local/lib/python3.7/dist-packages/deepctr/inputs.py in create_embedding_matrix(feature_columns, l2_reg, seed, prefix, seq_mask_zero)
     69         filter(lambda x: isinstance(x, fc_lib.VarLenSparseFeat), feature_columns)) if feature_columns else []
     70     sparse_emb_dict = create_embedding_dict(sparse_feature_columns, varlen_sparse_feature_columns, seed,
---> 71                                             l2_reg, prefix='sparse', seq_mask_zero=seq_mask_zero)
     72     return sparse_emb_dict
     73 

TypeError: unsupported operand type(s) for +: 'int' and 'str'

this is the model. can someone help me with this.




from deepctr.feature_column import build_input_features,  create_embedding_matrix
from deepctr.layers.core import PredictionLayer, DNN
from tensorflow.python.keras.models import Model
from deepmatch.inputs import input_from_feature_columns
from deepmatch.layers.core import Similarity

def DSSM(user_feature_columns, item_feature_columns, user_dnn_hidden_units=(64, 32),
         item_dnn_hidden_units=(64, 32),
         dnn_activation='tanh', dnn_use_bn=False,
         l2_reg_dnn=0, l2_reg_embedding=1e-6, dnn_dropout=0, init_std=0.0001, seed=1024, metric='cos'):

    embedding_matrix_dict= create_embedding_matrix(user_feature_columns + item_feature_columns,  l2_reg_embedding,
                                                    init_std, seed, seq_mask_zero=True)
    

    user_features = build_input_features(user_feature_columns)
    user_inputs_list = list(user_features.values())
    user_sparse_embedding_list, user_dense_value_list = input_from_feature_columns(user_features,
                                                                                   user_feature_columns,
                                                                                   l2_reg_embedding, init_std, seed,
                                                                                   embedding_matrix_dict=embedding_matrix_dict)
    user_dnn_input = combined_dnn_input(user_sparse_embedding_list, user_dense_value_list)

    item_features = build_input_features(item_feature_columns)
    item_inputs_list = list(item_features.values())
    item_sparse_embedding_list, item_dense_value_list = input_from_feature_columns(item_features,
                                                                                   item_feature_columns,
                                                                                   l2_reg_embedding, init_std, seed,
                                                                                   embedding_matrix_dict=embedding_matrix_dict)
    item_dnn_input = combined_dnn_input(item_sparse_embedding_list, item_dense_value_list)

    user_dnn_out = DNN(user_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout,
                       dnn_use_bn, seed, )(user_dnn_input)

    item_dnn_out = DNN(item_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout,
                       dnn_use_bn, seed)(item_dnn_input)

    score = Similarity(type=metric)([user_dnn_out, item_dnn_out])

    output = PredictionLayer("binary", False)(score)

    model = Model(inputs=user_inputs_list + item_inputs_list, outputs=output)

    model.__setattr__("user_input", user_inputs_list)
    model.__setattr__("item_input", item_inputs_list)
    model.__setattr__("user_embedding", user_dnn_out)
    model.__setattr__("item_embedding", item_dnn_out)

    return model

kamskanagi avatar Nov 09 '21 06:11 kamskanagi

It is due to version drift. In new version, def create_embedding_matrix(feature_columns, l2_reg, seed, prefix="", seq_mask_zero=True): the signature is different. The code your are using is for older version. I got the same problem earlier. Perhaps better to use the model from deepmatch repo.

hluan-deloitte avatar Apr 15 '22 00:04 hluan-deloitte