diff --git a/cornac/models/narre/narre.py b/cornac/models/narre/narre.py index 6601096fa..590e0d25c 100644 --- a/cornac/models/narre/narre.py +++ b/cornac/models/narre/narre.py @@ -13,11 +13,13 @@ # limitations under the License. # ============================================================================ +import os +import random import numpy as np import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers, initializers, Input -from tensorflow.python.keras.preprocessing.sequence import pad_sequences +from tensorflow.keras.utils import pad_sequences from ...utils import get_rng from ...utils.init_utils import uniform @@ -56,7 +58,7 @@ def get_data(batch_ids, train_set, max_text_length, by='user', max_num_review=No review_group = train_set.review_text.user_review if by == 'user' else train_set.review_text.item_review for idx in batch_ids: ids, review_ids = [], [] - for inc, (jdx, review_idx) in enumerate(review_group[idx].items()): + for inc, (jdx, review_idx) in enumerate(review_group.get(idx, {}).items()): if max_num_review is not None and inc == max_num_review: break ids.append(jdx) @@ -76,9 +78,9 @@ class AddGlobalBias(keras.layers.Layer): def __init__(self, init_value=0.0, name="global_bias"): super(AddGlobalBias, self).__init__(name=name) self.init_value = init_value - + def build(self, input_shape): - self.global_bias = self.add_weight(shape=1, + self.global_bias = self.add_weight(shape=(1,), initializer=tf.keras.initializers.Constant(self.init_value), trainable=True, name="add_weight") @@ -138,7 +140,6 @@ def call(self, inputs, training=None): self.item_bias(i_item_id) ]) ) - # import pdb; pdb.set_trace() return r class NARREModel: @@ -159,7 +160,10 @@ def __init__(self, n_users, n_items, vocab, global_mean, n_factors=32, embedding self.verbose = verbose if seed is not None: self.rng = get_rng(seed) + os.environ['PYTHONHASHSEED']=str(seed) tf.random.set_seed(seed) + np.random.seed(seed) + random.seed(seed) embedding_matrix = uniform(shape=(self.n_vocab, self.embedding_size), low=-0.5, high=0.5, random_state=self.rng) embedding_matrix[:4, :] = np.zeros((4, self.embedding_size)) diff --git a/cornac/models/narre/recom_narre.py b/cornac/models/narre/recom_narre.py index 25b19f2c3..3786b05bd 100644 --- a/cornac/models/narre/recom_narre.py +++ b/cornac/models/narre/recom_narre.py @@ -226,7 +226,7 @@ def _fit_tf(self, train_set, val_set): bar_format="{l_bar}{bar:10}{r_bar}{bar:-10b}", ) for i_epoch, _ in enumerate(loop): - train_loss.reset_states() + train_loss.reset_state() for i, (batch_users, batch_items, batch_ratings) in enumerate( train_set.uir_iter(self.batch_size, shuffle=True) ): diff --git a/cornac/models/narre/requirements.txt b/cornac/models/narre/requirements.txt index 14e2508bc..56d146226 100644 --- a/cornac/models/narre/requirements.txt +++ b/cornac/models/narre/requirements.txt @@ -1 +1 @@ -tensorflow==2.6.0 +tensorflow[and-cuda]==2.21.0