From c6c1bb2fe38afc9d4de227fc8e53e7b5cce6d0e8 Mon Sep 17 00:00:00 2001 From: shhwang1 <115224653+shhwang1@users.noreply.github.com> Date: Thu, 1 Dec 2022 14:19:12 +0900 Subject: [PATCH 1/2] Update config.py --- config.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/config.py b/config.py index 1663fbf..5d833dc 100644 --- a/config.py +++ b/config.py @@ -1,14 +1,14 @@ 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"] 중 선택 @@ -16,14 +16,14 @@ }, "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"] 중 선택 @@ -31,7 +31,7 @@ }, "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 @@ -40,7 +40,7 @@ '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"] 중 선택 @@ -48,13 +48,13 @@ }, "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"] 중 선택 @@ -62,12 +62,12 @@ }, "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"] 중 선택 From f7591888cab6c3adaebdcaf8d075611f7fa63a15 Mon Sep 17 00:00:00 2001 From: shhwang1 <115224653+shhwang1@users.noreply.github.com> Date: Thu, 1 Dec 2022 14:46:11 +0900 Subject: [PATCH 2/2] Add files via upload --- Train.ipynb | 155 +++++++++++++++++++++------------------------------- 1 file changed, 62 insertions(+), 93 deletions(-) diff --git a/Train.ipynb b/Train.ipynb index 04df9d8..f582391 100644 --- a/Train.ipynb +++ b/Train.ipynb @@ -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": [ { @@ -75,7 +111,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 24, "metadata": { "scrolled": true }, @@ -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" ] } ], @@ -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\"])) # 모델 저장" ] }, { @@ -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\"])) # 모델 저장" ] }, { @@ -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\"])) # 모델 저장" ] }, { @@ -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\"])) # 모델 저장" ] }, { @@ -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\"])) # 모델 저장" ] }, { @@ -681,7 +650,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.7.11 ('iitp')", + "display_name": "Python 3.7.13 ('hwang')", "language": "python", "name": "python3" }, @@ -695,7 +664,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.11" + "version": "3.7.13" }, "toc": { "base_numbering": 1, @@ -712,7 +681,7 @@ }, "vscode": { "interpreter": { - "hash": "448579598765c533641c9414ab2d5f7dc2c763c0bd653033bda6f4c5cb841b26" + "hash": "4f311b633f277f5e4d199db5715cd5ecdec0742926e2e6ae6b04aa7fd42957fc" } } },