def get_graph(num_users, num_items, latent_dim):
model = Graph()
model.add_input(name='user_input', input_shape=(num_users,))
model.add_input(name='positive_item_input', input_shape=(num_items,))
model.add_input(name='negative_item_input', input_shape=(num_items,))
model.add_node(layer=Dense(latent_dim, input_shape = (num_users,)),
name='user_latent',
input='user_input')
model.add_shared_node(layer=Dense(latent_dim, input_shape = (num_items,)),
name='item_latent',
inputs=['positive_item_input', 'negative_item_input'],
merge_mode=None,
outputs=['positive_item_latent', 'negative_item_latent'])
model.add_node(layer=Activation('linear'), name='user_pos', inputs=['user_latent', 'positive_item_latent'], merge_mode='dot', dot_axes=1)
model.add_node(layer=Activation('linear'), name='user_neg', inputs=['user_latent', 'negative_item_latent'], merge_mode='dot', dot_axes=1)
model.add_output(name='triplet_loss_out', inputs=['user_pos', 'user_neg'])
model.compile(loss={'triplet_loss_out': ranking_loss}, optimizer=Adam())#Adagrad(lr=0.1, epsilon=1e-06))
return model
评论列表
文章目录