Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 62 additions & 93 deletions Train.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,43 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 21,
"id": "877996be",
"metadata": {},
"outputs": [],
"source": [
"import glob\n",
"import os\n",
"\n",
"def Saver(model_name):\n",
"\n",
" os.makedirs('./ckpt', exist_ok=True)\n",
" os.makedirs('./ckpt/' + model_name, exist_ok=True)\n",
" \n",
" model_dir_path = './ckpt/' + model_name\n",
" runs = sorted(glob.glob(os.path.join('./', model_name, '/experiment_*')))\n",
" indices = []\n",
" for tmp in runs:\n",
" tmp_num = tmp.split(\"\\\\\")[-1]\n",
" tmp_num = int(tmp_num.split(\"_\")[-1])\n",
" indices.append(tmp_num)\n",
" \n",
" if len(indices) == 0:\n",
" run_id = str(0)\n",
" else:\n",
" run_id = np.max(indices) + 1\n",
"\n",
" experiment_dir = os.path.join(model_dir_path, '/', f'experiment_{str(run_id)}')\n",
"\n",
" os.makedirs(experiment_dir, exist_ok = True)\n",
" \n",
"\n",
" return experiment_dir"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
Expand Down Expand Up @@ -75,7 +111,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 24,
"metadata": {
"scrolled": true
},
Expand All @@ -86,92 +122,20 @@
"text": [
"Start training model: LSTM_rg\n",
"\n",
"Epoch 1/1000\n",
"train Loss: 0.0496\n",
"val Loss: 0.0438\n",
"\n",
"Epoch 50/1000\n",
"train Loss: 0.0405\n",
"val Loss: 0.0445\n",
"\n",
"Epoch 100/1000\n",
"train Loss: 0.0289\n",
"val Loss: 0.0418\n",
"Epoch 1/100\n",
"train Loss: 0.0566\n",
"val Loss: 0.0569\n",
"\n",
"Epoch 150/1000\n",
"train Loss: 0.0240\n",
"val Loss: 0.0410\n",
"\n",
"Epoch 200/1000\n",
"train Loss: 0.0192\n",
"val Loss: 0.0320\n",
"\n",
"Epoch 250/1000\n",
"train Loss: 0.0153\n",
"val Loss: 0.0431\n",
"\n",
"Epoch 300/1000\n",
"train Loss: 0.0077\n",
"val Loss: 0.0493\n",
"\n",
"Epoch 350/1000\n",
"train Loss: 0.0063\n",
"val Loss: 0.0316\n",
"\n",
"Epoch 400/1000\n",
"train Loss: 0.0045\n",
"val Loss: 0.0463\n",
"\n",
"Epoch 450/1000\n",
"train Loss: 0.0038\n",
"val Loss: 0.0470\n",
"\n",
"Epoch 500/1000\n",
"train Loss: 0.0032\n",
"val Loss: 0.0414\n",
"\n",
"Epoch 550/1000\n",
"train Loss: 0.0039\n",
"val Loss: 0.0361\n",
"\n",
"Epoch 600/1000\n",
"train Loss: 0.0021\n",
"val Loss: 0.0327\n",
"\n",
"Epoch 650/1000\n",
"train Loss: 0.0015\n",
"val Loss: 0.0320\n",
"\n",
"Epoch 700/1000\n",
"train Loss: 0.0018\n",
"val Loss: 0.0273\n",
"\n",
"Epoch 750/1000\n",
"train Loss: 0.0012\n",
"val Loss: 0.0279\n",
"\n",
"Epoch 800/1000\n",
"train Loss: 0.0010\n",
"val Loss: 0.0300\n",
"\n",
"Epoch 850/1000\n",
"train Loss: 0.0010\n",
"val Loss: 0.0293\n",
"\n",
"Epoch 900/1000\n",
"train Loss: 0.0009\n",
"val Loss: 0.0281\n",
"\n",
"Epoch 950/1000\n",
"train Loss: 0.0008\n",
"val Loss: 0.0273\n",
"Epoch 50/100\n",
"train Loss: 0.0434\n",
"val Loss: 0.0434\n",
"\n",
"Epoch 1000/1000\n",
"train Loss: 0.0010\n",
"val Loss: 0.0303\n",
"Epoch 100/100\n",
"train Loss: 0.0326\n",
"val Loss: 0.0346\n",
"\n",
"Training complete in 0m 53s\n",
"Best val MSE: 0.018548\n"
"Training complete in 0m 5s\n",
"Best val MSE: 0.034624\n"
]
}
],
Expand All @@ -180,9 +144,10 @@
"model_name = 'LSTM_rg'\n",
"model_params = config.model_config[model_name]\n",
"\n",
"exp_path = Saver(model_name)\n",
"data_reg = mr.Regression(model_params)\n",
"best_model = data_reg.train_model(train_x, train_y, valid_x, valid_y) # 모델 학습\n",
"data_reg.save_model(best_model, best_model_path=model_params[\"best_model_path\"]) # 모델 저장"
"data_reg.save_model(best_model, best_model_path=os.path.join(exp_path, model_params[\"best_model\"])) # 모델 저장"
]
},
{
Expand Down Expand Up @@ -292,9 +257,10 @@
"model_name = 'GRU_rg'\n",
"model_params = config.model_config[model_name]\n",
"\n",
"exp_path = Saver(model_name)\n",
"data_reg = mr.Regression(model_params)\n",
"best_model = data_reg.train_model(train_x, train_y, valid_x, valid_y) # 모델 학습\n",
"data_reg.save_model(best_model, best_model_path=model_params[\"best_model_path\"]) # 모델 저장"
"data_reg.save_model(best_model, best_model_path=os.path.join(exp_path, model_params[\"best_model\"])) # 모델 저장"
]
},
{
Expand Down Expand Up @@ -404,9 +370,10 @@
"model_name = 'CNN_1D_rg'\n",
"model_params = config.model_config[model_name]\n",
"\n",
"exp_path = Saver(model_name)\n",
"data_reg = mr.Regression(model_params)\n",
"best_model = data_reg.train_model(train_x, train_y, valid_x, valid_y) # 모델 학습\n",
"data_reg.save_model(best_model, best_model_path=model_params[\"best_model_path\"]) # 모델 저장"
"data_reg.save_model(best_model, best_model_path=os.path.join(exp_path, model_params[\"best_model\"])) # 모델 저장"
]
},
{
Expand Down Expand Up @@ -516,9 +483,10 @@
"model_name = 'LSTM_FCNs_rg'\n",
"model_params = config.model_config[model_name]\n",
"\n",
"exp_path = Saver(model_name)\n",
"data_reg = mr.Regression(model_params)\n",
"best_model = data_reg.train_model(train_x, train_y, valid_x, valid_y) # 모델 학습\n",
"data_reg.save_model(best_model, best_model_path=model_params[\"best_model_path\"]) # 모델 저장"
"data_reg.save_model(best_model, best_model_path=os.path.join(exp_path, model_params[\"best_model\"])) # 모델 저장"
]
},
{
Expand Down Expand Up @@ -666,9 +634,10 @@
"model_name = 'FC_rg'\n",
"model_params = config.model_config[model_name]\n",
"\n",
"exp_path = Saver(model_name)\n",
"data_reg = mr.Regression(model_params)\n",
"best_model = data_reg.train_model(train_x, train_y, valid_x, valid_y) # 모델 학습\n",
"data_reg.save_model(best_model, best_model_path=model_params[\"best_model_path\"]) # 모델 저장"
"data_reg.save_model(best_model, best_model_path=os.path.join(exp_path, model_params[\"best_model\"])) # 모델 저장"
]
},
{
Expand All @@ -681,7 +650,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.7.11 ('iitp')",
"display_name": "Python 3.7.13 ('hwang')",
"language": "python",
"name": "python3"
},
Expand All @@ -695,7 +664,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.11"
"version": "3.7.13"
},
"toc": {
"base_numbering": 1,
Expand All @@ -712,7 +681,7 @@
},
"vscode": {
"interpreter": {
"hash": "448579598765c533641c9414ab2d5f7dc2c763c0bd653033bda6f4c5cb841b26"
"hash": "4f311b633f277f5e4d199db5715cd5ecdec0742926e2e6ae6b04aa7fd42957fc"
}
}
},
Expand Down
20 changes: 10 additions & 10 deletions config.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,37 @@
model_config = {
"LSTM_rg" : { # Case 1. LSTM model (w/o data representation)
'model': 'LSTM_rg', # classification에 활용할 알고리즘 정의
'best_model_path': './ckpt/lstm.pt', # 학습 완료 모델 저장 경로
'best_model': 'lstm.pt', # 학습 완료 모델 저장 경로
'parameter': {
'input_size': 24, # 데이터의 변수 개수, int
'num_layers': 2, # recurrent layers의 수, int(default: 2, 범위: 1 이상)
'hidden_size': 64, # hidden state의 차원, int(default: 64, 범위: 1 이상)
'dropout': 0.1, # dropout 확률, float(default: 0.1, 범위: 0 이상 1 이하)
'bidirectional': True, # 모델의 양방향성 여부, bool(default: True)
'num_epochs': 1000, # 학습 epoch 횟수, int(default: 1000, 범위: 1 이상)
'num_epochs': 1, # 학습 epoch 횟수, int(default: 1000, 범위: 1 이상)
'batch_size': 16, # batch 크기, int(default: 16, 범위: 1 이상, 컴퓨터 사양에 적합하게 설정)
'lr': 0.0001, # learning rate, float(default: 0.0001, 범위: 0.1 이하)
'device': 'cuda' # 학습 환경, ["cuda", "cpu"] 중 선택
}
},
"GRU_rg": { # Case 2. GRU model (w/o data representation)
'model': 'GRU_rg', # classification에 활용할 알고리즘 정의
'best_model_path': './ckpt/gru.pt', # 학습 완료 모델 저장 경로
'best_model': 'gru.pt', # 학습 완료 모델 저장 경로
'parameter': {
'input_size': 24, # 데이터의 변수 개수, int
'num_layers': 2, # recurrent layers의 수, int(default: 2, 범위: 1 이상)
'hidden_size': 64, # hidden state의 차원, int(default: 64, 범위: 1 이상)
'dropout': 0.1, # dropout 확률, float(default: 0.1, 범위: 0 이상 1 이하)
'bidirectional': True, # 모델의 양방향성 여부, bool(default: True)
'num_epochs': 1000, # 학습 epoch 횟수, int(default: 1000, 범위: 1 이상)
'num_epochs': 100, # 학습 epoch 횟수, int(default: 1000, 범위: 1 이상)
'batch_size': 16, # batch 크기, int(default: 16, 범위: 1 이상, 컴퓨터 사양에 적합하게 설정)
'lr': 0.0001, # learning rate, float(default: 0.0001, 범위: 0.1 이하)
'device': 'cuda' # 학습 환경, ["cuda", "cpu"] 중 선택
}
},
"CNN_1D_rg": { # Case 3. CNN_1D model (w/o data representation)
'model': 'CNN_1D_rg', # classification에 활용할 알고리즘 정의
'best_model_path': './ckpt/cnn_1d.pt', # 학습 완료 모델 저장 경로
'best_model': 'cnn_1d.pt', # 학습 완료 모델 저장 경로
'parameter': {
'input_size': 24, # 데이터의 변수 개수, int
'seq_len': 144, # 데이터의 시간 길이, int
Expand All @@ -40,34 +40,34 @@
'stride': 1, # convolution layer의 stride 크기, int(default: 1, 범위: 1 이상)
'padding': 0, # padding 크기, int(default: 0, 범위: 0 이상)
'drop_out': 0.1, # dropout 확률, float(default: 0.1, 범위: 0 이상 1 이하)
'num_epochs': 1000, # 학습 epoch 횟수, int(default: 1000, 범위: 1 이상)
'num_epochs': 100, # 학습 epoch 횟수, int(default: 1000, 범위: 1 이상)
'batch_size': 16, # batch 크기, int(default: 16, 범위: 1 이상, 컴퓨터 사양에 적합하게 설정)
'lr': 0.0001, # learning rate, float(default: 0.0001, 범위: 0.1 이하)
'device': 'cuda' # 학습 환경, ["cuda", "cpu"] 중 선택
}
},
"LSTM_FCNs_rg": { # Case 4. LSTM_FCNs model (w/o data representation)
'model': 'LSTM_FCNs_rg', # classification에 활용할 알고리즘 정의
'best_model_path': './ckpt/lstm_fcn.pt', # 학습 완료 모델 저장 경로
'best_model': 'lstm_fcn.pt', # 학습 완료 모델 저장 경로
'parameter': {
'input_size': 24, # 데이터의 변수 개수, int
'num_layers': 2, # recurrent layers의 수, int(default: 1, 범위: 1 이상)
'lstm_drop_out': 0.1, # LSTM dropout 확률, float(default: 0.1, 범위: 0 이상 1 이하)
'fc_drop_out': 0.1, # FC dropout 확률, float(default: 0.1, 범위: 0 이상 1 이하)
'num_epochs': 1000, # 학습 epoch 횟수, int(default: 1000, 범위: 1 이상)
'num_epochs': 100, # 학습 epoch 횟수, int(default: 1000, 범위: 1 이상)
'batch_size': 16, # batch 크기, int(default: 16, 범위: 1 이상, 컴퓨터 사양에 적합하게 설정)
'lr': 0.0001, # learning rate, float(default: 0.0001, 범위: 0.1 이하)
'device': 'cuda' # 학습 환경, ["cuda", "cpu"] 중 선택
}
},
"FC_rg": { # Case 5. fully-connected layers (w/ data representation)
'model': 'FC_rg', # classification에 활용할 알고리즘 정의
"best_model_path": './ckpt/fc.pt', # 학습 완료 모델 저장 경로
"best_model": 'fc.pt', # 학습 완료 모델 저장 경로
'parameter': {
'input_size': 64, # 데이터의 변수 개수(representation 차원), int
'drop_out': 0.1, # dropout 확률, float(default: 0.1, 범위: 0 이상 1 이하)
'bias': True, # bias 사용 여부, bool(default: True)
'num_epochs': 1000, # 학습 epoch 횟수, int(default: 1000, 범위: 1 이상)
'num_epochs': 100, # 학습 epoch 횟수, int(default: 1000, 범위: 1 이상)
'batch_size': 16, # batch 크기, int(default: 16, 범위: 1 이상, 컴퓨터 사양에 적합하게 설정)
'lr': 0.0001, # learning rate, float(default: 0.0001, 범위: 0.1 이하)
'device': 'cuda' # 학습 환경, ["cuda", "cpu"] 중 선택
Expand Down