DeepCTR
DeepCTR copied to clipboard
unsupported operand type(s) for +: 'int' and 'str'
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
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.