diff --git a/cornac/data/dataset.py b/cornac/data/dataset.py index 169a4b274..40480506c 100644 --- a/cornac/data/dataset.py +++ b/cornac/data/dataset.py @@ -272,7 +272,7 @@ def dok_matrix(self): """The user-item interaction matrix in DOK sparse format""" if self.__dok_matrix is None: self.__dok_matrix = dok_matrix( - (self.num_users, self.num_items), dtype=np.float32 + (self.num_users, self.num_items), dtype='float' ) for u, i, r in zip(*self.uir_tuple): self.__dok_matrix[u, i] = r @@ -364,13 +364,13 @@ def build( raise ValueError("data is empty after being filtered!") uir_tuple = ( - np.asarray(u_indices, dtype=np.int), - np.asarray(i_indices, dtype=np.int), - np.asarray(r_values, dtype=np.float), + np.asarray(u_indices, dtype='int'), + np.asarray(i_indices, dtype='int'), + np.asarray(r_values, dtype='float'), ) timestamps = ( - np.fromiter((int(data[i][3]) for i in valid_idx), dtype=np.int) + np.fromiter((int(data[i][3]) for i in valid_idx), dtype='int') if fmt == "UIRT" else None ) @@ -447,7 +447,7 @@ def idx_iter(self, idx_range, batch_size=1, shuffle=False): Returns ------- - iterator : batch of indices (array of np.int) + iterator : batch of indices (array of 'int') """ indices = np.arange(idx_range) @@ -481,8 +481,8 @@ def uir_iter(self, batch_size=1, shuffle=False, binary=False, num_zeros=0): Returns ------- - iterator : batch of users (array of np.int), batch of items (array of np.int), - batch of ratings (array of np.float) + iterator : batch of users (array of 'int'), batch of items (array of 'int'), + batch of ratings (array of 'float') """ for batch_ids in self.idx_iter(len(self.uir_tuple[0]), batch_size, shuffle): @@ -524,8 +524,8 @@ def uij_iter(self, batch_size=1, shuffle=False, neg_sampling="uniform"): Returns ------- - iterator : batch of users (array of np.int), batch of positive items (array of np.int), - batch of negative items (array of np.int) + iterator : batch of users (array of 'int'), batch of positive items (array of 'int'), + batch of negative items (array of 'int') """ @@ -562,9 +562,9 @@ def user_iter(self, batch_size=1, shuffle=False): Returns ------- - iterator : batch of user indices (array of np.int) + iterator : batch of user indices (array of 'int') """ - user_indices = np.fromiter(self.user_indices, dtype=np.int) + user_indices = np.fromiter(self.user_indices, dtype='int') for batch_ids in self.idx_iter(len(user_indices), batch_size, shuffle): yield user_indices[batch_ids] @@ -580,9 +580,9 @@ def item_iter(self, batch_size=1, shuffle=False): Returns ------- - iterator : batch of item indices (array of np.int) + iterator : batch of item indices (array of 'int') """ - item_indices = np.fromiter(self.item_indices, np.int) + item_indices = np.fromiter(self.item_indices, 'int') for batch_ids in self.idx_iter(len(item_indices), batch_size, shuffle): yield item_indices[batch_ids] diff --git a/cornac/data/graph.py b/cornac/data/graph.py index 38ef66d3d..79efec3da 100644 --- a/cornac/data/graph.py +++ b/cornac/data/graph.py @@ -61,9 +61,9 @@ def _build_triplet(self, id_map): self.map_cid.append(id_map[j]) self.val.append(v) - self.map_rid = np.asarray(self.map_rid, dtype=np.int) - self.map_cid = np.asarray(self.map_cid, dtype=np.int) - self.val = np.asarray(self.val, dtype=np.float) + self.map_rid = np.asarray(self.map_rid, dtype='int') + self.map_cid = np.asarray(self.map_cid, dtype='int') + self.val = np.asarray(self.val, dtype='float') def build(self, id_map=None, **kwargs): super().build(id_map=id_map) diff --git a/cornac/data/text.py b/cornac/data/text.py index 2d965e5bd..bd0178bbe 100644 --- a/cornac/data/text.py +++ b/cornac/data/text.py @@ -914,7 +914,7 @@ def batch_seq(self, batch_ids, max_length=None): if max_length is None: max_length = max(len(self.sequences[mapped_id]) for mapped_id in batch_ids) - seq_mat = np.zeros((len(batch_ids), max_length), dtype=np.int) + seq_mat = np.zeros((len(batch_ids), max_length), dtype='int') for i, mapped_id in enumerate(batch_ids): idx_seq = self.sequences[mapped_id][:max_length] for j, idx in enumerate(idx_seq): diff --git a/cornac/eval_methods/base_method.py b/cornac/eval_methods/base_method.py index 0a2d8279e..2d63e8373 100644 --- a/cornac/eval_methods/base_method.py +++ b/cornac/eval_methods/base_method.py @@ -79,7 +79,7 @@ def rating_eval(model, metrics, test_set, user_based=False, verbose=False): miniters=100, total=len(u_indices), ), - dtype=np.float, + dtype='float', ) gt_mat = test_set.csr_matrix @@ -177,7 +177,7 @@ def pos_items(csr_row): if len(test_pos_items) == 0: continue - u_gt_pos = np.zeros(test_set.num_items, dtype=np.int) + u_gt_pos = np.zeros(test_set.num_items, dtype='int') u_gt_pos[test_pos_items] = 1 val_pos_items = [] if val_mat is None else pos_items(val_mat.getrow(user_idx)) @@ -187,7 +187,7 @@ def pos_items(csr_row): else pos_items(train_mat.getrow(user_idx)) ) - u_gt_neg = np.ones(test_set.num_items, dtype=np.int) + u_gt_neg = np.ones(test_set.num_items, dtype='int') u_gt_neg[test_pos_items + val_pos_items + train_pos_items] = 0 item_indices = None if exclude_unknowns else np.arange(test_set.num_items) diff --git a/cornac/eval_methods/propensity_stratified_evaluation.py b/cornac/eval_methods/propensity_stratified_evaluation.py index 3517296d1..aa1751e06 100644 --- a/cornac/eval_methods/propensity_stratified_evaluation.py +++ b/cornac/eval_methods/propensity_stratified_evaluation.py @@ -87,7 +87,7 @@ def pos_items(csr_row): if len(test_pos_items) == 0: continue - u_gt_pos = np.zeros(test_set.num_items, dtype=np.float) + u_gt_pos = np.zeros(test_set.num_items, dtype='float') u_gt_pos[test_pos_items] = 1 val_pos_items = [] if val_mat is None else pos_items(val_mat.getrow(user_idx)) @@ -97,7 +97,7 @@ def pos_items(csr_row): else pos_items(train_mat.getrow(user_idx)) ) - u_gt_neg = np.ones(test_set.num_items, dtype=np.int) + u_gt_neg = np.ones(test_set.num_items, dtype='int') u_gt_neg[test_pos_items + val_pos_items + train_pos_items] = 0 item_indices = None if exclude_unknowns else np.arange(test_set.num_items) @@ -256,7 +256,7 @@ def _estimate_propensities(self): item_freq[i] += 1 # fit the exponential param - data = np.array([e for e in item_freq.values()], dtype=np.float) + data = np.array([e for e in item_freq.values()], dtype='float') results = powerlaw.Fit(data, discrete=True, fit_method="Likelihood") alpha = results.power_law.alpha fmin = results.power_law.xmin @@ -277,7 +277,7 @@ def _build_stratified_dataset(self, test_data): # match the corresponding propensity score for each feedback test_props = np.array( - [self.props[i] for u, i, r in test_data], dtype=np.float64 + [self.props[i] for u, i, r in test_data], dtype='float' ) # stratify diff --git a/cornac/metrics/ranking.py b/cornac/metrics/ranking.py index 166f65313..b5535dc3f 100644 --- a/cornac/metrics/ranking.py +++ b/cornac/metrics/ranking.py @@ -437,8 +437,8 @@ def compute(self, pd_scores, gt_pos, gt_neg=None, **kwargs): if gt_neg is None: gt_neg = np.logical_not(gt_pos) - pos_scores = pd_scores[gt_pos.astype(np.bool)] - neg_scores = pd_scores[gt_neg.astype(np.bool)] + pos_scores = pd_scores[gt_pos.astype('bool')] + neg_scores = pd_scores[gt_neg.astype('bool')] ui_scores = np.repeat(pos_scores, len(neg_scores)) uj_scores = np.tile(neg_scores, len(pos_scores)) @@ -476,7 +476,7 @@ def compute(self, pd_scores, gt_pos, **kwargs): AP score. """ - relevant = gt_pos.astype(np.bool) + relevant = gt_pos.astype('bool') rank = rankdata(-pd_scores, "max")[relevant] L = rankdata(-pd_scores[relevant], "max") ans = (L / rank).mean() diff --git a/cornac/models/cdl/recom_cdl.py b/cornac/models/cdl/recom_cdl.py index bc85a344f..349799bf7 100644 --- a/cornac/models/cdl/recom_cdl.py +++ b/cornac/models/cdl/recom_cdl.py @@ -181,6 +181,8 @@ def fit(self, train_set, val_set=None): def _fit_cdl(self): import tensorflow.compat.v1 as tf from .cdl import Model + + tf.disable_eager_execution() R = self.train_set.csc_matrix # csc for efficient slicing over items n_users, n_items = self.train_set.num_users, self.train_set.num_items diff --git a/cornac/models/cdl/requirements.txt b/cornac/models/cdl/requirements.txt index 26ff9379f..a60e13761 100644 --- a/cornac/models/cdl/requirements.txt +++ b/cornac/models/cdl/requirements.txt @@ -1 +1 @@ -tensorflow==1.15.2 \ No newline at end of file +tensorflow==2.12.0 \ No newline at end of file diff --git a/cornac/models/cdr/model.py b/cornac/models/cdr/cdr.py similarity index 99% rename from cornac/models/cdr/model.py rename to cornac/models/cdr/cdr.py index eeaa40353..fde7c3a83 100644 --- a/cornac/models/cdr/model.py +++ b/cornac/models/cdr/cdr.py @@ -14,7 +14,7 @@ # ============================================================================ """Collaborative Deep Ranking model""" -import tensorflow as tf +import tensorflow.compat.v1 as tf from ..cdl.cdl import sdae diff --git a/cornac/models/cdr/recom_cdr.py b/cornac/models/cdr/recom_cdr.py index 6d2b01a07..db22a63f1 100644 --- a/cornac/models/cdr/recom_cdr.py +++ b/cornac/models/cdr/recom_cdr.py @@ -168,8 +168,10 @@ def fit(self, train_set, val_set=None): return self def _fit_cdr(self): - import tensorflow as tf - from .model import Model + import tensorflow.compat.v1 as tf + from .cdr import Model + + tf.disable_eager_execution() n_users = self.train_set.num_users n_items = self.train_set.num_items diff --git a/cornac/models/cdr/requirements.txt b/cornac/models/cdr/requirements.txt index 35e6fa9e9..a60e13761 100644 --- a/cornac/models/cdr/requirements.txt +++ b/cornac/models/cdr/requirements.txt @@ -1 +1 @@ -tensorflow>=1.13.0 \ No newline at end of file +tensorflow==2.12.0 \ No newline at end of file diff --git a/cornac/models/conv_mf/convmf.py b/cornac/models/conv_mf/convmf.py index 3bdf58262..a1e9ab055 100644 --- a/cornac/models/conv_mf/convmf.py +++ b/cornac/models/conv_mf/convmf.py @@ -13,7 +13,7 @@ # limitations under the License. # ============================================================================ -import tensorflow as tf +import tensorflow.compat.v1 as tf def conv_layer( @@ -116,7 +116,7 @@ def _build_graph(self): # Fully-connected layers self.model_output = fc_layer( input=self.model_output, - num_input=self.model_output.get_shape()[-1].value, + num_input=self.model_output.get_shape()[-1], num_output=self.vanila_dimension, ) # Dropout layer diff --git a/cornac/models/conv_mf/recom_convmf.py b/cornac/models/conv_mf/recom_convmf.py index 57caebdf6..7ff7e4169 100644 --- a/cornac/models/conv_mf/recom_convmf.py +++ b/cornac/models/conv_mf/recom_convmf.py @@ -202,6 +202,8 @@ def _fit_convmf(self): import tensorflow.compat.v1 as tf from .convmf import CNN_module + tf.disable_eager_execution() + # less verbose TF os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" tf.logging.set_verbosity(tf.logging.ERROR) diff --git a/cornac/models/conv_mf/requirements.txt b/cornac/models/conv_mf/requirements.txt index 308f8e170..a60e13761 100644 --- a/cornac/models/conv_mf/requirements.txt +++ b/cornac/models/conv_mf/requirements.txt @@ -1 +1 @@ -tensorflow>=1.15.2 \ No newline at end of file +tensorflow==2.12.0 \ No newline at end of file diff --git a/cornac/models/cvae/cvae.py b/cornac/models/cvae/cvae.py index 3cab57b14..ae5f1057d 100644 --- a/cornac/models/cvae/cvae.py +++ b/cornac/models/cvae/cvae.py @@ -13,7 +13,7 @@ # limitations under the License. # ============================================================================ -import tensorflow as tf +import tensorflow.compat.v1 as tf from ..cdl.cdl import act_functions @@ -152,7 +152,7 @@ def _vae(self, X): "W1": tf.get_variable( "W1", [self.input_dim, self.layers[0]], - initializer=tf.contrib.layers.xavier_initializer(seed=self.seed), + initializer=tf.keras.initializers.glorot_uniform(seed=self.seed), dtype=tf.float32, ), "b1": tf.get_variable( @@ -164,7 +164,7 @@ def _vae(self, X): "W2": tf.get_variable( "W2", [self.layers[0], self.layers[1]], - initializer=tf.contrib.layers.xavier_initializer(seed=self.seed), + initializer=tf.keras.initializers.glorot_uniform(seed=self.seed), dtype=tf.float32, ), "b2": tf.get_variable( @@ -176,7 +176,7 @@ def _vae(self, X): "W_z_mean": tf.get_variable( "W_z_mean", [self.layers[1], self.n_z], - initializer=tf.contrib.layers.xavier_initializer(seed=self.seed), + initializer=tf.keras.initializers.glorot_uniform(seed=self.seed), dtype=tf.float32, ), "b_z_mean": tf.get_variable( @@ -188,7 +188,7 @@ def _vae(self, X): "W_z_log_sigma": tf.get_variable( "W_z_log_sigma", [self.layers[1], self.n_z], - initializer=tf.contrib.layers.xavier_initializer(seed=self.seed), + initializer=tf.keras.initializers.glorot_uniform(seed=self.seed), dtype=tf.float32, ), "b_z_log_sigma": tf.get_variable( @@ -222,7 +222,7 @@ def _vae(self, X): "W2": tf.get_variable( "W2", [self.n_z, self.layers[1]], - initializer=tf.contrib.layers.xavier_initializer(seed=self.seed), + initializer=tf.keras.initializers.glorot_uniform(seed=self.seed), dtype=tf.float32, ), "b2": tf.get_variable( diff --git a/cornac/models/cvae/recom_cvae.py b/cornac/models/cvae/recom_cvae.py index 76375f169..970f0fe39 100644 --- a/cornac/models/cvae/recom_cvae.py +++ b/cornac/models/cvae/recom_cvae.py @@ -177,7 +177,9 @@ def _fit_cvae(self): # VAE initialization from .cvae import Model - import tensorflow as tf + import tensorflow.compat.v1 as tf + + tf.disable_eager_execution() tf.set_random_seed(self.seed) model = Model( diff --git a/cornac/models/cvae/requirements.txt b/cornac/models/cvae/requirements.txt index 75c51ddbf..1f1f6191b 100644 --- a/cornac/models/cvae/requirements.txt +++ b/cornac/models/cvae/requirements.txt @@ -1 +1 @@ -tensorflow>=1.13.0,<2.0 +tensorflow==2.12.0 diff --git a/cornac/models/ncf/requirements.txt b/cornac/models/ncf/requirements.txt index 308f8e170..0be1edda3 100644 --- a/cornac/models/ncf/requirements.txt +++ b/cornac/models/ncf/requirements.txt @@ -1 +1 @@ -tensorflow>=1.15.2 \ No newline at end of file +tensorflow>=1.15.2,<2.0.0 \ No newline at end of file diff --git a/cornac/models/wmf/recom_wmf.py b/cornac/models/wmf/recom_wmf.py index 82366d928..9b9b390aa 100644 --- a/cornac/models/wmf/recom_wmf.py +++ b/cornac/models/wmf/recom_wmf.py @@ -151,7 +151,7 @@ def fit(self, train_set, val_set=None): return self def _fit_cf(self,): - import tensorflow as tf + import tensorflow.compat.v1 as tf from .wmf import Model np.random.seed(self.seed) diff --git a/cornac/models/wmf/requirements.txt b/cornac/models/wmf/requirements.txt index c4a615f81..a60e13761 100644 --- a/cornac/models/wmf/requirements.txt +++ b/cornac/models/wmf/requirements.txt @@ -1 +1 @@ -tensorflow>=1.13.0,<2.0 \ No newline at end of file +tensorflow==2.12.0 \ No newline at end of file diff --git a/cornac/models/wmf/wmf.py b/cornac/models/wmf/wmf.py index 41d7c419c..596d06090 100644 --- a/cornac/models/wmf/wmf.py +++ b/cornac/models/wmf/wmf.py @@ -13,7 +13,7 @@ # limitations under the License. # ============================================================================ -import tensorflow as tf +import tensorflow.compat.v1 as tf class Model: diff --git a/tests/cornac/data/test_text.py b/tests/cornac/data/test_text.py index 3dab388bf..2ea56bfec 100644 --- a/tests/cornac/data/test_text.py +++ b/tests/cornac/data/test_text.py @@ -360,7 +360,7 @@ def setUp(self): [4, 4, 0], [0, 4, 0], [0, 4, 0], - ], dtype=np.int) + ], dtype='int') def test_init(self): try: