Gated Recurrent Units - GRU4REC recommender system

What is GRU4REC ?

How does it work?

rnn

gru

How can we implement this?

from tensorflow.keras import Model
from tensorflow.keras.layers import Embedding, GRU, Dropout, Dense
from tensorflow.keras.losses import SparseCategoricalCrossentropy

class GRU4Rec(Model):
    def __init__(self, vec_size, embedding_dim, rnn_units, dropout):
        super().__init__(self)
        self.embedding = Embedding(vec_size, embedding_dim)
        self.gru = GRU(rnn_units, return_sequences=True,  return_state=True)
        self.dropout = Dropout(dropout)
        self.dense = Dense(vec_size, activation='softmax')

    def call(self, inputs, states=None, return_state=False, training=False):
        x = self.embedding(inputs, training=training)
        if states is None:
            states = self.gru.get_initial_state(x)

        x, states = self.gru(x, initial_state=states, training=training)
        x = self.dropout(x)
        x = self.dense(x, training=training)
        if return_state:
            return x, states
        else:
            return x

model = GRU4Rec(
    vocab_size=len(n_items),
    embedding_dim=embedding_dim,
    rnn_units=rnn_units
)

loss = SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer='adam', loss=loss, metrics=['accuracy'])
model.fit(data)

How can we deploy such a model?

gru