-
Notifications
You must be signed in to change notification settings - Fork 10
/
Model.py
65 lines (53 loc) · 1.95 KB
/
Model.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import numpy as np
from keras.layers import Input, Embedding, Reshape, Dense, Dropout, Lambda
from keras.layers.merge import concatenate, dot, add
from keras.models import Model
from keras import backend as K
from keras.regularizers import l2
def build_cf_model(n_users, n_movies, dim, isBest=False):
u_input = Input(shape=(1,))
if isBest:
u = Embedding(n_users, dim, embeddings_regularizer=l2(1e-5))(u_input)
else:
u = Embedding(n_users, dim)(u_input)
u = Reshape((dim,))(u)
u = Dropout(0.1)(u)
m_input = Input(shape=(1,))
if isBest:
m = Embedding(n_movies, dim, embeddings_regularizer=l2(1e-5))(m_input)
else:
m = Embedding(n_movies, dim)(m_input)
m = Reshape((dim,))(m)
m = Dropout(0.1)(m)
if isBest:
u_bias = Embedding(n_users, 1, embeddings_regularizer=l2(1e-5))(u_input)
else:
u_bias = Embedding(n_users, 1)(u_input)
u_bias = Reshape((1,))(u_bias)
if isBest:
m_bias = Embedding(n_movies, 1, embeddings_regularizer=l2(1e-5))(m_input)
else:
m_bias = Embedding(n_movies, 1)(m_input)
m_bias = Reshape((1,))(m_bias)
out = dot([u, m], -1)
out = add([out, u_bias, m_bias])
if isBest:
out = Lambda(lambda x: x + K.constant(3.581712))(out)
model = Model(inputs=[u_input, m_input], outputs=out)
return model
def build_deep_model(n_users, n_movies, dim, dropout=0.1):
u_input = Input(shape=(1,))
u = Embedding(n_users, dim)(u_input)
u = Reshape((dim,))(u)
m_input = Input(shape=(1,))
m = Embedding(n_movies, dim)(m_input)
m = Reshape((dim,))(m)
out = concatenate([u, m])
out = Dropout(dropout)(out)
out = Dense(dim, activation='relu')(out)
out = Dropout(dropout)(out)
out = Dense(1, activation='relu')(out)
model = Model(inputs=[u_input, m_input], outputs=out)
return model
def rate(model, user_id, item_id):
return model.predict([np.array([user_id]), np.array([item_id])])[0][0]