Example #1
0
    def _initialize_teacher(self, interactions):
        # initialize teacher model
        self._num_items = interactions.num_items
        self._num_users = interactions.num_users

        self._teacher_net = gpu(
            Caser(self._num_users, self._num_items, self._teacher_model_args),
            self._use_cuda)
        # load teacher model
        if os.path.isfile(self._teacher_model_path):
            output_str = ("loading teacher model %s" %
                          self._teacher_model_path)
            print(output_str)

            checkpoint = torch.load(self._teacher_model_path)
            self._teacher_net.load_state_dict(checkpoint['state_dict'])
            output_str = "loaded model %s (epoch %d)" % (
                self._teacher_model_path, checkpoint['epoch_num'])
            print(output_str)
        else:
            output_str = "no model found at %s" % self._teacher_model_path
            print output_str

        # set teacher model to evaluation mode
        self._teacher_net.eval()
    def _initialize(self, interactions):
        self._num_items = interactions.num_items
        self._num_users = interactions.num_users

        self.test_sequence = interactions.test_sequences

        self._net = Caser(self._num_users, self._num_items, self.args)
        self.sess = tf.Session()
        init = tf.global_variables_initializer()
        self.sess.run(init)
Example #3
0
    def _initialize(self, interactions):
        self._num_items = interactions.num_items
        self._num_users = interactions.num_users

        self.test_sequence = interactions.test_sequences

        self._net = Caser(self._num_users, self._num_items, self.model_args)

        self._optimizer = optim.Adam(self._net.parameters(),
                                     weight_decay=self._l2,
                                     lr=self._learning_rate)
Example #4
0
    def _initialize_student(self, interactions):

        self._num_items = interactions.num_items
        self._num_users = interactions.num_users

        self.test_sequence = interactions.test_sequences

        self._net = gpu(
            Caser(self._num_users, self._num_items, self._student_model_args),
            self._use_cuda)
        self._optimizer = optim.Adam(self._net.parameters(),
                                     weight_decay=self._l2,
                                     lr=self._learning_rate)

        self._loss_func = weighted_sigmoid_log_loss
def test(args):
    data = Interactions(args.test_root)
    data.to_sequence(args.L, args.T)
    sequences_np = data.sequences.sequences
    targets_np = data.sequences.targets
    users_np = data.sequences.user_ids.reshape(-1, 1)
    n_test = sequences_np.shape[0]
    print('total test instances: %d' % n_test)
    num_users = data.num_users
    num_items = data.num_items
    NDCG, HR, MRR = 0.0, 0.0, 0.0
    item_ids = np.zeros((args.batch_size,num_items))
    for i in range(args.batch_size):
        item_ids[i] = np.arange(num_items)
    test_batches = n_test // args.batch_size

    model=Caser(num_users,num_items,args)
    gpu_config = tf.ConfigProto()
    gpu_config.gpu_options.allow_growth = True
    with tf.Session(config=gpu_config) as sess:
        saver = tf.train.Saver(tf.global_variables())
        ckpt = tf.train.get_checkpoint_state(args.check_dir)
        if ckpt and ckpt.model_checkpoint_path:
            saver.restore(sess, ckpt.model_checkpoint_path)
            print('Restore model from {} successfully!'.format(args.check_dir))
        else:
            print('Restore model from {} failed!'.format(args.check_dir))
            return
        for i in range(test_batches):
            sequences = sequences_np[i * args.batch_size: (i + 1) * args.batch_size]
            targets = targets_np[i * args.batch_size: (i + 1) * args.batch_size]
            users = users_np[i * args.batch_size: (i + 1) * args.batch_size]
            _, top_k_index = model.predict(sess, sequences, users, item_ids)
            hr, ndcg, mrr = 0.0, 0.0, 0.0
            for i in range(args.batch_size):
                cur_user = top_k_index[i]
                for j in range(args.top_k):
                    if targets[i][0] == cur_user[j]:
                        hr += 1
                        mrr += 1 / (1 + j)
                        dcg = 1 / np.log2(1 + 1 + j)
                        idcg = 1 / np.log2(1 + 1)
                        ndcg += dcg / idcg
                        break
            HR += hr / args.batch_size
            NDCG += ndcg / args.batch_size
            MRR += mrr / args.batch_size
    return HR / test_batches, NDCG / test_batches, MRR / test_batches
Example #6
0
    def _initialize(self):
        print("train/test examination...")
        n_user, n_item, item_map = examination(self.train_path, self.test_path)

        self._num_items = len(item_map) + 1  # for 0 padding
        self._num_users = n_user
        self.item_map = item_map
        self.item_cumsum = self._get_item_cumsum()
        #items = [i[0] for i in  self.item_map.values()]
        #print(max(items),self._num_items)

        # get pr_etrain embeddings
        print(self.pre_train_path)
        print(os.path.isfile(self.pre_train_path))
        if self.pre_train_path and os.path.isfile(self.pre_train_path):
            print("loading pre_train value")
            w2v = Word2Vec.load(self.pre_train_path)
            dims = w2v.trainables.layer1_size
            pre_train_array = list()
            sort_index = list()
            for k, v in item_map.items():
                sort_index.append(v[0])
                try:
                    pre_train_array.append(w2v.wv.get_vector(str(k)))
                except KeyError:
                    pre_train_array.append(np.random.randn(dims))
            # add 0 padding:
            if 0 not in sort_index:
                sort_index.append(0)
                pre_train_array.append(np.random.randn(dims))

            pre_train_array = np.array(pre_train_array)
            pre_train_array = pre_train_array[np.argsort(sort_index)]
        else:
            print("no pre_train value")
            pre_train_array = None

        self._net = gpu(
            Caser(self._num_users, self._num_items, self.model_args,
                  pre_train_array), self._use_cuda)

        par = filter(lambda p: p.requires_grad, self._net.parameters())
        #self._net.parameters()
        self._optimizer = optim.Adam(par,
                                     weight_decay=self._l2,
                                     lr=self._learning_rate)