【发布时间】:2020-05-11 05:38:09
【问题描述】:
我正在尝试使用 keras 嵌入来做一个协同过滤风格的推荐系统。是传统的用户项目得分(二进制:0,1)数据格式:
user_id item_id score
1 4 0
1 2 0
...
3000 32 1
我使用了以下模型,但训练曲线在不同时期没有变化。我想知道训练损失基本没有改变但不同时期的准确性是相同的可能是什么原因。
user_input=Input(shape=(1,),name='user_input',dtype='int64')
user_embedding=Embedding(n_users,n_latent_factors,name='user_embedding',\
embeddings_initializer='he_normal',
embeddings_regularizer=l2(1e-6))(user_input)
user_vec=Flatten(name='FlattenUsers')(user_embedding)
user_vec=Dropout(0.30)(user_vec)
item_input=Input(shape=(1,),name='item_input',dtype='int64')
item_embedding=Embedding(n_items,n_latent_factors,name='item_embedding', \
embeddings_initializer='he_normal',
embeddings_regularizer=l2(1e-6))(item_input)
item_vec=Flatten(name='FlattenItems')(item_embedding)
item_vec=Dropout(0.30)(item_vec)
sim=dot([user_vec,item_vec],name='Simalarity-Dot-Product',axes=1)
nn = Concatenate()([user_vec, item_vec])
nn =Dense(50,activation='relu')(nn)
nn =Dropout(0.4)(nn)
nn =Dense(1,activation='relu')(nn)
nn_model =keras.models.Model([user_input, item_input],nn)
nn_model.summary()
nn_model.compile(optimizer=Adam(lr=1e-3, decay = 0.9),loss='binary_crossentropy', metrics=['accuracy'])
history_v3 = nn_model.fit([train.user_id,train.item_id],train.score, batch_size= batch_size,
epochs =10, validation_data = ([valid.user_id,valid.item_id],valid.score),
verbose = 1)
Epoch 1/10
912357/912357 [==============================] - 39s 43us/step - loss: 3.4449 - accuracy: 0.4674 - val_loss: 2.6401 - val_accuracy: 0.4534
Epoch 2/10
912357/912357 [==============================] - 38s 43us/step - loss: 3.3249 - accuracy: 0.4674 - val_loss: 2.5783 - val_accuracy: 0.4534
....
【问题讨论】:
标签: tensorflow keras python-embedding recommender-systems