-
Notifications
You must be signed in to change notification settings - Fork 36
/
Copy pathtrain.py
61 lines (47 loc) · 2.17 KB
/
train.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
#Dependencies
import pandas as pd
import numpy as np
import tensorflow as tf
import itertools
import matplotlib.pyplot as plt
import time
from envs import OfflineEnv
from recommender import DRRAgent
import os
ROOT_DIR = os.getcwd()
DATA_DIR = os.path.join(ROOT_DIR, 'ml-1m/ml-1m')
STATE_SIZE = 10
MAX_EPISODE_NUM = 10
# os.environ["CUDA_VISIBLE_DEVICES"]="1"
if __name__ == "__main__":
print('Data loading...')
#Loading datasets
ratings_list = [i.strip().split("::") for i in open(os.path.join(DATA_DIR,'ratings.dat'), 'r').readlines()]
users_list = [i.strip().split("::") for i in open(os.path.join(DATA_DIR,'users.dat'), 'r').readlines()]
movies_list = [i.strip().split("::") for i in open(os.path.join(DATA_DIR,'movies.dat'),encoding='latin-1').readlines()]
ratings_df = pd.DataFrame(ratings_list, columns = ['UserID', 'MovieID', 'Rating', 'Timestamp'], dtype = np.uint32)
movies_df = pd.DataFrame(movies_list, columns = ['MovieID', 'Title', 'Genres'])
movies_df['MovieID'] = movies_df['MovieID'].apply(pd.to_numeric)
print("Data loading complete!")
print("Data preprocessing...")
# 영화 id를 영화 제목으로
movies_id_to_movies = {movie[0]: movie[1:] for movie in movies_list}
ratings_df = ratings_df.applymap(int)
# 유저별로 본 영화들 순서대로 정리
users_dict = np.load('./data/user_dict.npy', allow_pickle=True)
# 각 유저별 영화 히스토리 길이
users_history_lens = np.load('./data/users_histroy_len.npy')
users_num = max(ratings_df["UserID"])+1
items_num = max(ratings_df["MovieID"])+1
# Training setting
train_users_num = int(users_num * 0.8)
train_items_num = items_num
train_users_dict = {k:users_dict.item().get(k) for k in range(1, train_users_num+1)}
train_users_history_lens = users_history_lens[:train_users_num]
print('DONE!')
time.sleep(2)
env = OfflineEnv(train_users_dict, train_users_history_lens, movies_id_to_movies, STATE_SIZE)
recommender = DRRAgent(env, users_num, items_num, STATE_SIZE, use_wandb=False)
recommender.actor.build_networks()
recommender.critic.build_networks()
recommender.train(MAX_EPISODE_NUM, load_model=False)