commit e903ba49d0de7dd49ed4bb29a963c75667672732 Author: wangchunlin Date: Wed May 29 01:50:29 2024 +0800 first diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/__pycache__/common.cpython-310.pyc b/__pycache__/common.cpython-310.pyc new file mode 100644 index 0000000..85f2873 Binary files /dev/null and b/__pycache__/common.cpython-310.pyc differ diff --git a/__pycache__/data_process.cpython-310.pyc b/__pycache__/data_process.cpython-310.pyc new file mode 100644 index 0000000..85f68bd Binary files /dev/null and b/__pycache__/data_process.cpython-310.pyc differ diff --git a/__pycache__/feature_process.cpython-310.pyc b/__pycache__/feature_process.cpython-310.pyc new file mode 100644 index 0000000..b12f5a2 Binary files /dev/null and b/__pycache__/feature_process.cpython-310.pyc differ diff --git a/__pycache__/train.cpython-310.pyc b/__pycache__/train.cpython-310.pyc new file mode 100644 index 0000000..46ddd2c Binary files /dev/null and b/__pycache__/train.cpython-310.pyc differ diff --git a/api_send_evaluate.py b/api_send_evaluate.py new file mode 100644 index 0000000..b990189 --- /dev/null +++ b/api_send_evaluate.py @@ -0,0 +1,80 @@ +from pydantic import BaseModel +import requests +import pandas as pd +import os +from utils.data_process import preprocess_data, convert_to_list + +def download_file(data_file_info, save_dir): + """ + 下载文件并保存到指定目录。 + + 参数: + data_file_info (dict): 包含文件信息的字典,可能包含"model_file_url"、"log_file_url"和"data_file_url"等字段 + save_dir (str): 文件保存的目录路径 + """ + + # 下载日志文件 + if "log_file_url" in data_file_info: + log_file_url = data_file_info["log_file_url"] + log_save_path = os.path.join(save_dir, "log.txt") + response = requests.get(log_file_url) + with open(log_save_path, 'wb') as file: + file.write(response.content) + print(f"Log file saved to: {log_save_path}") + else: + print("无法获取日志文件信息") + + # 下载数据文件 + if "data_file_url" in data_file_info: + data_file_url = data_file_info["data_file_url"] + data_save_path = os.path.join(save_dir, "data.xlsx") + response = requests.get(data_file_url) + with open(data_save_path, 'wb') as file: + file.write(response.content) + print(f"Data file saved to: {data_save_path}") + else: + print("无法获取数据文件信息") + +def classify_features(features_data_list): + """ + 发送特征数据到服务端进行分类,并获取分类结果。 + + 参数: + features_data_list (list): 包含特征数据的列表 + + 返回: + dict: 包含分类结果和模型文件信息的字典 + """ + response = requests.post("http://127.0.0.1:3397/evaluate/", json=features_data_list) + if response.status_code == 200: + results = response.json() + print("Precision:", results["classification_result"]["precision"]) + print("Recall:", results["classification_result"]["recall"]) + print("F1:", results["classification_result"]["f1"]) + print("Wrong Percentage:", results["classification_result"]["wrong_percentage"]) + + data_file_info = results["data_file"] + data_save_dir = os.path.dirname(__file__) + download_file(data_file_info, data_save_dir) + + return results + else: + print("请求失败:", response.text) + return None + +if __name__ == "__main__": + # 读取原始数据表 + df_src = pd.read_excel("data/data_src.xlsx") + df_leave = pd.read_excel("data_processed/Leave_Record_RES.xlsx") + df_dropout_warning = pd.read_excel("data_processed/Dropout_Warning_RES.xlsx") + + # 数据预处理 + df = preprocess_data(df_src, df_leave, df_dropout_warning) + + # 转换成数据列表 + features_data_list = convert_to_list(df) + + # 发送 POST 请求并处理结果 + results = classify_features(features_data_list) + if results: + print("Classification results:", results) \ No newline at end of file diff --git a/api_send_inference.py b/api_send_inference.py new file mode 100644 index 0000000..73b92aa --- /dev/null +++ b/api_send_inference.py @@ -0,0 +1,97 @@ +from pydantic import BaseModel + + +if __name__ == "__main__": + import requests + + # 模拟发送的特征数据 + features_data1 = { + "somatization": 0.5, + "obsessive_compulsive": 0.3, + "interpersonal_sensitivity": 0.7, + "depression": 0.6, + "anxiety": 0.8, + "hostility": 0.4, + "terror": 0.2, + "paranoia": 0.1, + "psychoticism": 0.9, + "other": 0.2, + "father_parenting_style": 2, + "mother_parenting_style": 3, + "self_assessed_family_economic_condition": 4, + "history_of_psychological_counseling": 1, + "absenteeism_above_average": True, + "academic_warning": False, + "label": -1 + } + features_data2 = { + "somatization": 4.3, + "obsessive_compulsive": 4.1, + "interpersonal_sensitivity": 3.8, + "depression": 4, + "anxiety": 4.2, + "hostility": 4.2, + "terror": 4, + "paranoia": 4.2, + "psychoticism": 3.8, + "other": 3.6, + "father_parenting_style": 1, + "mother_parenting_style": 0, + "self_assessed_family_economic_condition": 0, + "history_of_psychological_counseling": False, + "absenteeism_above_average": True, + "academic_warning": True, + "label": -1 + } + features_data3 = { + "somatization": 1.1, + "obsessive_compulsive": 2.3, + "interpersonal_sensitivity": 2.6, + "depression": 2.2, + "anxiety": 1.6, + "hostility": 1.5, + "terror": 1.6, + "paranoia": 1.5, + "psychoticism": 1.2, + "other": 1.3, + "father_parenting_style": 1, + "mother_parenting_style": 1, + "self_assessed_family_economic_condition": 1, + "history_of_psychological_counseling": False, + "absenteeism_above_average": False, + "academic_warning": False, + "label": -1 + } + features_data4 = { + "somatization": 1.5, + "obsessive_compulsive": 2.4, + "interpersonal_sensitivity": 2.2, + "depression": 3.2, + "anxiety": 1.6, + "hostility": 1.5, + "terror": 3.1, + "paranoia": 1.5, + "psychoticism": 1.9, + "other": 2.6, + "father_parenting_style": 1, + "mother_parenting_style": 1, + "self_assessed_family_economic_condition": 0, + "history_of_psychological_counseling": False, + "absenteeism_above_average": False, + "academic_warning": False, + "label": -1 + } + + # 必须是features_list, 前面出现了只有一个样本时测不准,考虑是用了样本间归一化的原因,现在么有用了 + # features_data_list = [features_data3] + features_data_list = [features_data4, features_data2, features_data3, features_data1] + + # 发送 POST 请求 + response = requests.post("http://127.0.0.1:3397/inference/", json=features_data_list) + + if response.status_code == 200: + # 获取分类结果列表 + classified_results = response.json() + print(classified_results) # 这里的 classified_results 就是返回的列表对象 + else: + print("请求失败:", response.text) diff --git a/api_send_train.py b/api_send_train.py new file mode 100644 index 0000000..99b5a87 --- /dev/null +++ b/api_send_train.py @@ -0,0 +1,89 @@ +import requests +import pandas as pd +import os +from utils.data_process import preprocess_data, convert_to_list + +def download_file(data_file_info, save_dir): + """ + 下载文件并保存到指定目录。 + + 参数: + data_file_info (dict): 包含文件信息的字典,可能包含"model_file_url"、"log_file_url"和"data_file_url"等字段 + save_dir (str): 文件保存的目录路径 + """ + # 下载模型文件 + if "model_file_url" in data_file_info: + model_file_url = data_file_info["model_file_url"] + model_save_path = os.path.join(save_dir, "model.pth") + response = requests.get(model_file_url) + with open(model_save_path, 'wb') as file: + file.write(response.content) + print(f"Model saved to: {model_save_path}") + else: + print("无法获取模型文件信息") + + # 下载日志文件 + if "log_file_url" in data_file_info: + log_file_url = data_file_info["log_file_url"] + log_save_path = os.path.join(save_dir, "log.txt") + response = requests.get(log_file_url) + with open(log_save_path, 'wb') as file: + file.write(response.content) + print(f"Log file saved to: {log_save_path}") + else: + print("无法获取日志文件信息") + + # 下载数据文件 + if "data_file_url" in data_file_info: + data_file_url = data_file_info["data_file_url"] + data_save_path = os.path.join(save_dir, "data.xlsx") + response = requests.get(data_file_url) + with open(data_save_path, 'wb') as file: + file.write(response.content) + print(f"Data file saved to: {data_save_path}") + else: + print("无法获取数据文件信息") + +def classify_features(features_data_list): + """ + 发送特征数据到服务端进行分类,并获取分类结果。 + + 参数: + features_data_list (list): 包含特征数据的列表 + + 返回: + dict: 包含分类结果和模型文件信息的字典 + """ + response = requests.post("http://127.0.0.1:3397/train/", json=features_data_list) + if response.status_code == 200: + results = response.json() + print("Precision:", results["classification_result"]["precision"]) + print("Recall:", results["classification_result"]["recall"]) + print("F1:", results["classification_result"]["f1"]) + print("Wrong Percentage:", results["classification_result"]["wrong_percentage"]) + + data_file_info = results["data_file"] + data_save_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "client")) + download_file(data_file_info, data_save_dir) + + return results + else: + print("请求失败:", response.text) + return None + +if __name__ == "__main__": + # 读取原始数据表 + df_src = pd.read_excel("data/data_src.xlsx") + df_leave = pd.read_excel("data_processed/Leave_Record_RES.xlsx") + df_dropout_warning = pd.read_excel("data_processed/Dropout_Warning_RES.xlsx") + + # 数据预处理 + df = preprocess_data(df_src, df_leave, df_dropout_warning) + + # 转换成数据列表 + features_data_list = convert_to_list(df) + + # 发送 POST 请求并处理结果 + results = classify_features(features_data_list) + if results: + print("Classification results:", results) \ No newline at end of file diff --git a/client/data.xlsx b/client/data.xlsx new file mode 100644 index 0000000..dbccd8c Binary files /dev/null and b/client/data.xlsx differ diff --git a/client/log.txt b/client/log.txt new file mode 100644 index 0000000..60e6d3b --- /dev/null +++ b/client/log.txt @@ -0,0 +1,764 @@ +2024-05-29 00:58:42 INFO: config: +2024-05-29 00:58:45 INFO: Class weights: tensor([21.1878, 3.1149, 0.7420, 0.4378], device='cuda:0') +2024-05-29 00:58:47 INFO: Epoch 001 | Train Loss: 0.6145 | Train Accuracy: 0.8024 | Validation Loss: 0.3530 | Validation Accuracy: 0.8666 | Validation Mean Precision: 0.7371 | Validation Mean Recall: 0.8382 | Validation Mean F1_score: 0.7780 +2024-05-29 00:58:49 INFO: Epoch 002 | Train Loss: 0.3780 | Train Accuracy: 0.8802 | Validation Loss: 0.4015 | Validation Accuracy: 0.8146 | Validation Mean Precision: 0.6750 | Validation Mean Recall: 0.8230 | Validation Mean F1_score: 0.7243 +2024-05-29 00:58:50 INFO: Epoch 003 | Train Loss: 0.3667 | Train Accuracy: 0.8861 | Validation Loss: 0.3302 | Validation Accuracy: 0.8826 | Validation Mean Precision: 0.7854 | Validation Mean Recall: 0.8465 | Validation Mean F1_score: 0.8125 +2024-05-29 00:58:52 INFO: Epoch 004 | Train Loss: 0.3590 | Train Accuracy: 0.8887 | Validation Loss: 0.3236 | Validation Accuracy: 0.8996 | Validation Mean Precision: 0.8327 | Validation Mean Recall: 0.8399 | Validation Mean F1_score: 0.8350 +2024-05-29 00:58:54 INFO: Epoch 005 | Train Loss: 0.3563 | Train Accuracy: 0.8892 | Validation Loss: 0.3271 | Validation Accuracy: 0.9011 | Validation Mean Precision: 0.7866 | Validation Mean Recall: 0.8377 | Validation Mean F1_score: 0.8014 +2024-05-29 00:58:55 INFO: Epoch 006 | Train Loss: 0.3603 | Train Accuracy: 0.8912 | Validation Loss: 0.3489 | Validation Accuracy: 0.8941 | Validation Mean Precision: 0.7863 | Validation Mean Recall: 0.8253 | Validation Mean F1_score: 0.7933 +2024-05-29 00:58:57 INFO: Epoch 007 | Train Loss: 0.3615 | Train Accuracy: 0.8899 | Validation Loss: 0.3224 | Validation Accuracy: 0.9128 | Validation Mean Precision: 0.8498 | Validation Mean Recall: 0.8398 | Validation Mean F1_score: 0.8445 +2024-05-29 00:58:58 INFO: Epoch 008 | Train Loss: 0.3472 | Train Accuracy: 0.8936 | Validation Loss: 0.3202 | Validation Accuracy: 0.9087 | Validation Mean Precision: 0.8409 | Validation Mean Recall: 0.8421 | Validation Mean F1_score: 0.8408 +2024-05-29 00:59:00 INFO: Epoch 009 | Train Loss: 0.3446 | Train Accuracy: 0.8995 | Validation Loss: 0.3466 | Validation Accuracy: 0.9020 | Validation Mean Precision: 0.7918 | Validation Mean Recall: 0.8389 | Validation Mean F1_score: 0.7942 +2024-05-29 00:59:01 INFO: Epoch 010 | Train Loss: 0.3402 | Train Accuracy: 0.8976 | Validation Loss: 0.3259 | Validation Accuracy: 0.9149 | Validation Mean Precision: 0.8842 | Validation Mean Recall: 0.8261 | Validation Mean F1_score: 0.8511 +2024-05-29 00:59:03 INFO: Epoch 011 | Train Loss: 0.3389 | Train Accuracy: 0.9001 | Validation Loss: 0.3203 | Validation Accuracy: 0.8862 | Validation Mean Precision: 0.7839 | Validation Mean Recall: 0.8474 | Validation Mean F1_score: 0.8105 +2024-05-29 00:59:04 INFO: Epoch 012 | Train Loss: 0.3345 | Train Accuracy: 0.9002 | Validation Loss: 0.3031 | Validation Accuracy: 0.9157 | Validation Mean Precision: 0.8425 | Validation Mean Recall: 0.8488 | Validation Mean F1_score: 0.8452 +2024-05-29 00:59:06 INFO: Epoch 013 | Train Loss: 0.3312 | Train Accuracy: 0.9037 | Validation Loss: 0.3071 | Validation Accuracy: 0.9008 | Validation Mean Precision: 0.7963 | Validation Mean Recall: 0.8467 | Validation Mean F1_score: 0.8113 +2024-05-29 00:59:07 INFO: Epoch 014 | Train Loss: 0.3318 | Train Accuracy: 0.9047 | Validation Loss: 0.3138 | Validation Accuracy: 0.9018 | Validation Mean Precision: 0.7624 | Validation Mean Recall: 0.8601 | Validation Mean F1_score: 0.7981 +2024-05-29 00:59:09 INFO: Epoch 015 | Train Loss: 0.3252 | Train Accuracy: 0.9086 | Validation Loss: 0.2973 | Validation Accuracy: 0.9111 | Validation Mean Precision: 0.8332 | Validation Mean Recall: 0.8528 | Validation Mean F1_score: 0.8409 +2024-05-29 00:59:10 INFO: Epoch 016 | Train Loss: 0.3242 | Train Accuracy: 0.9077 | Validation Loss: 0.2943 | Validation Accuracy: 0.9130 | Validation Mean Precision: 0.8474 | Validation Mean Recall: 0.8502 | Validation Mean F1_score: 0.8474 +2024-05-29 00:59:12 INFO: Epoch 017 | Train Loss: 0.3225 | Train Accuracy: 0.9069 | Validation Loss: 0.3049 | Validation Accuracy: 0.9142 | Validation Mean Precision: 0.8105 | Validation Mean Recall: 0.8539 | Validation Mean F1_score: 0.8275 +2024-05-29 00:59:13 INFO: Epoch 018 | Train Loss: 0.3232 | Train Accuracy: 0.9078 | Validation Loss: 0.3142 | Validation Accuracy: 0.8831 | Validation Mean Precision: 0.7624 | Validation Mean Recall: 0.8533 | Validation Mean F1_score: 0.7997 +2024-05-29 00:59:14 INFO: Epoch 019 | Train Loss: 0.3191 | Train Accuracy: 0.9108 | Validation Loss: 0.2926 | Validation Accuracy: 0.9212 | Validation Mean Precision: 0.8754 | Validation Mean Recall: 0.8612 | Validation Mean F1_score: 0.8681 +2024-05-29 00:59:16 INFO: Epoch 020 | Train Loss: 0.3177 | Train Accuracy: 0.9152 | Validation Loss: 0.2906 | Validation Accuracy: 0.9164 | Validation Mean Precision: 0.7893 | Validation Mean Recall: 0.8658 | Validation Mean F1_score: 0.8178 +2024-05-29 00:59:17 INFO: Epoch 021 | Train Loss: 0.3189 | Train Accuracy: 0.9145 | Validation Loss: 0.2837 | Validation Accuracy: 0.9267 | Validation Mean Precision: 0.8602 | Validation Mean Recall: 0.8654 | Validation Mean F1_score: 0.8618 +2024-05-29 00:59:19 INFO: Epoch 022 | Train Loss: 0.3152 | Train Accuracy: 0.9141 | Validation Loss: 0.2781 | Validation Accuracy: 0.9205 | Validation Mean Precision: 0.8329 | Validation Mean Recall: 0.8657 | Validation Mean F1_score: 0.8480 +2024-05-29 00:59:20 INFO: Epoch 023 | Train Loss: 0.3114 | Train Accuracy: 0.9151 | Validation Loss: 0.2808 | Validation Accuracy: 0.9279 | Validation Mean Precision: 0.8559 | Validation Mean Recall: 0.8620 | Validation Mean F1_score: 0.8584 +2024-05-29 00:59:21 INFO: Epoch 024 | Train Loss: 0.3089 | Train Accuracy: 0.9146 | Validation Loss: 0.3037 | Validation Accuracy: 0.9051 | Validation Mean Precision: 0.7702 | Validation Mean Recall: 0.8667 | Validation Mean F1_score: 0.8087 +2024-05-29 00:59:23 INFO: Epoch 025 | Train Loss: 0.3131 | Train Accuracy: 0.9159 | Validation Loss: 0.2844 | Validation Accuracy: 0.9063 | Validation Mean Precision: 0.8446 | Validation Mean Recall: 0.8616 | Validation Mean F1_score: 0.8520 +2024-05-29 00:59:24 INFO: Epoch 026 | Train Loss: 0.3083 | Train Accuracy: 0.9187 | Validation Loss: 0.2789 | Validation Accuracy: 0.9126 | Validation Mean Precision: 0.8120 | Validation Mean Recall: 0.8610 | Validation Mean F1_score: 0.8344 +2024-05-29 00:59:26 INFO: Epoch 027 | Train Loss: 0.3031 | Train Accuracy: 0.9231 | Validation Loss: 0.2845 | Validation Accuracy: 0.9025 | Validation Mean Precision: 0.7914 | Validation Mean Recall: 0.8660 | Validation Mean F1_score: 0.8225 +2024-05-29 00:59:27 INFO: Epoch 028 | Train Loss: 0.3065 | Train Accuracy: 0.9188 | Validation Loss: 0.2807 | Validation Accuracy: 0.9087 | Validation Mean Precision: 0.8178 | Validation Mean Recall: 0.8595 | Validation Mean F1_score: 0.8364 +2024-05-29 00:59:29 INFO: Epoch 029 | Train Loss: 0.2994 | Train Accuracy: 0.9185 | Validation Loss: 0.2913 | Validation Accuracy: 0.9169 | Validation Mean Precision: 0.7855 | Validation Mean Recall: 0.8691 | Validation Mean F1_score: 0.8162 +2024-05-29 00:59:30 INFO: Epoch 030 | Train Loss: 0.2980 | Train Accuracy: 0.9225 | Validation Loss: 0.2720 | Validation Accuracy: 0.9224 | Validation Mean Precision: 0.8211 | Validation Mean Recall: 0.8657 | Validation Mean F1_score: 0.8414 +2024-05-29 00:59:32 INFO: Epoch 031 | Train Loss: 0.3008 | Train Accuracy: 0.9190 | Validation Loss: 0.2733 | Validation Accuracy: 0.9327 | Validation Mean Precision: 0.8689 | Validation Mean Recall: 0.8712 | Validation Mean F1_score: 0.8697 +2024-05-29 00:59:33 INFO: Epoch 032 | Train Loss: 0.2979 | Train Accuracy: 0.9204 | Validation Loss: 0.2776 | Validation Accuracy: 0.9255 | Validation Mean Precision: 0.8200 | Validation Mean Recall: 0.8756 | Validation Mean F1_score: 0.8420 +2024-05-29 00:59:35 INFO: Epoch 033 | Train Loss: 0.3003 | Train Accuracy: 0.9208 | Validation Loss: 0.2710 | Validation Accuracy: 0.9260 | Validation Mean Precision: 0.8219 | Validation Mean Recall: 0.8711 | Validation Mean F1_score: 0.8420 +2024-05-29 00:59:37 INFO: Epoch 034 | Train Loss: 0.2946 | Train Accuracy: 0.9223 | Validation Loss: 0.2855 | Validation Accuracy: 0.9226 | Validation Mean Precision: 0.8080 | Validation Mean Recall: 0.8608 | Validation Mean F1_score: 0.8287 +2024-05-29 00:59:38 INFO: Epoch 035 | Train Loss: 0.2869 | Train Accuracy: 0.9250 | Validation Loss: 0.2886 | Validation Accuracy: 0.9310 | Validation Mean Precision: 0.8492 | Validation Mean Recall: 0.8662 | Validation Mean F1_score: 0.8544 +2024-05-29 00:59:40 INFO: Epoch 036 | Train Loss: 0.2866 | Train Accuracy: 0.9248 | Validation Loss: 0.3234 | Validation Accuracy: 0.8915 | Validation Mean Precision: 0.7333 | Validation Mean Recall: 0.8630 | Validation Mean F1_score: 0.7779 +2024-05-29 00:59:42 INFO: Epoch 037 | Train Loss: 0.2879 | Train Accuracy: 0.9267 | Validation Loss: 0.2788 | Validation Accuracy: 0.9212 | Validation Mean Precision: 0.8358 | Validation Mean Recall: 0.8697 | Validation Mean F1_score: 0.8511 +2024-05-29 00:59:43 INFO: Epoch 038 | Train Loss: 0.2871 | Train Accuracy: 0.9266 | Validation Loss: 0.2770 | Validation Accuracy: 0.9358 | Validation Mean Precision: 0.8449 | Validation Mean Recall: 0.8763 | Validation Mean F1_score: 0.8522 +2024-05-29 00:59:45 INFO: Epoch 039 | Train Loss: 0.2925 | Train Accuracy: 0.9211 | Validation Loss: 0.2752 | Validation Accuracy: 0.9197 | Validation Mean Precision: 0.8059 | Validation Mean Recall: 0.8702 | Validation Mean F1_score: 0.8336 +2024-05-29 00:59:47 INFO: Epoch 040 | Train Loss: 0.2828 | Train Accuracy: 0.9284 | Validation Loss: 0.2897 | Validation Accuracy: 0.9023 | Validation Mean Precision: 0.8541 | Validation Mean Recall: 0.8528 | Validation Mean F1_score: 0.8502 +2024-05-29 00:59:48 INFO: Epoch 041 | Train Loss: 0.2808 | Train Accuracy: 0.9286 | Validation Loss: 0.2939 | Validation Accuracy: 0.8967 | Validation Mean Precision: 0.8299 | Validation Mean Recall: 0.8616 | Validation Mean F1_score: 0.8440 +2024-05-29 00:59:50 INFO: Epoch 042 | Train Loss: 0.2822 | Train Accuracy: 0.9250 | Validation Loss: 0.2620 | Validation Accuracy: 0.9276 | Validation Mean Precision: 0.8283 | Validation Mean Recall: 0.8691 | Validation Mean F1_score: 0.8457 +2024-05-29 00:59:52 INFO: Epoch 043 | Train Loss: 0.2771 | Train Accuracy: 0.9282 | Validation Loss: 0.2604 | Validation Accuracy: 0.9288 | Validation Mean Precision: 0.8361 | Validation Mean Recall: 0.8706 | Validation Mean F1_score: 0.8511 +2024-05-29 00:59:53 INFO: Epoch 044 | Train Loss: 0.2765 | Train Accuracy: 0.9276 | Validation Loss: 0.2745 | Validation Accuracy: 0.9250 | Validation Mean Precision: 0.8826 | Validation Mean Recall: 0.8622 | Validation Mean F1_score: 0.8716 +2024-05-29 00:59:55 INFO: Epoch 045 | Train Loss: 0.2796 | Train Accuracy: 0.9262 | Validation Loss: 0.2621 | Validation Accuracy: 0.9322 | Validation Mean Precision: 0.8378 | Validation Mean Recall: 0.8689 | Validation Mean F1_score: 0.8501 +2024-05-29 00:59:56 INFO: Epoch 046 | Train Loss: 0.2721 | Train Accuracy: 0.9300 | Validation Loss: 0.2635 | Validation Accuracy: 0.9238 | Validation Mean Precision: 0.8548 | Validation Mean Recall: 0.8703 | Validation Mean F1_score: 0.8607 +2024-05-29 00:59:58 INFO: Epoch 047 | Train Loss: 0.2794 | Train Accuracy: 0.9229 | Validation Loss: 0.2885 | Validation Accuracy: 0.9106 | Validation Mean Precision: 0.8250 | Validation Mean Recall: 0.8616 | Validation Mean F1_score: 0.8411 +2024-05-29 00:59:59 INFO: Epoch 048 | Train Loss: 0.2702 | Train Accuracy: 0.9275 | Validation Loss: 0.2639 | Validation Accuracy: 0.9241 | Validation Mean Precision: 0.8274 | Validation Mean Recall: 0.8713 | Validation Mean F1_score: 0.8461 +2024-05-29 01:00:01 INFO: Epoch 049 | Train Loss: 0.2695 | Train Accuracy: 0.9298 | Validation Loss: 0.2643 | Validation Accuracy: 0.9248 | Validation Mean Precision: 0.8663 | Validation Mean Recall: 0.8723 | Validation Mean F1_score: 0.8670 +2024-05-29 01:00:02 INFO: Epoch 050 | Train Loss: 0.2681 | Train Accuracy: 0.9298 | Validation Loss: 0.2695 | Validation Accuracy: 0.9320 | Validation Mean Precision: 0.8449 | Validation Mean Recall: 0.8665 | Validation Mean F1_score: 0.8521 +2024-05-29 01:00:03 INFO: Epoch 051 | Train Loss: 0.2759 | Train Accuracy: 0.9291 | Validation Loss: 0.2627 | Validation Accuracy: 0.9312 | Validation Mean Precision: 0.8293 | Validation Mean Recall: 0.8677 | Validation Mean F1_score: 0.8445 +2024-05-29 01:00:05 INFO: Epoch 052 | Train Loss: 0.2605 | Train Accuracy: 0.9304 | Validation Loss: 0.2969 | Validation Accuracy: 0.9006 | Validation Mean Precision: 0.8115 | Validation Mean Recall: 0.8689 | Validation Mean F1_score: 0.8339 +2024-05-29 01:00:06 INFO: Epoch 053 | Train Loss: 0.2672 | Train Accuracy: 0.9291 | Validation Loss: 0.2632 | Validation Accuracy: 0.9205 | Validation Mean Precision: 0.8498 | Validation Mean Recall: 0.8763 | Validation Mean F1_score: 0.8624 +2024-05-29 01:00:08 INFO: Epoch 054 | Train Loss: 0.2725 | Train Accuracy: 0.9272 | Validation Loss: 0.2702 | Validation Accuracy: 0.9188 | Validation Mean Precision: 0.8314 | Validation Mean Recall: 0.8739 | Validation Mean F1_score: 0.8499 +2024-05-29 01:00:09 INFO: Epoch 055 | Train Loss: 0.2600 | Train Accuracy: 0.9307 | Validation Loss: 0.2599 | Validation Accuracy: 0.9327 | Validation Mean Precision: 0.8917 | Validation Mean Recall: 0.8613 | Validation Mean F1_score: 0.8725 +2024-05-29 01:00:11 INFO: Epoch 056 | Train Loss: 0.2596 | Train Accuracy: 0.9298 | Validation Loss: 0.2648 | Validation Accuracy: 0.9327 | Validation Mean Precision: 0.8541 | Validation Mean Recall: 0.8724 | Validation Mean F1_score: 0.8595 +2024-05-29 01:00:13 INFO: Epoch 057 | Train Loss: 0.2652 | Train Accuracy: 0.9296 | Validation Loss: 0.2570 | Validation Accuracy: 0.9356 | Validation Mean Precision: 0.8567 | Validation Mean Recall: 0.8808 | Validation Mean F1_score: 0.8669 +2024-05-29 01:00:15 INFO: Epoch 058 | Train Loss: 0.2580 | Train Accuracy: 0.9300 | Validation Loss: 0.2556 | Validation Accuracy: 0.9368 | Validation Mean Precision: 0.8718 | Validation Mean Recall: 0.8763 | Validation Mean F1_score: 0.8732 +2024-05-29 01:00:16 INFO: Epoch 059 | Train Loss: 0.2627 | Train Accuracy: 0.9309 | Validation Loss: 0.2856 | Validation Accuracy: 0.9133 | Validation Mean Precision: 0.8033 | Validation Mean Recall: 0.8742 | Validation Mean F1_score: 0.8343 +2024-05-29 01:00:18 INFO: Epoch 060 | Train Loss: 0.2592 | Train Accuracy: 0.9309 | Validation Loss: 0.2570 | Validation Accuracy: 0.9351 | Validation Mean Precision: 0.8610 | Validation Mean Recall: 0.8768 | Validation Mean F1_score: 0.8679 +2024-05-29 01:00:19 INFO: Epoch 061 | Train Loss: 0.2617 | Train Accuracy: 0.9296 | Validation Loss: 0.2571 | Validation Accuracy: 0.9279 | Validation Mean Precision: 0.8443 | Validation Mean Recall: 0.8789 | Validation Mean F1_score: 0.8601 +2024-05-29 01:00:21 INFO: Epoch 062 | Train Loss: 0.2633 | Train Accuracy: 0.9292 | Validation Loss: 0.2664 | Validation Accuracy: 0.9233 | Validation Mean Precision: 0.8598 | Validation Mean Recall: 0.8711 | Validation Mean F1_score: 0.8631 +2024-05-29 01:00:22 INFO: Epoch 063 | Train Loss: 0.2592 | Train Accuracy: 0.9284 | Validation Loss: 0.2704 | Validation Accuracy: 0.9336 | Validation Mean Precision: 0.9117 | Validation Mean Recall: 0.8574 | Validation Mean F1_score: 0.8807 +2024-05-29 01:00:23 INFO: Epoch 064 | Train Loss: 0.2568 | Train Accuracy: 0.9311 | Validation Loss: 0.2605 | Validation Accuracy: 0.9399 | Validation Mean Precision: 0.9033 | Validation Mean Recall: 0.8751 | Validation Mean F1_score: 0.8886 +2024-05-29 01:00:25 INFO: Epoch 065 | Train Loss: 0.2619 | Train Accuracy: 0.9311 | Validation Loss: 0.2578 | Validation Accuracy: 0.9375 | Validation Mean Precision: 0.8894 | Validation Mean Recall: 0.8710 | Validation Mean F1_score: 0.8791 +2024-05-29 01:00:26 INFO: Epoch 066 | Train Loss: 0.2595 | Train Accuracy: 0.9323 | Validation Loss: 0.2837 | Validation Accuracy: 0.9310 | Validation Mean Precision: 0.8411 | Validation Mean Recall: 0.8659 | Validation Mean F1_score: 0.8461 +2024-05-29 01:00:28 INFO: Epoch 067 | Train Loss: 0.2605 | Train Accuracy: 0.9321 | Validation Loss: 0.2581 | Validation Accuracy: 0.9382 | Validation Mean Precision: 0.8721 | Validation Mean Recall: 0.8798 | Validation Mean F1_score: 0.8747 +2024-05-29 01:00:29 INFO: Epoch 068 | Train Loss: 0.2570 | Train Accuracy: 0.9329 | Validation Loss: 0.2592 | Validation Accuracy: 0.9358 | Validation Mean Precision: 0.8555 | Validation Mean Recall: 0.8761 | Validation Mean F1_score: 0.8629 +2024-05-29 01:00:31 INFO: Epoch 069 | Train Loss: 0.2562 | Train Accuracy: 0.9334 | Validation Loss: 0.2578 | Validation Accuracy: 0.9346 | Validation Mean Precision: 0.8833 | Validation Mean Recall: 0.8799 | Validation Mean F1_score: 0.8811 +2024-05-29 01:00:33 INFO: Epoch 070 | Train Loss: 0.2506 | Train Accuracy: 0.9334 | Validation Loss: 0.2591 | Validation Accuracy: 0.9255 | Validation Mean Precision: 0.8314 | Validation Mean Recall: 0.8705 | Validation Mean F1_score: 0.8485 +2024-05-29 01:00:34 INFO: Epoch 071 | Train Loss: 0.2561 | Train Accuracy: 0.9318 | Validation Loss: 0.2544 | Validation Accuracy: 0.9262 | Validation Mean Precision: 0.8376 | Validation Mean Recall: 0.8759 | Validation Mean F1_score: 0.8546 +2024-05-29 01:00:36 INFO: Epoch 072 | Train Loss: 0.2603 | Train Accuracy: 0.9325 | Validation Loss: 0.2500 | Validation Accuracy: 0.9344 | Validation Mean Precision: 0.8699 | Validation Mean Recall: 0.8731 | Validation Mean F1_score: 0.8713 +2024-05-29 01:00:38 INFO: Epoch 073 | Train Loss: 0.2558 | Train Accuracy: 0.9300 | Validation Loss: 0.2603 | Validation Accuracy: 0.9293 | Validation Mean Precision: 0.8274 | Validation Mean Recall: 0.8768 | Validation Mean F1_score: 0.8475 +2024-05-29 01:00:39 INFO: Epoch 074 | Train Loss: 0.2508 | Train Accuracy: 0.9341 | Validation Loss: 0.2723 | Validation Accuracy: 0.9406 | Validation Mean Precision: 0.8890 | Validation Mean Recall: 0.8800 | Validation Mean F1_score: 0.8838 +2024-05-29 01:00:40 INFO: Epoch 075 | Train Loss: 0.2550 | Train Accuracy: 0.9333 | Validation Loss: 0.2568 | Validation Accuracy: 0.9264 | Validation Mean Precision: 0.8473 | Validation Mean Recall: 0.8822 | Validation Mean F1_score: 0.8633 +2024-05-29 01:00:42 INFO: Epoch 076 | Train Loss: 0.2540 | Train Accuracy: 0.9315 | Validation Loss: 0.2620 | Validation Accuracy: 0.9384 | Validation Mean Precision: 0.8983 | Validation Mean Recall: 0.8661 | Validation Mean F1_score: 0.8805 +2024-05-29 01:00:43 INFO: Epoch 077 | Train Loss: 0.2533 | Train Accuracy: 0.9357 | Validation Loss: 0.2530 | Validation Accuracy: 0.9356 | Validation Mean Precision: 0.8686 | Validation Mean Recall: 0.8737 | Validation Mean F1_score: 0.8705 +2024-05-29 01:00:45 INFO: Epoch 078 | Train Loss: 0.2521 | Train Accuracy: 0.9336 | Validation Loss: 0.2615 | Validation Accuracy: 0.9279 | Validation Mean Precision: 0.8313 | Validation Mean Recall: 0.8729 | Validation Mean F1_score: 0.8497 +2024-05-29 01:00:46 INFO: Epoch 079 | Train Loss: 0.2519 | Train Accuracy: 0.9333 | Validation Loss: 0.2690 | Validation Accuracy: 0.9181 | Validation Mean Precision: 0.8014 | Validation Mean Recall: 0.8720 | Validation Mean F1_score: 0.8309 +2024-05-29 01:00:48 INFO: Epoch 080 | Train Loss: 0.2493 | Train Accuracy: 0.9335 | Validation Loss: 0.2732 | Validation Accuracy: 0.9135 | Validation Mean Precision: 0.8572 | Validation Mean Recall: 0.8625 | Validation Mean F1_score: 0.8575 +2024-05-29 01:00:49 INFO: Epoch 081 | Train Loss: 0.2490 | Train Accuracy: 0.9335 | Validation Loss: 0.2803 | Validation Accuracy: 0.9142 | Validation Mean Precision: 0.7852 | Validation Mean Recall: 0.8712 | Validation Mean F1_score: 0.8198 +2024-05-29 01:00:51 INFO: Epoch 082 | Train Loss: 0.2561 | Train Accuracy: 0.9322 | Validation Loss: 0.2584 | Validation Accuracy: 0.9260 | Validation Mean Precision: 0.8644 | Validation Mean Recall: 0.8733 | Validation Mean F1_score: 0.8670 +2024-05-29 01:00:53 INFO: Epoch 083 | Train Loss: 0.2505 | Train Accuracy: 0.9365 | Validation Loss: 0.2807 | Validation Accuracy: 0.9243 | Validation Mean Precision: 0.7914 | Validation Mean Recall: 0.8726 | Validation Mean F1_score: 0.8221 +2024-05-29 01:00:54 INFO: Epoch 084 | Train Loss: 0.2485 | Train Accuracy: 0.9336 | Validation Loss: 0.2518 | Validation Accuracy: 0.9377 | Validation Mean Precision: 0.8889 | Validation Mean Recall: 0.8652 | Validation Mean F1_score: 0.8755 +2024-05-29 01:00:56 INFO: Epoch 085 | Train Loss: 0.2520 | Train Accuracy: 0.9339 | Validation Loss: 0.2629 | Validation Accuracy: 0.9394 | Validation Mean Precision: 0.8759 | Validation Mean Recall: 0.8828 | Validation Mean F1_score: 0.8783 +2024-05-29 01:00:57 INFO: Epoch 086 | Train Loss: 0.2460 | Train Accuracy: 0.9365 | Validation Loss: 0.2648 | Validation Accuracy: 0.9293 | Validation Mean Precision: 0.8120 | Validation Mean Recall: 0.8745 | Validation Mean F1_score: 0.8352 +2024-05-29 01:00:59 INFO: Epoch 087 | Train Loss: 0.2496 | Train Accuracy: 0.9341 | Validation Loss: 0.2573 | Validation Accuracy: 0.9269 | Validation Mean Precision: 0.8199 | Validation Mean Recall: 0.8756 | Validation Mean F1_score: 0.8432 +2024-05-29 01:01:00 INFO: Epoch 088 | Train Loss: 0.2592 | Train Accuracy: 0.9297 | Validation Loss: 0.2606 | Validation Accuracy: 0.9276 | Validation Mean Precision: 0.8542 | Validation Mean Recall: 0.8776 | Validation Mean F1_score: 0.8643 +2024-05-29 01:01:02 INFO: Epoch 089 | Train Loss: 0.2444 | Train Accuracy: 0.9353 | Validation Loss: 0.2626 | Validation Accuracy: 0.9233 | Validation Mean Precision: 0.8302 | Validation Mean Recall: 0.8795 | Validation Mean F1_score: 0.8527 +2024-05-29 01:01:03 INFO: Epoch 090 | Train Loss: 0.2501 | Train Accuracy: 0.9348 | Validation Loss: 0.2577 | Validation Accuracy: 0.9425 | Validation Mean Precision: 0.8875 | Validation Mean Recall: 0.8787 | Validation Mean F1_score: 0.8821 +2024-05-29 01:01:05 INFO: Epoch 091 | Train Loss: 0.2539 | Train Accuracy: 0.9325 | Validation Loss: 0.2718 | Validation Accuracy: 0.9305 | Validation Mean Precision: 0.8204 | Validation Mean Recall: 0.8721 | Validation Mean F1_score: 0.8400 +2024-05-29 01:01:06 INFO: Epoch 092 | Train Loss: 0.2406 | Train Accuracy: 0.9371 | Validation Loss: 0.2697 | Validation Accuracy: 0.9284 | Validation Mean Precision: 0.8797 | Validation Mean Recall: 0.8662 | Validation Mean F1_score: 0.8709 +2024-05-29 01:01:07 INFO: Epoch 093 | Train Loss: 0.2434 | Train Accuracy: 0.9379 | Validation Loss: 0.2591 | Validation Accuracy: 0.9372 | Validation Mean Precision: 0.8723 | Validation Mean Recall: 0.8627 | Validation Mean F1_score: 0.8666 +2024-05-29 01:01:09 INFO: Epoch 094 | Train Loss: 0.2517 | Train Accuracy: 0.9347 | Validation Loss: 0.2551 | Validation Accuracy: 0.9315 | Validation Mean Precision: 0.8644 | Validation Mean Recall: 0.8765 | Validation Mean F1_score: 0.8699 +2024-05-29 01:01:10 INFO: Epoch 095 | Train Loss: 0.2413 | Train Accuracy: 0.9376 | Validation Loss: 0.2566 | Validation Accuracy: 0.9351 | Validation Mean Precision: 0.8552 | Validation Mean Recall: 0.8802 | Validation Mean F1_score: 0.8648 +2024-05-29 01:01:11 INFO: Epoch 096 | Train Loss: 0.2454 | Train Accuracy: 0.9342 | Validation Loss: 0.2567 | Validation Accuracy: 0.9399 | Validation Mean Precision: 0.8657 | Validation Mean Recall: 0.8786 | Validation Mean F1_score: 0.8695 +2024-05-29 01:01:13 INFO: Epoch 097 | Train Loss: 0.2461 | Train Accuracy: 0.9351 | Validation Loss: 0.3030 | Validation Accuracy: 0.9159 | Validation Mean Precision: 0.8856 | Validation Mean Recall: 0.8438 | Validation Mean F1_score: 0.8617 +2024-05-29 01:01:14 INFO: Epoch 098 | Train Loss: 0.2443 | Train Accuracy: 0.9351 | Validation Loss: 0.2589 | Validation Accuracy: 0.9411 | Validation Mean Precision: 0.8834 | Validation Mean Recall: 0.8875 | Validation Mean F1_score: 0.8847 +2024-05-29 01:01:16 INFO: Epoch 099 | Train Loss: 0.2413 | Train Accuracy: 0.9374 | Validation Loss: 0.2525 | Validation Accuracy: 0.9379 | Validation Mean Precision: 0.8698 | Validation Mean Recall: 0.8768 | Validation Mean F1_score: 0.8722 +2024-05-29 01:01:17 INFO: Epoch 100 | Train Loss: 0.2424 | Train Accuracy: 0.9357 | Validation Loss: 0.2651 | Validation Accuracy: 0.9442 | Validation Mean Precision: 0.9286 | Validation Mean Recall: 0.8631 | Validation Mean F1_score: 0.8917 +2024-05-29 01:01:19 INFO: Epoch 101 | Train Loss: 0.2396 | Train Accuracy: 0.9378 | Validation Loss: 0.2523 | Validation Accuracy: 0.9379 | Validation Mean Precision: 0.8846 | Validation Mean Recall: 0.8693 | Validation Mean F1_score: 0.8761 +2024-05-29 01:01:20 INFO: Epoch 102 | Train Loss: 0.2380 | Train Accuracy: 0.9372 | Validation Loss: 0.2550 | Validation Accuracy: 0.9288 | Validation Mean Precision: 0.8386 | Validation Mean Recall: 0.8814 | Validation Mean F1_score: 0.8580 +2024-05-29 01:01:21 INFO: Epoch 103 | Train Loss: 0.2461 | Train Accuracy: 0.9358 | Validation Loss: 0.2683 | Validation Accuracy: 0.9236 | Validation Mean Precision: 0.8089 | Validation Mean Recall: 0.8717 | Validation Mean F1_score: 0.8343 +2024-05-29 01:01:23 INFO: Epoch 104 | Train Loss: 0.2383 | Train Accuracy: 0.9374 | Validation Loss: 0.2654 | Validation Accuracy: 0.9262 | Validation Mean Precision: 0.8455 | Validation Mean Recall: 0.8824 | Validation Mean F1_score: 0.8628 +2024-05-29 01:01:24 INFO: Epoch 105 | Train Loss: 0.2405 | Train Accuracy: 0.9378 | Validation Loss: 0.2620 | Validation Accuracy: 0.9205 | Validation Mean Precision: 0.8344 | Validation Mean Recall: 0.8782 | Validation Mean F1_score: 0.8540 +2024-05-29 01:01:26 INFO: Epoch 106 | Train Loss: 0.2388 | Train Accuracy: 0.9363 | Validation Loss: 0.2658 | Validation Accuracy: 0.9274 | Validation Mean Precision: 0.8313 | Validation Mean Recall: 0.8789 | Validation Mean F1_score: 0.8508 +2024-05-29 01:01:27 INFO: Epoch 107 | Train Loss: 0.2400 | Train Accuracy: 0.9388 | Validation Loss: 0.2534 | Validation Accuracy: 0.9375 | Validation Mean Precision: 0.8673 | Validation Mean Recall: 0.8875 | Validation Mean F1_score: 0.8765 +2024-05-29 01:01:29 INFO: Epoch 108 | Train Loss: 0.2492 | Train Accuracy: 0.9371 | Validation Loss: 0.3316 | Validation Accuracy: 0.9161 | Validation Mean Precision: 0.7993 | Validation Mean Recall: 0.8617 | Validation Mean F1_score: 0.8212 +2024-05-29 01:01:30 INFO: Epoch 109 | Train Loss: 0.2434 | Train Accuracy: 0.9389 | Validation Loss: 0.2547 | Validation Accuracy: 0.9358 | Validation Mean Precision: 0.8831 | Validation Mean Recall: 0.8750 | Validation Mean F1_score: 0.8783 +2024-05-29 01:01:32 INFO: Epoch 110 | Train Loss: 0.2319 | Train Accuracy: 0.9397 | Validation Loss: 0.2541 | Validation Accuracy: 0.9344 | Validation Mean Precision: 0.8533 | Validation Mean Recall: 0.8842 | Validation Mean F1_score: 0.8674 +2024-05-29 01:01:33 INFO: Epoch 111 | Train Loss: 0.2375 | Train Accuracy: 0.9370 | Validation Loss: 0.2620 | Validation Accuracy: 0.9406 | Validation Mean Precision: 0.8368 | Validation Mean Recall: 0.8768 | Validation Mean F1_score: 0.8466 +2024-05-29 01:01:35 INFO: Epoch 112 | Train Loss: 0.2477 | Train Accuracy: 0.9350 | Validation Loss: 0.2724 | Validation Accuracy: 0.9269 | Validation Mean Precision: 0.8660 | Validation Mean Recall: 0.8627 | Validation Mean F1_score: 0.8613 +2024-05-29 01:01:36 INFO: Epoch 113 | Train Loss: 0.2361 | Train Accuracy: 0.9403 | Validation Loss: 0.2572 | Validation Accuracy: 0.9360 | Validation Mean Precision: 0.8835 | Validation Mean Recall: 0.8674 | Validation Mean F1_score: 0.8739 +2024-05-29 01:01:37 INFO: Epoch 114 | Train Loss: 0.2307 | Train Accuracy: 0.9402 | Validation Loss: 0.2482 | Validation Accuracy: 0.9377 | Validation Mean Precision: 0.8548 | Validation Mean Recall: 0.8835 | Validation Mean F1_score: 0.8673 +2024-05-29 01:01:39 INFO: Epoch 115 | Train Loss: 0.2385 | Train Accuracy: 0.9396 | Validation Loss: 0.2630 | Validation Accuracy: 0.9442 | Validation Mean Precision: 0.9123 | Validation Mean Recall: 0.8697 | Validation Mean F1_score: 0.8888 +2024-05-29 01:01:40 INFO: Epoch 116 | Train Loss: 0.2319 | Train Accuracy: 0.9393 | Validation Loss: 0.2572 | Validation Accuracy: 0.9370 | Validation Mean Precision: 0.8816 | Validation Mean Recall: 0.8704 | Validation Mean F1_score: 0.8749 +2024-05-29 01:01:42 INFO: Epoch 117 | Train Loss: 0.2325 | Train Accuracy: 0.9407 | Validation Loss: 0.2674 | Validation Accuracy: 0.9394 | Validation Mean Precision: 0.8710 | Validation Mean Recall: 0.8817 | Validation Mean F1_score: 0.8750 +2024-05-29 01:01:43 INFO: Epoch 118 | Train Loss: 0.2335 | Train Accuracy: 0.9382 | Validation Loss: 0.2692 | Validation Accuracy: 0.9401 | Validation Mean Precision: 0.8907 | Validation Mean Recall: 0.8643 | Validation Mean F1_score: 0.8760 +2024-05-29 01:01:45 INFO: Epoch 119 | Train Loss: 0.2293 | Train Accuracy: 0.9404 | Validation Loss: 0.2504 | Validation Accuracy: 0.9363 | Validation Mean Precision: 0.8421 | Validation Mean Recall: 0.8743 | Validation Mean F1_score: 0.8553 +2024-05-29 01:01:46 INFO: Epoch 120 | Train Loss: 0.2527 | Train Accuracy: 0.9344 | Validation Loss: 0.3017 | Validation Accuracy: 0.9243 | Validation Mean Precision: 0.7946 | Validation Mean Recall: 0.8720 | Validation Mean F1_score: 0.8214 +2024-05-29 01:01:48 INFO: Epoch 121 | Train Loss: 0.2321 | Train Accuracy: 0.9409 | Validation Loss: 0.2578 | Validation Accuracy: 0.9368 | Validation Mean Precision: 0.8683 | Validation Mean Recall: 0.8816 | Validation Mean F1_score: 0.8743 +2024-05-29 01:01:49 INFO: Epoch 122 | Train Loss: 0.2321 | Train Accuracy: 0.9400 | Validation Loss: 0.2715 | Validation Accuracy: 0.9449 | Validation Mean Precision: 0.8998 | Validation Mean Recall: 0.8672 | Validation Mean F1_score: 0.8825 +2024-05-29 01:01:51 INFO: Epoch 123 | Train Loss: 0.2283 | Train Accuracy: 0.9411 | Validation Loss: 0.2629 | Validation Accuracy: 0.9389 | Validation Mean Precision: 0.8545 | Validation Mean Recall: 0.8817 | Validation Mean F1_score: 0.8652 +2024-05-29 01:01:52 INFO: Epoch 124 | Train Loss: 0.2305 | Train Accuracy: 0.9410 | Validation Loss: 0.2689 | Validation Accuracy: 0.9197 | Validation Mean Precision: 0.8161 | Validation Mean Recall: 0.8753 | Validation Mean F1_score: 0.8423 +2024-05-29 01:01:54 INFO: Epoch 125 | Train Loss: 0.2371 | Train Accuracy: 0.9391 | Validation Loss: 0.3554 | Validation Accuracy: 0.8994 | Validation Mean Precision: 0.7462 | Validation Mean Recall: 0.8548 | Validation Mean F1_score: 0.7785 +2024-05-29 01:01:55 INFO: Epoch 126 | Train Loss: 0.2330 | Train Accuracy: 0.9403 | Validation Loss: 0.2541 | Validation Accuracy: 0.9408 | Validation Mean Precision: 0.8837 | Validation Mean Recall: 0.8811 | Validation Mean F1_score: 0.8817 +2024-05-29 01:01:57 INFO: Epoch 127 | Train Loss: 0.2293 | Train Accuracy: 0.9411 | Validation Loss: 0.2689 | Validation Accuracy: 0.9391 | Validation Mean Precision: 0.8538 | Validation Mean Recall: 0.8781 | Validation Mean F1_score: 0.8616 +2024-05-29 01:01:58 INFO: Epoch 128 | Train Loss: 0.2289 | Train Accuracy: 0.9405 | Validation Loss: 0.2716 | Validation Accuracy: 0.9308 | Validation Mean Precision: 0.8678 | Validation Mean Recall: 0.8692 | Validation Mean F1_score: 0.8668 +2024-05-29 01:02:00 INFO: Epoch 129 | Train Loss: 0.2325 | Train Accuracy: 0.9418 | Validation Loss: 0.3116 | Validation Accuracy: 0.9236 | Validation Mean Precision: 0.8135 | Validation Mean Recall: 0.8565 | Validation Mean F1_score: 0.8228 +2024-05-29 01:02:01 INFO: Epoch 130 | Train Loss: 0.2295 | Train Accuracy: 0.9396 | Validation Loss: 0.2617 | Validation Accuracy: 0.9329 | Validation Mean Precision: 0.8443 | Validation Mean Recall: 0.8818 | Validation Mean F1_score: 0.8612 +2024-05-29 01:02:03 INFO: Epoch 131 | Train Loss: 0.2220 | Train Accuracy: 0.9438 | Validation Loss: 0.2818 | Validation Accuracy: 0.9305 | Validation Mean Precision: 0.8444 | Validation Mean Recall: 0.8767 | Validation Mean F1_score: 0.8583 +2024-05-29 01:02:04 INFO: Epoch 132 | Train Loss: 0.2253 | Train Accuracy: 0.9420 | Validation Loss: 0.2535 | Validation Accuracy: 0.9408 | Validation Mean Precision: 0.8898 | Validation Mean Recall: 0.8748 | Validation Mean F1_score: 0.8813 +2024-05-29 01:02:06 INFO: Epoch 133 | Train Loss: 0.2272 | Train Accuracy: 0.9397 | Validation Loss: 0.2705 | Validation Accuracy: 0.9356 | Validation Mean Precision: 0.8717 | Validation Mean Recall: 0.8769 | Validation Mean F1_score: 0.8730 +2024-05-29 01:02:07 INFO: Epoch 134 | Train Loss: 0.2312 | Train Accuracy: 0.9393 | Validation Loss: 0.2865 | Validation Accuracy: 0.9312 | Validation Mean Precision: 0.8575 | Validation Mean Recall: 0.8658 | Validation Mean F1_score: 0.8603 +2024-05-29 01:02:08 INFO: Epoch 135 | Train Loss: 0.2318 | Train Accuracy: 0.9402 | Validation Loss: 0.2541 | Validation Accuracy: 0.9363 | Validation Mean Precision: 0.8349 | Validation Mean Recall: 0.8838 | Validation Mean F1_score: 0.8546 +2024-05-29 01:02:10 INFO: Epoch 136 | Train Loss: 0.2312 | Train Accuracy: 0.9400 | Validation Loss: 0.2632 | Validation Accuracy: 0.9255 | Validation Mean Precision: 0.8289 | Validation Mean Recall: 0.8741 | Validation Mean F1_score: 0.8495 +2024-05-29 01:02:12 INFO: Epoch 137 | Train Loss: 0.2243 | Train Accuracy: 0.9415 | Validation Loss: 0.2806 | Validation Accuracy: 0.9399 | Validation Mean Precision: 0.8307 | Validation Mean Recall: 0.8806 | Validation Mean F1_score: 0.8476 +2024-05-29 01:02:13 INFO: Epoch 138 | Train Loss: 0.2198 | Train Accuracy: 0.9430 | Validation Loss: 0.2474 | Validation Accuracy: 0.9466 | Validation Mean Precision: 0.8796 | Validation Mean Recall: 0.8836 | Validation Mean F1_score: 0.8803 +2024-05-29 01:02:14 INFO: Epoch 139 | Train Loss: 0.2255 | Train Accuracy: 0.9415 | Validation Loss: 0.2539 | Validation Accuracy: 0.9384 | Validation Mean Precision: 0.8582 | Validation Mean Recall: 0.8851 | Validation Mean F1_score: 0.8700 +2024-05-29 01:02:16 INFO: Epoch 140 | Train Loss: 0.2243 | Train Accuracy: 0.9421 | Validation Loss: 0.2745 | Validation Accuracy: 0.9454 | Validation Mean Precision: 0.9037 | Validation Mean Recall: 0.8690 | Validation Mean F1_score: 0.8847 +2024-05-29 01:02:17 INFO: Epoch 141 | Train Loss: 0.2266 | Train Accuracy: 0.9432 | Validation Loss: 0.2637 | Validation Accuracy: 0.9432 | Validation Mean Precision: 0.8991 | Validation Mean Recall: 0.8691 | Validation Mean F1_score: 0.8823 +2024-05-29 01:02:19 INFO: Epoch 142 | Train Loss: 0.2293 | Train Accuracy: 0.9433 | Validation Loss: 0.2581 | Validation Accuracy: 0.9324 | Validation Mean Precision: 0.8491 | Validation Mean Recall: 0.8835 | Validation Mean F1_score: 0.8649 +2024-05-29 01:02:20 INFO: Epoch 143 | Train Loss: 0.2344 | Train Accuracy: 0.9409 | Validation Loss: 0.3203 | Validation Accuracy: 0.9375 | Validation Mean Precision: 0.8498 | Validation Mean Recall: 0.8791 | Validation Mean F1_score: 0.8630 +2024-05-29 01:02:22 INFO: Epoch 144 | Train Loss: 0.2378 | Train Accuracy: 0.9412 | Validation Loss: 0.2588 | Validation Accuracy: 0.9341 | Validation Mean Precision: 0.8332 | Validation Mean Recall: 0.8803 | Validation Mean F1_score: 0.8535 +2024-05-29 01:02:23 INFO: Epoch 145 | Train Loss: 0.2172 | Train Accuracy: 0.9448 | Validation Loss: 0.2573 | Validation Accuracy: 0.9468 | Validation Mean Precision: 0.9278 | Validation Mean Recall: 0.8642 | Validation Mean F1_score: 0.8903 +2024-05-29 01:02:24 INFO: Epoch 146 | Train Loss: 0.2384 | Train Accuracy: 0.9400 | Validation Loss: 0.2536 | Validation Accuracy: 0.9466 | Validation Mean Precision: 0.8972 | Validation Mean Recall: 0.8735 | Validation Mean F1_score: 0.8848 +2024-05-29 01:02:26 INFO: Epoch 147 | Train Loss: 0.2204 | Train Accuracy: 0.9432 | Validation Loss: 0.2689 | Validation Accuracy: 0.9408 | Validation Mean Precision: 0.8888 | Validation Mean Recall: 0.8755 | Validation Mean F1_score: 0.8808 +2024-05-29 01:02:27 INFO: Epoch 148 | Train Loss: 0.2184 | Train Accuracy: 0.9441 | Validation Loss: 0.2586 | Validation Accuracy: 0.9423 | Validation Mean Precision: 0.8729 | Validation Mean Recall: 0.8793 | Validation Mean F1_score: 0.8736 +2024-05-29 01:02:29 INFO: Epoch 149 | Train Loss: 0.2224 | Train Accuracy: 0.9430 | Validation Loss: 0.2547 | Validation Accuracy: 0.9425 | Validation Mean Precision: 0.8725 | Validation Mean Recall: 0.8788 | Validation Mean F1_score: 0.8726 +2024-05-29 01:02:30 INFO: Epoch 150 | Train Loss: 0.2215 | Train Accuracy: 0.9454 | Validation Loss: 0.2538 | Validation Accuracy: 0.9435 | Validation Mean Precision: 0.8903 | Validation Mean Recall: 0.8740 | Validation Mean F1_score: 0.8812 +2024-05-29 01:02:31 INFO: Early stopping at epoch 149 | Best epoch : 100 +2024-05-29 01:02:31 INFO: Best Validation F1 Score (Macro): 0.8917 +2024-05-29 01:02:31 INFO: Best Validation Recall (Macro): 0.8631 +2024-05-29 01:02:31 INFO: Best Validation Precision (Macro): 0.9286 +2024-05-29 01:02:31 INFO: Best Epoch: 100 +2024-05-29 01:02:31 INFO: Infer Result: +2024-05-29 01:02:31 INFO: Prediction errors: 247 +2024-05-29 01:02:31 INFO: Prediction error percentage: 4.73% +2024-05-29 01:02:31 INFO: Total samples: 5218 +2024-05-29 01:02:31 INFO: Infer Result End: +2024-05-29 01:02:32 INFO: Class weights: tensor([21.1878, 3.1149, 0.7420, 0.4378], device='cuda:0') +2024-05-29 01:02:34 INFO: Epoch 001 | Train Loss: 0.6230 | Train Accuracy: 0.8188 | Validation Loss: 0.3941 | Validation Accuracy: 0.8261 | Validation Mean Precision: 0.7086 | Validation Mean Recall: 0.8409 | Validation Mean F1_score: 0.7566 +2024-05-29 01:02:35 INFO: Epoch 002 | Train Loss: 0.3746 | Train Accuracy: 0.8786 | Validation Loss: 0.3428 | Validation Accuracy: 0.8807 | Validation Mean Precision: 0.7739 | Validation Mean Recall: 0.8528 | Validation Mean F1_score: 0.8073 +2024-05-29 01:02:37 INFO: Epoch 003 | Train Loss: 0.3755 | Train Accuracy: 0.8800 | Validation Loss: 0.3365 | Validation Accuracy: 0.8793 | Validation Mean Precision: 0.7776 | Validation Mean Recall: 0.8531 | Validation Mean F1_score: 0.8095 +2024-05-29 01:02:38 INFO: Epoch 004 | Train Loss: 0.3689 | Train Accuracy: 0.8843 | Validation Loss: 0.3382 | Validation Accuracy: 0.8790 | Validation Mean Precision: 0.7675 | Validation Mean Recall: 0.8547 | Validation Mean F1_score: 0.8040 +2024-05-29 01:02:40 INFO: Epoch 005 | Train Loss: 0.3610 | Train Accuracy: 0.8857 | Validation Loss: 0.3346 | Validation Accuracy: 0.8898 | Validation Mean Precision: 0.8306 | Validation Mean Recall: 0.8497 | Validation Mean F1_score: 0.8378 +2024-05-29 01:02:41 INFO: Epoch 006 | Train Loss: 0.3629 | Train Accuracy: 0.8899 | Validation Loss: 0.3527 | Validation Accuracy: 0.8948 | Validation Mean Precision: 0.7918 | Validation Mean Recall: 0.8539 | Validation Mean F1_score: 0.8099 +2024-05-29 01:02:42 INFO: Epoch 007 | Train Loss: 0.3564 | Train Accuracy: 0.8890 | Validation Loss: 0.4176 | Validation Accuracy: 0.8773 | Validation Mean Precision: 0.7638 | Validation Mean Recall: 0.8255 | Validation Mean F1_score: 0.7698 +2024-05-29 01:02:44 INFO: Epoch 008 | Train Loss: 0.3575 | Train Accuracy: 0.8914 | Validation Loss: 0.3340 | Validation Accuracy: 0.8946 | Validation Mean Precision: 0.7967 | Validation Mean Recall: 0.8548 | Validation Mean F1_score: 0.8191 +2024-05-29 01:02:45 INFO: Epoch 009 | Train Loss: 0.3616 | Train Accuracy: 0.8893 | Validation Loss: 0.3304 | Validation Accuracy: 0.8896 | Validation Mean Precision: 0.8348 | Validation Mean Recall: 0.8549 | Validation Mean F1_score: 0.8437 +2024-05-29 01:02:47 INFO: Epoch 010 | Train Loss: 0.3497 | Train Accuracy: 0.8881 | Validation Loss: 0.3684 | Validation Accuracy: 0.8807 | Validation Mean Precision: 0.7327 | Validation Mean Recall: 0.8472 | Validation Mean F1_score: 0.7700 +2024-05-29 01:02:48 INFO: Epoch 011 | Train Loss: 0.3529 | Train Accuracy: 0.8885 | Validation Loss: 0.3257 | Validation Accuracy: 0.8979 | Validation Mean Precision: 0.8321 | Validation Mean Recall: 0.8566 | Validation Mean F1_score: 0.8434 +2024-05-29 01:02:50 INFO: Epoch 012 | Train Loss: 0.3521 | Train Accuracy: 0.8906 | Validation Loss: 0.3237 | Validation Accuracy: 0.8977 | Validation Mean Precision: 0.8387 | Validation Mean Recall: 0.8607 | Validation Mean F1_score: 0.8485 +2024-05-29 01:02:51 INFO: Epoch 013 | Train Loss: 0.3535 | Train Accuracy: 0.8934 | Validation Loss: 0.4121 | Validation Accuracy: 0.8991 | Validation Mean Precision: 0.8793 | Validation Mean Recall: 0.8274 | Validation Mean F1_score: 0.8467 +2024-05-29 01:02:53 INFO: Epoch 014 | Train Loss: 0.3501 | Train Accuracy: 0.8945 | Validation Loss: 0.3446 | Validation Accuracy: 0.8955 | Validation Mean Precision: 0.7976 | Validation Mean Recall: 0.8575 | Validation Mean F1_score: 0.8168 +2024-05-29 01:02:54 INFO: Epoch 015 | Train Loss: 0.3449 | Train Accuracy: 0.8937 | Validation Loss: 0.4116 | Validation Accuracy: 0.8819 | Validation Mean Precision: 0.8132 | Validation Mean Recall: 0.8347 | Validation Mean F1_score: 0.8073 +2024-05-29 01:02:56 INFO: Epoch 016 | Train Loss: 0.3417 | Train Accuracy: 0.8954 | Validation Loss: 0.3427 | Validation Accuracy: 0.8939 | Validation Mean Precision: 0.7901 | Validation Mean Recall: 0.8548 | Validation Mean F1_score: 0.8130 +2024-05-29 01:02:57 INFO: Epoch 017 | Train Loss: 0.3482 | Train Accuracy: 0.8916 | Validation Loss: 0.3341 | Validation Accuracy: 0.8960 | Validation Mean Precision: 0.8234 | Validation Mean Recall: 0.8584 | Validation Mean F1_score: 0.8379 +2024-05-29 01:02:59 INFO: Epoch 018 | Train Loss: 0.3493 | Train Accuracy: 0.8918 | Validation Loss: 0.3313 | Validation Accuracy: 0.8678 | Validation Mean Precision: 0.7754 | Validation Mean Recall: 0.8562 | Validation Mean F1_score: 0.8102 +2024-05-29 01:03:00 INFO: Epoch 019 | Train Loss: 0.3495 | Train Accuracy: 0.8912 | Validation Loss: 0.3546 | Validation Accuracy: 0.8977 | Validation Mean Precision: 0.8883 | Validation Mean Recall: 0.7999 | Validation Mean F1_score: 0.8297 +2024-05-29 01:03:02 INFO: Epoch 020 | Train Loss: 0.3496 | Train Accuracy: 0.8928 | Validation Loss: 0.3410 | Validation Accuracy: 0.8814 | Validation Mean Precision: 0.7581 | Validation Mean Recall: 0.8599 | Validation Mean F1_score: 0.7982 +2024-05-29 01:03:03 INFO: Epoch 021 | Train Loss: 0.3415 | Train Accuracy: 0.8946 | Validation Loss: 0.3203 | Validation Accuracy: 0.8987 | Validation Mean Precision: 0.8277 | Validation Mean Recall: 0.8585 | Validation Mean F1_score: 0.8414 +2024-05-29 01:03:05 INFO: Epoch 022 | Train Loss: 0.3433 | Train Accuracy: 0.8942 | Validation Loss: 0.3252 | Validation Accuracy: 0.9025 | Validation Mean Precision: 0.8673 | Validation Mean Recall: 0.8499 | Validation Mean F1_score: 0.8583 +2024-05-29 01:03:06 INFO: Epoch 023 | Train Loss: 0.3400 | Train Accuracy: 0.8917 | Validation Loss: 0.3357 | Validation Accuracy: 0.9018 | Validation Mean Precision: 0.8357 | Validation Mean Recall: 0.8502 | Validation Mean F1_score: 0.8394 +2024-05-29 01:03:08 INFO: Epoch 024 | Train Loss: 0.3426 | Train Accuracy: 0.8960 | Validation Loss: 0.3205 | Validation Accuracy: 0.8924 | Validation Mean Precision: 0.8333 | Validation Mean Recall: 0.8609 | Validation Mean F1_score: 0.8443 +2024-05-29 01:03:09 INFO: Epoch 025 | Train Loss: 0.3368 | Train Accuracy: 0.8960 | Validation Loss: 0.3230 | Validation Accuracy: 0.9023 | Validation Mean Precision: 0.8241 | Validation Mean Recall: 0.8590 | Validation Mean F1_score: 0.8384 +2024-05-29 01:03:10 INFO: Epoch 026 | Train Loss: 0.3417 | Train Accuracy: 0.8957 | Validation Loss: 0.3641 | Validation Accuracy: 0.8402 | Validation Mean Precision: 0.7469 | Validation Mean Recall: 0.8519 | Validation Mean F1_score: 0.7881 +2024-05-29 01:03:12 INFO: Epoch 027 | Train Loss: 0.3293 | Train Accuracy: 0.9018 | Validation Loss: 0.3141 | Validation Accuracy: 0.8955 | Validation Mean Precision: 0.8234 | Validation Mean Recall: 0.8672 | Validation Mean F1_score: 0.8432 +2024-05-29 01:03:13 INFO: Epoch 028 | Train Loss: 0.3328 | Train Accuracy: 0.9007 | Validation Loss: 0.3713 | Validation Accuracy: 0.8529 | Validation Mean Precision: 0.7135 | Validation Mean Recall: 0.8502 | Validation Mean F1_score: 0.7624 +2024-05-29 01:03:15 INFO: Epoch 029 | Train Loss: 0.3296 | Train Accuracy: 0.9051 | Validation Loss: 0.3009 | Validation Accuracy: 0.9114 | Validation Mean Precision: 0.8403 | Validation Mean Recall: 0.8750 | Validation Mean F1_score: 0.8561 +2024-05-29 01:03:16 INFO: Epoch 030 | Train Loss: 0.3205 | Train Accuracy: 0.9056 | Validation Loss: 0.3173 | Validation Accuracy: 0.9080 | Validation Mean Precision: 0.8296 | Validation Mean Recall: 0.8585 | Validation Mean F1_score: 0.8380 +2024-05-29 01:03:18 INFO: Epoch 031 | Train Loss: 0.3179 | Train Accuracy: 0.9112 | Validation Loss: 0.3199 | Validation Accuracy: 0.9140 | Validation Mean Precision: 0.8195 | Validation Mean Recall: 0.8617 | Validation Mean F1_score: 0.8299 +2024-05-29 01:03:19 INFO: Epoch 032 | Train Loss: 0.3183 | Train Accuracy: 0.9083 | Validation Loss: 0.2977 | Validation Accuracy: 0.9051 | Validation Mean Precision: 0.8667 | Validation Mean Recall: 0.8705 | Validation Mean F1_score: 0.8680 +2024-05-29 01:03:21 INFO: Epoch 033 | Train Loss: 0.3155 | Train Accuracy: 0.9120 | Validation Loss: 0.2921 | Validation Accuracy: 0.9284 | Validation Mean Precision: 0.8908 | Validation Mean Recall: 0.8707 | Validation Mean F1_score: 0.8800 +2024-05-29 01:03:22 INFO: Epoch 034 | Train Loss: 0.2983 | Train Accuracy: 0.9138 | Validation Loss: 0.3168 | Validation Accuracy: 0.8816 | Validation Mean Precision: 0.7891 | Validation Mean Recall: 0.8734 | Validation Mean F1_score: 0.8254 +2024-05-29 01:03:23 INFO: Epoch 035 | Train Loss: 0.3106 | Train Accuracy: 0.9117 | Validation Loss: 0.2900 | Validation Accuracy: 0.9310 | Validation Mean Precision: 0.8811 | Validation Mean Recall: 0.8843 | Validation Mean F1_score: 0.8816 +2024-05-29 01:03:25 INFO: Epoch 036 | Train Loss: 0.3020 | Train Accuracy: 0.9173 | Validation Loss: 0.2761 | Validation Accuracy: 0.9226 | Validation Mean Precision: 0.8734 | Validation Mean Recall: 0.8803 | Validation Mean F1_score: 0.8751 +2024-05-29 01:03:26 INFO: Epoch 037 | Train Loss: 0.2974 | Train Accuracy: 0.9162 | Validation Loss: 0.3555 | Validation Accuracy: 0.8989 | Validation Mean Precision: 0.9007 | Validation Mean Recall: 0.8045 | Validation Mean F1_score: 0.8344 +2024-05-29 01:03:28 INFO: Epoch 038 | Train Loss: 0.2953 | Train Accuracy: 0.9161 | Validation Loss: 0.2763 | Validation Accuracy: 0.9310 | Validation Mean Precision: 0.8731 | Validation Mean Recall: 0.8896 | Validation Mean F1_score: 0.8803 +2024-05-29 01:03:30 INFO: Epoch 039 | Train Loss: 0.2964 | Train Accuracy: 0.9166 | Validation Loss: 0.2851 | Validation Accuracy: 0.9329 | Validation Mean Precision: 0.9007 | Validation Mean Recall: 0.8588 | Validation Mean F1_score: 0.8754 +2024-05-29 01:03:32 INFO: Epoch 040 | Train Loss: 0.2976 | Train Accuracy: 0.9191 | Validation Loss: 0.2695 | Validation Accuracy: 0.9281 | Validation Mean Precision: 0.8536 | Validation Mean Recall: 0.8890 | Validation Mean F1_score: 0.8693 +2024-05-29 01:03:33 INFO: Epoch 041 | Train Loss: 0.2938 | Train Accuracy: 0.9177 | Validation Loss: 0.2826 | Validation Accuracy: 0.9142 | Validation Mean Precision: 0.8704 | Validation Mean Recall: 0.8789 | Validation Mean F1_score: 0.8742 +2024-05-29 01:03:35 INFO: Epoch 042 | Train Loss: 0.2920 | Train Accuracy: 0.9186 | Validation Loss: 0.2732 | Validation Accuracy: 0.9126 | Validation Mean Precision: 0.8285 | Validation Mean Recall: 0.8821 | Validation Mean F1_score: 0.8523 +2024-05-29 01:03:36 INFO: Epoch 043 | Train Loss: 0.2856 | Train Accuracy: 0.9218 | Validation Loss: 0.3002 | Validation Accuracy: 0.8833 | Validation Mean Precision: 0.8300 | Validation Mean Recall: 0.8422 | Validation Mean F1_score: 0.8237 +2024-05-29 01:03:38 INFO: Epoch 044 | Train Loss: 0.2905 | Train Accuracy: 0.9187 | Validation Loss: 0.2734 | Validation Accuracy: 0.9166 | Validation Mean Precision: 0.8190 | Validation Mean Recall: 0.8840 | Validation Mean F1_score: 0.8467 +2024-05-29 01:03:40 INFO: Epoch 045 | Train Loss: 0.2862 | Train Accuracy: 0.9202 | Validation Loss: 0.2652 | Validation Accuracy: 0.9229 | Validation Mean Precision: 0.8612 | Validation Mean Recall: 0.8824 | Validation Mean F1_score: 0.8696 +2024-05-29 01:03:41 INFO: Epoch 046 | Train Loss: 0.2861 | Train Accuracy: 0.9209 | Validation Loss: 0.2617 | Validation Accuracy: 0.9264 | Validation Mean Precision: 0.8644 | Validation Mean Recall: 0.8890 | Validation Mean F1_score: 0.8760 +2024-05-29 01:03:43 INFO: Epoch 047 | Train Loss: 0.2799 | Train Accuracy: 0.9230 | Validation Loss: 0.2645 | Validation Accuracy: 0.9219 | Validation Mean Precision: 0.8477 | Validation Mean Recall: 0.8874 | Validation Mean F1_score: 0.8660 +2024-05-29 01:03:45 INFO: Epoch 048 | Train Loss: 0.2787 | Train Accuracy: 0.9235 | Validation Loss: 0.2699 | Validation Accuracy: 0.9365 | Validation Mean Precision: 0.8975 | Validation Mean Recall: 0.8880 | Validation Mean F1_score: 0.8925 +2024-05-29 01:03:46 INFO: Epoch 049 | Train Loss: 0.2814 | Train Accuracy: 0.9218 | Validation Loss: 0.2767 | Validation Accuracy: 0.9274 | Validation Mean Precision: 0.8991 | Validation Mean Recall: 0.8748 | Validation Mean F1_score: 0.8857 +2024-05-29 01:03:48 INFO: Epoch 050 | Train Loss: 0.2829 | Train Accuracy: 0.9229 | Validation Loss: 0.2670 | Validation Accuracy: 0.9329 | Validation Mean Precision: 0.8791 | Validation Mean Recall: 0.8910 | Validation Mean F1_score: 0.8839 +2024-05-29 01:03:50 INFO: Epoch 051 | Train Loss: 0.2736 | Train Accuracy: 0.9251 | Validation Loss: 0.2754 | Validation Accuracy: 0.9368 | Validation Mean Precision: 0.8595 | Validation Mean Recall: 0.8903 | Validation Mean F1_score: 0.8710 +2024-05-29 01:03:51 INFO: Epoch 052 | Train Loss: 0.2820 | Train Accuracy: 0.9217 | Validation Loss: 0.2783 | Validation Accuracy: 0.9322 | Validation Mean Precision: 0.8725 | Validation Mean Recall: 0.8903 | Validation Mean F1_score: 0.8790 +2024-05-29 01:03:53 INFO: Epoch 053 | Train Loss: 0.2775 | Train Accuracy: 0.9254 | Validation Loss: 0.2740 | Validation Accuracy: 0.9185 | Validation Mean Precision: 0.8698 | Validation Mean Recall: 0.8618 | Validation Mean F1_score: 0.8579 +2024-05-29 01:03:54 INFO: Epoch 054 | Train Loss: 0.2703 | Train Accuracy: 0.9263 | Validation Loss: 0.2961 | Validation Accuracy: 0.9118 | Validation Mean Precision: 0.8948 | Validation Mean Recall: 0.8543 | Validation Mean F1_score: 0.8696 +2024-05-29 01:03:56 INFO: Epoch 055 | Train Loss: 0.2801 | Train Accuracy: 0.9256 | Validation Loss: 0.2665 | Validation Accuracy: 0.9324 | Validation Mean Precision: 0.8374 | Validation Mean Recall: 0.8936 | Validation Mean F1_score: 0.8596 +2024-05-29 01:03:58 INFO: Epoch 056 | Train Loss: 0.2735 | Train Accuracy: 0.9246 | Validation Loss: 0.2576 | Validation Accuracy: 0.9403 | Validation Mean Precision: 0.9003 | Validation Mean Recall: 0.8925 | Validation Mean F1_score: 0.8962 +2024-05-29 01:03:59 INFO: Epoch 057 | Train Loss: 0.2720 | Train Accuracy: 0.9288 | Validation Loss: 0.2678 | Validation Accuracy: 0.9138 | Validation Mean Precision: 0.8187 | Validation Mean Recall: 0.8812 | Validation Mean F1_score: 0.8446 +2024-05-29 01:04:01 INFO: Epoch 058 | Train Loss: 0.2688 | Train Accuracy: 0.9264 | Validation Loss: 0.2632 | Validation Accuracy: 0.9219 | Validation Mean Precision: 0.8774 | Validation Mean Recall: 0.8900 | Validation Mean F1_score: 0.8835 +2024-05-29 01:04:02 INFO: Epoch 059 | Train Loss: 0.2655 | Train Accuracy: 0.9280 | Validation Loss: 0.2650 | Validation Accuracy: 0.9305 | Validation Mean Precision: 0.8767 | Validation Mean Recall: 0.8828 | Validation Mean F1_score: 0.8776 +2024-05-29 01:04:04 INFO: Epoch 060 | Train Loss: 0.2720 | Train Accuracy: 0.9267 | Validation Loss: 0.2806 | Validation Accuracy: 0.9322 | Validation Mean Precision: 0.8414 | Validation Mean Recall: 0.8895 | Validation Mean F1_score: 0.8588 +2024-05-29 01:04:05 INFO: Epoch 061 | Train Loss: 0.2681 | Train Accuracy: 0.9302 | Validation Loss: 0.2590 | Validation Accuracy: 0.9269 | Validation Mean Precision: 0.8832 | Validation Mean Recall: 0.8881 | Validation Mean F1_score: 0.8855 +2024-05-29 01:04:06 INFO: Epoch 062 | Train Loss: 0.2662 | Train Accuracy: 0.9279 | Validation Loss: 0.2689 | Validation Accuracy: 0.9391 | Validation Mean Precision: 0.8486 | Validation Mean Recall: 0.8925 | Validation Mean F1_score: 0.8635 +2024-05-29 01:04:08 INFO: Epoch 063 | Train Loss: 0.2689 | Train Accuracy: 0.9278 | Validation Loss: 0.2622 | Validation Accuracy: 0.9413 | Validation Mean Precision: 0.8924 | Validation Mean Recall: 0.8973 | Validation Mean F1_score: 0.8934 +2024-05-29 01:04:09 INFO: Epoch 064 | Train Loss: 0.2718 | Train Accuracy: 0.9299 | Validation Loss: 0.2504 | Validation Accuracy: 0.9365 | Validation Mean Precision: 0.8744 | Validation Mean Recall: 0.8976 | Validation Mean F1_score: 0.8846 +2024-05-29 01:04:11 INFO: Epoch 065 | Train Loss: 0.2694 | Train Accuracy: 0.9299 | Validation Loss: 0.2519 | Validation Accuracy: 0.9298 | Validation Mean Precision: 0.8752 | Validation Mean Recall: 0.8913 | Validation Mean F1_score: 0.8819 +2024-05-29 01:04:12 INFO: Epoch 066 | Train Loss: 0.2643 | Train Accuracy: 0.9305 | Validation Loss: 0.2553 | Validation Accuracy: 0.9181 | Validation Mean Precision: 0.8610 | Validation Mean Recall: 0.8899 | Validation Mean F1_score: 0.8747 +2024-05-29 01:04:13 INFO: Epoch 067 | Train Loss: 0.2688 | Train Accuracy: 0.9282 | Validation Loss: 0.2536 | Validation Accuracy: 0.9303 | Validation Mean Precision: 0.8270 | Validation Mean Recall: 0.8939 | Validation Mean F1_score: 0.8547 +2024-05-29 01:04:15 INFO: Epoch 068 | Train Loss: 0.2645 | Train Accuracy: 0.9294 | Validation Loss: 0.2642 | Validation Accuracy: 0.9166 | Validation Mean Precision: 0.8239 | Validation Mean Recall: 0.8882 | Validation Mean F1_score: 0.8518 +2024-05-29 01:04:16 INFO: Epoch 069 | Train Loss: 0.2713 | Train Accuracy: 0.9269 | Validation Loss: 0.2617 | Validation Accuracy: 0.9197 | Validation Mean Precision: 0.8426 | Validation Mean Recall: 0.8934 | Validation Mean F1_score: 0.8652 +2024-05-29 01:04:18 INFO: Epoch 070 | Train Loss: 0.2682 | Train Accuracy: 0.9293 | Validation Loss: 0.2513 | Validation Accuracy: 0.9267 | Validation Mean Precision: 0.8489 | Validation Mean Recall: 0.8937 | Validation Mean F1_score: 0.8694 +2024-05-29 01:04:19 INFO: Epoch 071 | Train Loss: 0.2711 | Train Accuracy: 0.9255 | Validation Loss: 0.3099 | Validation Accuracy: 0.8951 | Validation Mean Precision: 0.8093 | Validation Mean Recall: 0.8795 | Validation Mean F1_score: 0.8399 +2024-05-29 01:04:20 INFO: Epoch 072 | Train Loss: 0.2646 | Train Accuracy: 0.9293 | Validation Loss: 0.2576 | Validation Accuracy: 0.9272 | Validation Mean Precision: 0.8917 | Validation Mean Recall: 0.8741 | Validation Mean F1_score: 0.8798 +2024-05-29 01:04:22 INFO: Epoch 073 | Train Loss: 0.2610 | Train Accuracy: 0.9309 | Validation Loss: 0.2520 | Validation Accuracy: 0.9202 | Validation Mean Precision: 0.8384 | Validation Mean Recall: 0.8868 | Validation Mean F1_score: 0.8607 +2024-05-29 01:04:23 INFO: Epoch 074 | Train Loss: 0.2656 | Train Accuracy: 0.9324 | Validation Loss: 0.2593 | Validation Accuracy: 0.9432 | Validation Mean Precision: 0.8928 | Validation Mean Recall: 0.8934 | Validation Mean F1_score: 0.8917 +2024-05-29 01:04:25 INFO: Epoch 075 | Train Loss: 0.2658 | Train Accuracy: 0.9341 | Validation Loss: 0.2527 | Validation Accuracy: 0.9320 | Validation Mean Precision: 0.8319 | Validation Mean Recall: 0.8893 | Validation Mean F1_score: 0.8559 +2024-05-29 01:04:26 INFO: Epoch 076 | Train Loss: 0.2576 | Train Accuracy: 0.9326 | Validation Loss: 0.2565 | Validation Accuracy: 0.9298 | Validation Mean Precision: 0.8599 | Validation Mean Recall: 0.8925 | Validation Mean F1_score: 0.8720 +2024-05-29 01:04:28 INFO: Epoch 077 | Train Loss: 0.2562 | Train Accuracy: 0.9329 | Validation Loss: 0.2490 | Validation Accuracy: 0.9399 | Validation Mean Precision: 0.8504 | Validation Mean Recall: 0.8994 | Validation Mean F1_score: 0.8703 +2024-05-29 01:04:29 INFO: Epoch 078 | Train Loss: 0.2618 | Train Accuracy: 0.9305 | Validation Loss: 0.2480 | Validation Accuracy: 0.9291 | Validation Mean Precision: 0.8343 | Validation Mean Recall: 0.8897 | Validation Mean F1_score: 0.8582 +2024-05-29 01:04:31 INFO: Epoch 079 | Train Loss: 0.2617 | Train Accuracy: 0.9349 | Validation Loss: 0.2889 | Validation Accuracy: 0.8840 | Validation Mean Precision: 0.7988 | Validation Mean Recall: 0.8796 | Validation Mean F1_score: 0.8339 +2024-05-29 01:04:32 INFO: Epoch 080 | Train Loss: 0.2579 | Train Accuracy: 0.9344 | Validation Loss: 0.2594 | Validation Accuracy: 0.9279 | Validation Mean Precision: 0.8084 | Validation Mean Recall: 0.8874 | Validation Mean F1_score: 0.8391 +2024-05-29 01:04:34 INFO: Epoch 081 | Train Loss: 0.2566 | Train Accuracy: 0.9348 | Validation Loss: 0.2457 | Validation Accuracy: 0.9288 | Validation Mean Precision: 0.8346 | Validation Mean Recall: 0.8909 | Validation Mean F1_score: 0.8589 +2024-05-29 01:04:35 INFO: Epoch 082 | Train Loss: 0.2557 | Train Accuracy: 0.9325 | Validation Loss: 0.2460 | Validation Accuracy: 0.9418 | Validation Mean Precision: 0.8923 | Validation Mean Recall: 0.8923 | Validation Mean F1_score: 0.8915 +2024-05-29 01:04:37 INFO: Epoch 083 | Train Loss: 0.2624 | Train Accuracy: 0.9323 | Validation Loss: 0.2452 | Validation Accuracy: 0.9406 | Validation Mean Precision: 0.8830 | Validation Mean Recall: 0.9006 | Validation Mean F1_score: 0.8908 +2024-05-29 01:04:38 INFO: Epoch 084 | Train Loss: 0.2540 | Train Accuracy: 0.9347 | Validation Loss: 0.2938 | Validation Accuracy: 0.9118 | Validation Mean Precision: 0.8918 | Validation Mean Recall: 0.8535 | Validation Mean F1_score: 0.8709 +2024-05-29 01:04:40 INFO: Epoch 085 | Train Loss: 0.2563 | Train Accuracy: 0.9332 | Validation Loss: 0.2402 | Validation Accuracy: 0.9415 | Validation Mean Precision: 0.8889 | Validation Mean Recall: 0.8983 | Validation Mean F1_score: 0.8928 +2024-05-29 01:04:41 INFO: Epoch 086 | Train Loss: 0.2519 | Train Accuracy: 0.9367 | Validation Loss: 0.2536 | Validation Accuracy: 0.9451 | Validation Mean Precision: 0.8811 | Validation Mean Recall: 0.8987 | Validation Mean F1_score: 0.8873 +2024-05-29 01:04:43 INFO: Epoch 087 | Train Loss: 0.2553 | Train Accuracy: 0.9340 | Validation Loss: 0.2428 | Validation Accuracy: 0.9418 | Validation Mean Precision: 0.8774 | Validation Mean Recall: 0.8980 | Validation Mean F1_score: 0.8869 +2024-05-29 01:04:44 INFO: Epoch 088 | Train Loss: 0.2584 | Train Accuracy: 0.9344 | Validation Loss: 0.2470 | Validation Accuracy: 0.9248 | Validation Mean Precision: 0.8443 | Validation Mean Recall: 0.8950 | Validation Mean F1_score: 0.8673 +2024-05-29 01:04:45 INFO: Epoch 089 | Train Loss: 0.2556 | Train Accuracy: 0.9326 | Validation Loss: 0.2541 | Validation Accuracy: 0.9456 | Validation Mean Precision: 0.8912 | Validation Mean Recall: 0.8988 | Validation Mean F1_score: 0.8931 +2024-05-29 01:04:47 INFO: Epoch 090 | Train Loss: 0.2609 | Train Accuracy: 0.9334 | Validation Loss: 0.2643 | Validation Accuracy: 0.9219 | Validation Mean Precision: 0.8196 | Validation Mean Recall: 0.8870 | Validation Mean F1_score: 0.8441 +2024-05-29 01:04:48 INFO: Epoch 091 | Train Loss: 0.2539 | Train Accuracy: 0.9358 | Validation Loss: 0.2637 | Validation Accuracy: 0.9432 | Validation Mean Precision: 0.9142 | Validation Mean Recall: 0.8870 | Validation Mean F1_score: 0.8993 +2024-05-29 01:04:49 INFO: Epoch 092 | Train Loss: 0.2541 | Train Accuracy: 0.9374 | Validation Loss: 0.2457 | Validation Accuracy: 0.9303 | Validation Mean Precision: 0.8538 | Validation Mean Recall: 0.8972 | Validation Mean F1_score: 0.8726 +2024-05-29 01:04:51 INFO: Epoch 093 | Train Loss: 0.2538 | Train Accuracy: 0.9348 | Validation Loss: 0.2574 | Validation Accuracy: 0.9317 | Validation Mean Precision: 0.8178 | Validation Mean Recall: 0.8883 | Validation Mean F1_score: 0.8441 +2024-05-29 01:04:52 INFO: Epoch 094 | Train Loss: 0.2570 | Train Accuracy: 0.9333 | Validation Loss: 0.2707 | Validation Accuracy: 0.9454 | Validation Mean Precision: 0.9062 | Validation Mean Recall: 0.8899 | Validation Mean F1_score: 0.8964 +2024-05-29 01:04:54 INFO: Epoch 095 | Train Loss: 0.2504 | Train Accuracy: 0.9367 | Validation Loss: 0.2614 | Validation Accuracy: 0.9078 | Validation Mean Precision: 0.8376 | Validation Mean Recall: 0.8897 | Validation Mean F1_score: 0.8612 +2024-05-29 01:04:55 INFO: Epoch 096 | Train Loss: 0.2487 | Train Accuracy: 0.9381 | Validation Loss: 0.2437 | Validation Accuracy: 0.9334 | Validation Mean Precision: 0.8751 | Validation Mean Recall: 0.9001 | Validation Mean F1_score: 0.8870 +2024-05-29 01:04:56 INFO: Epoch 097 | Train Loss: 0.2527 | Train Accuracy: 0.9362 | Validation Loss: 0.2728 | Validation Accuracy: 0.9370 | Validation Mean Precision: 0.8175 | Validation Mean Recall: 0.8876 | Validation Mean F1_score: 0.8417 +2024-05-29 01:04:58 INFO: Epoch 098 | Train Loss: 0.2546 | Train Accuracy: 0.9374 | Validation Loss: 0.2435 | Validation Accuracy: 0.9499 | Validation Mean Precision: 0.8993 | Validation Mean Recall: 0.9050 | Validation Mean F1_score: 0.9010 +2024-05-29 01:04:59 INFO: Epoch 099 | Train Loss: 0.2485 | Train Accuracy: 0.9376 | Validation Loss: 0.2409 | Validation Accuracy: 0.9449 | Validation Mean Precision: 0.9093 | Validation Mean Recall: 0.8978 | Validation Mean F1_score: 0.9021 +2024-05-29 01:05:01 INFO: Epoch 100 | Train Loss: 0.2512 | Train Accuracy: 0.9371 | Validation Loss: 0.2515 | Validation Accuracy: 0.9322 | Validation Mean Precision: 0.8224 | Validation Mean Recall: 0.8932 | Validation Mean F1_score: 0.8509 +2024-05-29 01:05:02 INFO: Epoch 101 | Train Loss: 0.2460 | Train Accuracy: 0.9393 | Validation Loss: 0.2383 | Validation Accuracy: 0.9375 | Validation Mean Precision: 0.8841 | Validation Mean Recall: 0.9019 | Validation Mean F1_score: 0.8926 +2024-05-29 01:05:04 INFO: Epoch 102 | Train Loss: 0.2500 | Train Accuracy: 0.9375 | Validation Loss: 0.2340 | Validation Accuracy: 0.9384 | Validation Mean Precision: 0.8677 | Validation Mean Recall: 0.9005 | Validation Mean F1_score: 0.8822 +2024-05-29 01:05:05 INFO: Epoch 103 | Train Loss: 0.2506 | Train Accuracy: 0.9370 | Validation Loss: 0.2504 | Validation Accuracy: 0.9451 | Validation Mean Precision: 0.8845 | Validation Mean Recall: 0.8995 | Validation Mean F1_score: 0.8897 +2024-05-29 01:05:07 INFO: Epoch 104 | Train Loss: 0.2510 | Train Accuracy: 0.9368 | Validation Loss: 0.2443 | Validation Accuracy: 0.9276 | Validation Mean Precision: 0.8389 | Validation Mean Recall: 0.8981 | Validation Mean F1_score: 0.8649 +2024-05-29 01:05:08 INFO: Epoch 105 | Train Loss: 0.2527 | Train Accuracy: 0.9376 | Validation Loss: 0.2544 | Validation Accuracy: 0.9334 | Validation Mean Precision: 0.8985 | Validation Mean Recall: 0.8926 | Validation Mean F1_score: 0.8944 +2024-05-29 01:05:09 INFO: Epoch 106 | Train Loss: 0.2500 | Train Accuracy: 0.9364 | Validation Loss: 0.2334 | Validation Accuracy: 0.9423 | Validation Mean Precision: 0.8886 | Validation Mean Recall: 0.9002 | Validation Mean F1_score: 0.8940 +2024-05-29 01:05:11 INFO: Epoch 107 | Train Loss: 0.2552 | Train Accuracy: 0.9357 | Validation Loss: 0.2488 | Validation Accuracy: 0.9257 | Validation Mean Precision: 0.8337 | Validation Mean Recall: 0.8966 | Validation Mean F1_score: 0.8611 +2024-05-29 01:05:12 INFO: Epoch 108 | Train Loss: 0.2436 | Train Accuracy: 0.9412 | Validation Loss: 0.2525 | Validation Accuracy: 0.9377 | Validation Mean Precision: 0.8642 | Validation Mean Recall: 0.8972 | Validation Mean F1_score: 0.8751 +2024-05-29 01:05:14 INFO: Epoch 109 | Train Loss: 0.2450 | Train Accuracy: 0.9388 | Validation Loss: 0.2574 | Validation Accuracy: 0.9348 | Validation Mean Precision: 0.8378 | Validation Mean Recall: 0.8865 | Validation Mean F1_score: 0.8565 +2024-05-29 01:05:15 INFO: Epoch 110 | Train Loss: 0.2485 | Train Accuracy: 0.9380 | Validation Loss: 0.2350 | Validation Accuracy: 0.9324 | Validation Mean Precision: 0.8607 | Validation Mean Recall: 0.8979 | Validation Mean F1_score: 0.8778 +2024-05-29 01:05:16 INFO: Epoch 111 | Train Loss: 0.2430 | Train Accuracy: 0.9386 | Validation Loss: 0.2396 | Validation Accuracy: 0.9370 | Validation Mean Precision: 0.8582 | Validation Mean Recall: 0.8986 | Validation Mean F1_score: 0.8758 +2024-05-29 01:05:18 INFO: Epoch 112 | Train Loss: 0.2450 | Train Accuracy: 0.9401 | Validation Loss: 0.2348 | Validation Accuracy: 0.9483 | Validation Mean Precision: 0.9050 | Validation Mean Recall: 0.9019 | Validation Mean F1_score: 0.9032 +2024-05-29 01:05:19 INFO: Epoch 113 | Train Loss: 0.2453 | Train Accuracy: 0.9393 | Validation Loss: 0.2299 | Validation Accuracy: 0.9478 | Validation Mean Precision: 0.9008 | Validation Mean Recall: 0.9071 | Validation Mean F1_score: 0.9035 +2024-05-29 01:05:21 INFO: Epoch 114 | Train Loss: 0.2426 | Train Accuracy: 0.9391 | Validation Loss: 0.2407 | Validation Accuracy: 0.9459 | Validation Mean Precision: 0.8603 | Validation Mean Recall: 0.9017 | Validation Mean F1_score: 0.8755 +2024-05-29 01:05:22 INFO: Epoch 115 | Train Loss: 0.2450 | Train Accuracy: 0.9390 | Validation Loss: 0.2473 | Validation Accuracy: 0.9336 | Validation Mean Precision: 0.8894 | Validation Mean Recall: 0.8754 | Validation Mean F1_score: 0.8798 +2024-05-29 01:05:23 INFO: Epoch 116 | Train Loss: 0.2412 | Train Accuracy: 0.9404 | Validation Loss: 0.2356 | Validation Accuracy: 0.9461 | Validation Mean Precision: 0.8769 | Validation Mean Recall: 0.9003 | Validation Mean F1_score: 0.8863 +2024-05-29 01:05:25 INFO: Epoch 117 | Train Loss: 0.2419 | Train Accuracy: 0.9392 | Validation Loss: 0.2348 | Validation Accuracy: 0.9315 | Validation Mean Precision: 0.8703 | Validation Mean Recall: 0.8954 | Validation Mean F1_score: 0.8820 +2024-05-29 01:05:26 INFO: Epoch 118 | Train Loss: 0.2409 | Train Accuracy: 0.9394 | Validation Loss: 0.2333 | Validation Accuracy: 0.9430 | Validation Mean Precision: 0.8961 | Validation Mean Recall: 0.8900 | Validation Mean F1_score: 0.8926 +2024-05-29 01:05:27 INFO: Epoch 119 | Train Loss: 0.2395 | Train Accuracy: 0.9397 | Validation Loss: 0.2334 | Validation Accuracy: 0.9432 | Validation Mean Precision: 0.8885 | Validation Mean Recall: 0.9005 | Validation Mean F1_score: 0.8940 +2024-05-29 01:05:29 INFO: Epoch 120 | Train Loss: 0.2379 | Train Accuracy: 0.9411 | Validation Loss: 0.2319 | Validation Accuracy: 0.9379 | Validation Mean Precision: 0.8558 | Validation Mean Recall: 0.8983 | Validation Mean F1_score: 0.8747 +2024-05-29 01:05:30 INFO: Epoch 121 | Train Loss: 0.2440 | Train Accuracy: 0.9397 | Validation Loss: 0.2303 | Validation Accuracy: 0.9391 | Validation Mean Precision: 0.9018 | Validation Mean Recall: 0.8980 | Validation Mean F1_score: 0.8995 +2024-05-29 01:05:31 INFO: Epoch 122 | Train Loss: 0.2410 | Train Accuracy: 0.9395 | Validation Loss: 0.2416 | Validation Accuracy: 0.9494 | Validation Mean Precision: 0.8874 | Validation Mean Recall: 0.8995 | Validation Mean F1_score: 0.8906 +2024-05-29 01:05:33 INFO: Epoch 123 | Train Loss: 0.2388 | Train Accuracy: 0.9400 | Validation Loss: 0.2333 | Validation Accuracy: 0.9516 | Validation Mean Precision: 0.8943 | Validation Mean Recall: 0.9036 | Validation Mean F1_score: 0.8971 +2024-05-29 01:05:34 INFO: Epoch 124 | Train Loss: 0.2442 | Train Accuracy: 0.9407 | Validation Loss: 0.2335 | Validation Accuracy: 0.9418 | Validation Mean Precision: 0.8646 | Validation Mean Recall: 0.9003 | Validation Mean F1_score: 0.8805 +2024-05-29 01:05:35 INFO: Epoch 125 | Train Loss: 0.2356 | Train Accuracy: 0.9429 | Validation Loss: 0.2293 | Validation Accuracy: 0.9363 | Validation Mean Precision: 0.8749 | Validation Mean Recall: 0.9021 | Validation Mean F1_score: 0.8872 +2024-05-29 01:05:37 INFO: Epoch 126 | Train Loss: 0.2379 | Train Accuracy: 0.9382 | Validation Loss: 0.2344 | Validation Accuracy: 0.9444 | Validation Mean Precision: 0.8703 | Validation Mean Recall: 0.9002 | Validation Mean F1_score: 0.8834 +2024-05-29 01:05:38 INFO: Epoch 127 | Train Loss: 0.2384 | Train Accuracy: 0.9420 | Validation Loss: 0.2281 | Validation Accuracy: 0.9408 | Validation Mean Precision: 0.8800 | Validation Mean Recall: 0.9004 | Validation Mean F1_score: 0.8892 +2024-05-29 01:05:40 INFO: Epoch 128 | Train Loss: 0.2382 | Train Accuracy: 0.9422 | Validation Loss: 0.2430 | Validation Accuracy: 0.9480 | Validation Mean Precision: 0.9093 | Validation Mean Recall: 0.8987 | Validation Mean F1_score: 0.9022 +2024-05-29 01:05:41 INFO: Epoch 129 | Train Loss: 0.2411 | Train Accuracy: 0.9413 | Validation Loss: 0.2267 | Validation Accuracy: 0.9423 | Validation Mean Precision: 0.8863 | Validation Mean Recall: 0.9044 | Validation Mean F1_score: 0.8948 +2024-05-29 01:05:42 INFO: Epoch 130 | Train Loss: 0.2401 | Train Accuracy: 0.9397 | Validation Loss: 0.2340 | Validation Accuracy: 0.9353 | Validation Mean Precision: 0.8694 | Validation Mean Recall: 0.8974 | Validation Mean F1_score: 0.8809 +2024-05-29 01:05:44 INFO: Epoch 131 | Train Loss: 0.2399 | Train Accuracy: 0.9400 | Validation Loss: 0.2628 | Validation Accuracy: 0.9346 | Validation Mean Precision: 0.8641 | Validation Mean Recall: 0.8938 | Validation Mean F1_score: 0.8763 +2024-05-29 01:05:45 INFO: Epoch 132 | Train Loss: 0.2416 | Train Accuracy: 0.9410 | Validation Loss: 0.2332 | Validation Accuracy: 0.9523 | Validation Mean Precision: 0.9088 | Validation Mean Recall: 0.9019 | Validation Mean F1_score: 0.9047 +2024-05-29 01:05:47 INFO: Epoch 133 | Train Loss: 0.2354 | Train Accuracy: 0.9399 | Validation Loss: 0.2508 | Validation Accuracy: 0.9449 | Validation Mean Precision: 0.8577 | Validation Mean Recall: 0.8996 | Validation Mean F1_score: 0.8727 +2024-05-29 01:05:48 INFO: Epoch 134 | Train Loss: 0.2424 | Train Accuracy: 0.9403 | Validation Loss: 0.2310 | Validation Accuracy: 0.9360 | Validation Mean Precision: 0.8762 | Validation Mean Recall: 0.9007 | Validation Mean F1_score: 0.8873 +2024-05-29 01:05:50 INFO: Epoch 135 | Train Loss: 0.2397 | Train Accuracy: 0.9411 | Validation Loss: 0.2372 | Validation Accuracy: 0.9449 | Validation Mean Precision: 0.8788 | Validation Mean Recall: 0.9016 | Validation Mean F1_score: 0.8888 +2024-05-29 01:05:51 INFO: Epoch 136 | Train Loss: 0.2378 | Train Accuracy: 0.9414 | Validation Loss: 0.2496 | Validation Accuracy: 0.9243 | Validation Mean Precision: 0.8301 | Validation Mean Recall: 0.8939 | Validation Mean F1_score: 0.8578 +2024-05-29 01:05:53 INFO: Epoch 137 | Train Loss: 0.2341 | Train Accuracy: 0.9442 | Validation Loss: 0.2389 | Validation Accuracy: 0.9487 | Validation Mean Precision: 0.8830 | Validation Mean Recall: 0.9058 | Validation Mean F1_score: 0.8911 +2024-05-29 01:05:54 INFO: Epoch 138 | Train Loss: 0.2340 | Train Accuracy: 0.9429 | Validation Loss: 0.2345 | Validation Accuracy: 0.9358 | Validation Mean Precision: 0.8733 | Validation Mean Recall: 0.8916 | Validation Mean F1_score: 0.8820 +2024-05-29 01:05:55 INFO: Epoch 139 | Train Loss: 0.2312 | Train Accuracy: 0.9432 | Validation Loss: 0.2445 | Validation Accuracy: 0.9497 | Validation Mean Precision: 0.8943 | Validation Mean Recall: 0.9006 | Validation Mean F1_score: 0.8951 +2024-05-29 01:05:57 INFO: Epoch 140 | Train Loss: 0.2446 | Train Accuracy: 0.9409 | Validation Loss: 0.2427 | Validation Accuracy: 0.9444 | Validation Mean Precision: 0.8703 | Validation Mean Recall: 0.9028 | Validation Mean F1_score: 0.8839 +2024-05-29 01:05:58 INFO: Epoch 141 | Train Loss: 0.2346 | Train Accuracy: 0.9425 | Validation Loss: 0.2412 | Validation Accuracy: 0.9408 | Validation Mean Precision: 0.9138 | Validation Mean Recall: 0.8791 | Validation Mean F1_score: 0.8943 +2024-05-29 01:06:00 INFO: Epoch 142 | Train Loss: 0.2318 | Train Accuracy: 0.9446 | Validation Loss: 0.2428 | Validation Accuracy: 0.9255 | Validation Mean Precision: 0.8446 | Validation Mean Recall: 0.8889 | Validation Mean F1_score: 0.8619 +2024-05-29 01:06:01 INFO: Epoch 143 | Train Loss: 0.2327 | Train Accuracy: 0.9433 | Validation Loss: 0.2254 | Validation Accuracy: 0.9480 | Validation Mean Precision: 0.8936 | Validation Mean Recall: 0.9038 | Validation Mean F1_score: 0.8979 +2024-05-29 01:06:03 INFO: Epoch 144 | Train Loss: 0.2414 | Train Accuracy: 0.9421 | Validation Loss: 0.2236 | Validation Accuracy: 0.9420 | Validation Mean Precision: 0.8841 | Validation Mean Recall: 0.9018 | Validation Mean F1_score: 0.8921 +2024-05-29 01:06:04 INFO: Epoch 145 | Train Loss: 0.2356 | Train Accuracy: 0.9423 | Validation Loss: 0.2346 | Validation Accuracy: 0.9370 | Validation Mean Precision: 0.8650 | Validation Mean Recall: 0.9031 | Validation Mean F1_score: 0.8818 +2024-05-29 01:06:06 INFO: Epoch 146 | Train Loss: 0.2340 | Train Accuracy: 0.9427 | Validation Loss: 0.2265 | Validation Accuracy: 0.9475 | Validation Mean Precision: 0.8958 | Validation Mean Recall: 0.9004 | Validation Mean F1_score: 0.8976 +2024-05-29 01:06:07 INFO: Epoch 147 | Train Loss: 0.2277 | Train Accuracy: 0.9432 | Validation Loss: 0.3076 | Validation Accuracy: 0.9152 | Validation Mean Precision: 0.8523 | Validation Mean Recall: 0.8642 | Validation Mean F1_score: 0.8505 +2024-05-29 01:06:09 INFO: Epoch 148 | Train Loss: 0.2410 | Train Accuracy: 0.9401 | Validation Loss: 0.2299 | Validation Accuracy: 0.9528 | Validation Mean Precision: 0.9296 | Validation Mean Recall: 0.8966 | Validation Mean F1_score: 0.9120 +2024-05-29 01:06:10 INFO: Epoch 149 | Train Loss: 0.2286 | Train Accuracy: 0.9441 | Validation Loss: 0.2286 | Validation Accuracy: 0.9468 | Validation Mean Precision: 0.8873 | Validation Mean Recall: 0.9005 | Validation Mean F1_score: 0.8931 +2024-05-29 01:06:12 INFO: Epoch 150 | Train Loss: 0.2282 | Train Accuracy: 0.9451 | Validation Loss: 0.2408 | Validation Accuracy: 0.9348 | Validation Mean Precision: 0.8572 | Validation Mean Recall: 0.8970 | Validation Mean F1_score: 0.8735 +2024-05-29 01:06:12 INFO: Best Validation F1 Score (Macro): 0.9120 +2024-05-29 01:06:12 INFO: Best Validation Recall (Macro): 0.8966 +2024-05-29 01:06:12 INFO: Best Validation Precision (Macro): 0.9296 +2024-05-29 01:06:12 INFO: Best Epoch: 148 +2024-05-29 01:06:13 INFO: Infer Result: +2024-05-29 01:06:13 INFO: Prediction errors: 328 +2024-05-29 01:06:13 INFO: Prediction error percentage: 6.29% +2024-05-29 01:06:13 INFO: Total samples: 5218 +2024-05-29 01:06:13 INFO: Infer Result End: +2024-05-29 01:06:14 INFO: Class weights: tensor([21.1878, 3.1149, 0.7420, 0.4378], device='cuda:0') +2024-05-29 01:06:15 INFO: Epoch 001 | Train Loss: 0.5638 | Train Accuracy: 0.8236 | Validation Loss: 0.3719 | Validation Accuracy: 0.8728 | Validation Mean Precision: 0.7790 | Validation Mean Recall: 0.8359 | Validation Mean F1_score: 0.8044 +2024-05-29 01:06:16 INFO: Epoch 002 | Train Loss: 0.3773 | Train Accuracy: 0.8733 | Validation Loss: 0.3723 | Validation Accuracy: 0.8685 | Validation Mean Precision: 0.7648 | Validation Mean Recall: 0.8368 | Validation Mean F1_score: 0.7960 +2024-05-29 01:06:18 INFO: Epoch 003 | Train Loss: 0.3640 | Train Accuracy: 0.8830 | Validation Loss: 0.3758 | Validation Accuracy: 0.8723 | Validation Mean Precision: 0.8008 | Validation Mean Recall: 0.8216 | Validation Mean F1_score: 0.8066 +2024-05-29 01:06:19 INFO: Epoch 004 | Train Loss: 0.3688 | Train Accuracy: 0.8807 | Validation Loss: 0.3599 | Validation Accuracy: 0.8967 | Validation Mean Precision: 0.7897 | Validation Mean Recall: 0.8373 | Validation Mean F1_score: 0.8084 +2024-05-29 01:06:21 INFO: Epoch 005 | Train Loss: 0.3604 | Train Accuracy: 0.8866 | Validation Loss: 0.3584 | Validation Accuracy: 0.8898 | Validation Mean Precision: 0.7989 | Validation Mean Recall: 0.8367 | Validation Mean F1_score: 0.8152 +2024-05-29 01:06:22 INFO: Epoch 006 | Train Loss: 0.3510 | Train Accuracy: 0.8886 | Validation Loss: 0.3690 | Validation Accuracy: 0.9078 | Validation Mean Precision: 0.8460 | Validation Mean Recall: 0.8215 | Validation Mean F1_score: 0.8331 +2024-05-29 01:06:23 INFO: Epoch 007 | Train Loss: 0.3486 | Train Accuracy: 0.8885 | Validation Loss: 0.3636 | Validation Accuracy: 0.8814 | Validation Mean Precision: 0.7616 | Validation Mean Recall: 0.8338 | Validation Mean F1_score: 0.7866 +2024-05-29 01:06:25 INFO: Epoch 008 | Train Loss: 0.3586 | Train Accuracy: 0.8884 | Validation Loss: 0.3995 | Validation Accuracy: 0.8584 | Validation Mean Precision: 0.6917 | Validation Mean Recall: 0.8266 | Validation Mean F1_score: 0.7349 +2024-05-29 01:06:27 INFO: Epoch 009 | Train Loss: 0.3516 | Train Accuracy: 0.8884 | Validation Loss: 0.3793 | Validation Accuracy: 0.9039 | Validation Mean Precision: 0.8564 | Validation Mean Recall: 0.7745 | Validation Mean F1_score: 0.8028 +2024-05-29 01:06:28 INFO: Epoch 010 | Train Loss: 0.3557 | Train Accuracy: 0.8906 | Validation Loss: 0.3648 | Validation Accuracy: 0.9109 | Validation Mean Precision: 0.8370 | Validation Mean Recall: 0.8359 | Validation Mean F1_score: 0.8339 +2024-05-29 01:06:30 INFO: Epoch 011 | Train Loss: 0.3502 | Train Accuracy: 0.8914 | Validation Loss: 0.3655 | Validation Accuracy: 0.8991 | Validation Mean Precision: 0.8369 | Validation Mean Recall: 0.8220 | Validation Mean F1_score: 0.8266 +2024-05-29 01:06:31 INFO: Epoch 012 | Train Loss: 0.3512 | Train Accuracy: 0.8910 | Validation Loss: 0.3420 | Validation Accuracy: 0.8987 | Validation Mean Precision: 0.7998 | Validation Mean Recall: 0.8412 | Validation Mean F1_score: 0.8182 +2024-05-29 01:06:33 INFO: Epoch 013 | Train Loss: 0.3408 | Train Accuracy: 0.8918 | Validation Loss: 0.3465 | Validation Accuracy: 0.8860 | Validation Mean Precision: 0.7539 | Validation Mean Recall: 0.8438 | Validation Mean F1_score: 0.7906 +2024-05-29 01:06:34 INFO: Epoch 014 | Train Loss: 0.3465 | Train Accuracy: 0.8917 | Validation Loss: 0.3924 | Validation Accuracy: 0.9097 | Validation Mean Precision: 0.8766 | Validation Mean Recall: 0.7619 | Validation Mean F1_score: 0.7906 +2024-05-29 01:06:36 INFO: Epoch 015 | Train Loss: 0.3374 | Train Accuracy: 0.8964 | Validation Loss: 0.3431 | Validation Accuracy: 0.9142 | Validation Mean Precision: 0.8497 | Validation Mean Recall: 0.8311 | Validation Mean F1_score: 0.8401 +2024-05-29 01:06:37 INFO: Epoch 016 | Train Loss: 0.3372 | Train Accuracy: 0.8997 | Validation Loss: 0.4301 | Validation Accuracy: 0.8781 | Validation Mean Precision: 0.8042 | Validation Mean Recall: 0.8120 | Validation Mean F1_score: 0.7946 +2024-05-29 01:06:39 INFO: Epoch 017 | Train Loss: 0.3339 | Train Accuracy: 0.9015 | Validation Loss: 0.3258 | Validation Accuracy: 0.9233 | Validation Mean Precision: 0.8430 | Validation Mean Recall: 0.8493 | Validation Mean F1_score: 0.8455 +2024-05-29 01:06:40 INFO: Epoch 018 | Train Loss: 0.3233 | Train Accuracy: 0.9027 | Validation Loss: 0.3266 | Validation Accuracy: 0.9305 | Validation Mean Precision: 0.8529 | Validation Mean Recall: 0.8462 | Validation Mean F1_score: 0.8489 +2024-05-29 01:06:42 INFO: Epoch 019 | Train Loss: 0.3175 | Train Accuracy: 0.9093 | Validation Loss: 0.3345 | Validation Accuracy: 0.8824 | Validation Mean Precision: 0.7621 | Validation Mean Recall: 0.8447 | Validation Mean F1_score: 0.7971 +2024-05-29 01:06:43 INFO: Epoch 020 | Train Loss: 0.3114 | Train Accuracy: 0.9082 | Validation Loss: 0.3168 | Validation Accuracy: 0.9193 | Validation Mean Precision: 0.8144 | Validation Mean Recall: 0.8507 | Validation Mean F1_score: 0.8309 +2024-05-29 01:06:44 INFO: Epoch 021 | Train Loss: 0.3086 | Train Accuracy: 0.9090 | Validation Loss: 0.3441 | Validation Accuracy: 0.9193 | Validation Mean Precision: 0.8698 | Validation Mean Recall: 0.8049 | Validation Mean F1_score: 0.8254 +2024-05-29 01:06:46 INFO: Epoch 022 | Train Loss: 0.3085 | Train Accuracy: 0.9097 | Validation Loss: 0.3579 | Validation Accuracy: 0.8594 | Validation Mean Precision: 0.7556 | Validation Mean Recall: 0.8371 | Validation Mean F1_score: 0.7891 +2024-05-29 01:06:47 INFO: Epoch 023 | Train Loss: 0.3063 | Train Accuracy: 0.9116 | Validation Loss: 0.3301 | Validation Accuracy: 0.9085 | Validation Mean Precision: 0.8656 | Validation Mean Recall: 0.8126 | Validation Mean F1_score: 0.8296 +2024-05-29 01:06:48 INFO: Epoch 024 | Train Loss: 0.3002 | Train Accuracy: 0.9138 | Validation Loss: 0.2995 | Validation Accuracy: 0.9346 | Validation Mean Precision: 0.8294 | Validation Mean Recall: 0.8622 | Validation Mean F1_score: 0.8429 +2024-05-29 01:06:50 INFO: Epoch 025 | Train Loss: 0.2980 | Train Accuracy: 0.9166 | Validation Loss: 0.3655 | Validation Accuracy: 0.8539 | Validation Mean Precision: 0.7530 | Validation Mean Recall: 0.8401 | Validation Mean F1_score: 0.7886 +2024-05-29 01:06:51 INFO: Epoch 026 | Train Loss: 0.2954 | Train Accuracy: 0.9175 | Validation Loss: 0.3148 | Validation Accuracy: 0.9046 | Validation Mean Precision: 0.7703 | Validation Mean Recall: 0.8515 | Validation Mean F1_score: 0.8023 +2024-05-29 01:06:53 INFO: Epoch 027 | Train Loss: 0.2933 | Train Accuracy: 0.9172 | Validation Loss: 0.3090 | Validation Accuracy: 0.9013 | Validation Mean Precision: 0.7660 | Validation Mean Recall: 0.8597 | Validation Mean F1_score: 0.8033 +2024-05-29 01:06:54 INFO: Epoch 028 | Train Loss: 0.2911 | Train Accuracy: 0.9197 | Validation Loss: 0.3001 | Validation Accuracy: 0.9149 | Validation Mean Precision: 0.7834 | Validation Mean Recall: 0.8644 | Validation Mean F1_score: 0.8166 +2024-05-29 01:06:56 INFO: Epoch 029 | Train Loss: 0.2878 | Train Accuracy: 0.9215 | Validation Loss: 0.2957 | Validation Accuracy: 0.9126 | Validation Mean Precision: 0.8348 | Validation Mean Recall: 0.8613 | Validation Mean F1_score: 0.8473 +2024-05-29 01:06:57 INFO: Epoch 030 | Train Loss: 0.2930 | Train Accuracy: 0.9195 | Validation Loss: 0.2962 | Validation Accuracy: 0.9427 | Validation Mean Precision: 0.8938 | Validation Mean Recall: 0.8603 | Validation Mean F1_score: 0.8759 +2024-05-29 01:06:59 INFO: Epoch 031 | Train Loss: 0.2880 | Train Accuracy: 0.9211 | Validation Loss: 0.2935 | Validation Accuracy: 0.9219 | Validation Mean Precision: 0.8076 | Validation Mean Recall: 0.8677 | Validation Mean F1_score: 0.8338 +2024-05-29 01:07:00 INFO: Epoch 032 | Train Loss: 0.2824 | Train Accuracy: 0.9232 | Validation Loss: 0.3298 | Validation Accuracy: 0.9447 | Validation Mean Precision: 0.9091 | Validation Mean Recall: 0.8462 | Validation Mean F1_score: 0.8727 +2024-05-29 01:07:02 INFO: Epoch 033 | Train Loss: 0.2837 | Train Accuracy: 0.9224 | Validation Loss: 0.2909 | Validation Accuracy: 0.9401 | Validation Mean Precision: 0.8588 | Validation Mean Recall: 0.8793 | Validation Mean F1_score: 0.8661 +2024-05-29 01:07:03 INFO: Epoch 034 | Train Loss: 0.2817 | Train Accuracy: 0.9224 | Validation Loss: 0.2925 | Validation Accuracy: 0.9286 | Validation Mean Precision: 0.8098 | Validation Mean Recall: 0.8709 | Validation Mean F1_score: 0.8354 +2024-05-29 01:07:04 INFO: Epoch 035 | Train Loss: 0.2828 | Train Accuracy: 0.9257 | Validation Loss: 0.3143 | Validation Accuracy: 0.9459 | Validation Mean Precision: 0.9279 | Validation Mean Recall: 0.8317 | Validation Mean F1_score: 0.8661 +2024-05-29 01:07:06 INFO: Epoch 036 | Train Loss: 0.2807 | Train Accuracy: 0.9251 | Validation Loss: 0.2908 | Validation Accuracy: 0.9142 | Validation Mean Precision: 0.7866 | Validation Mean Recall: 0.8656 | Validation Mean F1_score: 0.8195 +2024-05-29 01:07:08 INFO: Epoch 037 | Train Loss: 0.2707 | Train Accuracy: 0.9263 | Validation Loss: 0.2948 | Validation Accuracy: 0.8996 | Validation Mean Precision: 0.8118 | Validation Mean Recall: 0.8603 | Validation Mean F1_score: 0.8336 +2024-05-29 01:07:09 INFO: Epoch 038 | Train Loss: 0.2781 | Train Accuracy: 0.9269 | Validation Loss: 0.3149 | Validation Accuracy: 0.9408 | Validation Mean Precision: 0.8591 | Validation Mean Recall: 0.8720 | Validation Mean F1_score: 0.8644 +2024-05-29 01:07:11 INFO: Epoch 039 | Train Loss: 0.2825 | Train Accuracy: 0.9238 | Validation Loss: 0.2745 | Validation Accuracy: 0.9372 | Validation Mean Precision: 0.8428 | Validation Mean Recall: 0.8778 | Validation Mean F1_score: 0.8585 +2024-05-29 01:07:12 INFO: Epoch 040 | Train Loss: 0.2710 | Train Accuracy: 0.9251 | Validation Loss: 0.2770 | Validation Accuracy: 0.9382 | Validation Mean Precision: 0.8456 | Validation Mean Recall: 0.8808 | Validation Mean F1_score: 0.8608 +2024-05-29 01:07:14 INFO: Epoch 041 | Train Loss: 0.2737 | Train Accuracy: 0.9256 | Validation Loss: 0.2823 | Validation Accuracy: 0.9272 | Validation Mean Precision: 0.8186 | Validation Mean Recall: 0.8739 | Validation Mean F1_score: 0.8417 +2024-05-29 01:07:15 INFO: Epoch 042 | Train Loss: 0.2737 | Train Accuracy: 0.9262 | Validation Loss: 0.2772 | Validation Accuracy: 0.9332 | Validation Mean Precision: 0.8278 | Validation Mean Recall: 0.8764 | Validation Mean F1_score: 0.8484 +2024-05-29 01:07:17 INFO: Epoch 043 | Train Loss: 0.2708 | Train Accuracy: 0.9291 | Validation Loss: 0.2925 | Validation Accuracy: 0.9193 | Validation Mean Precision: 0.7864 | Validation Mean Recall: 0.8704 | Validation Mean F1_score: 0.8201 +2024-05-29 01:07:19 INFO: Epoch 044 | Train Loss: 0.2712 | Train Accuracy: 0.9275 | Validation Loss: 0.2971 | Validation Accuracy: 0.9413 | Validation Mean Precision: 0.8440 | Validation Mean Recall: 0.8748 | Validation Mean F1_score: 0.8531 +2024-05-29 01:07:20 INFO: Epoch 045 | Train Loss: 0.2637 | Train Accuracy: 0.9281 | Validation Loss: 0.2773 | Validation Accuracy: 0.9257 | Validation Mean Precision: 0.8128 | Validation Mean Recall: 0.8746 | Validation Mean F1_score: 0.8390 +2024-05-29 01:07:22 INFO: Epoch 046 | Train Loss: 0.2646 | Train Accuracy: 0.9314 | Validation Loss: 0.3151 | Validation Accuracy: 0.9384 | Validation Mean Precision: 0.8973 | Validation Mean Recall: 0.8465 | Validation Mean F1_score: 0.8643 +2024-05-29 01:07:24 INFO: Epoch 047 | Train Loss: 0.2746 | Train Accuracy: 0.9307 | Validation Loss: 0.2830 | Validation Accuracy: 0.9202 | Validation Mean Precision: 0.8222 | Validation Mean Recall: 0.8750 | Validation Mean F1_score: 0.8462 +2024-05-29 01:07:25 INFO: Epoch 048 | Train Loss: 0.2710 | Train Accuracy: 0.9300 | Validation Loss: 0.3276 | Validation Accuracy: 0.9408 | Validation Mean Precision: 0.8877 | Validation Mean Recall: 0.8459 | Validation Mean F1_score: 0.8653 +2024-05-29 01:07:27 INFO: Epoch 049 | Train Loss: 0.2664 | Train Accuracy: 0.9273 | Validation Loss: 0.2763 | Validation Accuracy: 0.9468 | Validation Mean Precision: 0.8783 | Validation Mean Recall: 0.8811 | Validation Mean F1_score: 0.8785 +2024-05-29 01:07:28 INFO: Epoch 050 | Train Loss: 0.2672 | Train Accuracy: 0.9310 | Validation Loss: 0.2751 | Validation Accuracy: 0.9360 | Validation Mean Precision: 0.8619 | Validation Mean Recall: 0.8758 | Validation Mean F1_score: 0.8685 +2024-05-29 01:07:30 INFO: Epoch 051 | Train Loss: 0.2631 | Train Accuracy: 0.9305 | Validation Loss: 0.3099 | Validation Accuracy: 0.9427 | Validation Mean Precision: 0.8857 | Validation Mean Recall: 0.8576 | Validation Mean F1_score: 0.8705 +2024-05-29 01:07:31 INFO: Epoch 052 | Train Loss: 0.2644 | Train Accuracy: 0.9319 | Validation Loss: 0.2810 | Validation Accuracy: 0.9281 | Validation Mean Precision: 0.8176 | Validation Mean Recall: 0.8737 | Validation Mean F1_score: 0.8406 +2024-05-29 01:07:32 INFO: Epoch 053 | Train Loss: 0.2651 | Train Accuracy: 0.9327 | Validation Loss: 0.2926 | Validation Accuracy: 0.9461 | Validation Mean Precision: 0.9038 | Validation Mean Recall: 0.8609 | Validation Mean F1_score: 0.8805 +2024-05-29 01:07:34 INFO: Epoch 054 | Train Loss: 0.2667 | Train Accuracy: 0.9330 | Validation Loss: 0.2811 | Validation Accuracy: 0.9267 | Validation Mean Precision: 0.8414 | Validation Mean Recall: 0.8662 | Validation Mean F1_score: 0.8523 +2024-05-29 01:07:35 INFO: Epoch 055 | Train Loss: 0.2633 | Train Accuracy: 0.9303 | Validation Loss: 0.2722 | Validation Accuracy: 0.9300 | Validation Mean Precision: 0.8459 | Validation Mean Recall: 0.8767 | Validation Mean F1_score: 0.8604 +2024-05-29 01:07:37 INFO: Epoch 056 | Train Loss: 0.2631 | Train Accuracy: 0.9333 | Validation Loss: 0.2820 | Validation Accuracy: 0.9406 | Validation Mean Precision: 0.8851 | Validation Mean Recall: 0.8645 | Validation Mean F1_score: 0.8727 +2024-05-29 01:07:38 INFO: Epoch 057 | Train Loss: 0.2571 | Train Accuracy: 0.9340 | Validation Loss: 0.2712 | Validation Accuracy: 0.9485 | Validation Mean Precision: 0.8676 | Validation Mean Recall: 0.8853 | Validation Mean F1_score: 0.8736 +2024-05-29 01:07:40 INFO: Epoch 058 | Train Loss: 0.2627 | Train Accuracy: 0.9320 | Validation Loss: 0.2894 | Validation Accuracy: 0.9403 | Validation Mean Precision: 0.8377 | Validation Mean Recall: 0.8681 | Validation Mean F1_score: 0.8471 +2024-05-29 01:07:41 INFO: Epoch 059 | Train Loss: 0.2638 | Train Accuracy: 0.9315 | Validation Loss: 0.2959 | Validation Accuracy: 0.9197 | Validation Mean Precision: 0.8363 | Validation Mean Recall: 0.8684 | Validation Mean F1_score: 0.8494 +2024-05-29 01:07:43 INFO: Epoch 060 | Train Loss: 0.2573 | Train Accuracy: 0.9353 | Validation Loss: 0.2799 | Validation Accuracy: 0.9485 | Validation Mean Precision: 0.8791 | Validation Mean Recall: 0.8676 | Validation Mean F1_score: 0.8729 +2024-05-29 01:07:45 INFO: Epoch 061 | Train Loss: 0.2565 | Train Accuracy: 0.9344 | Validation Loss: 0.2700 | Validation Accuracy: 0.9432 | Validation Mean Precision: 0.8607 | Validation Mean Recall: 0.8765 | Validation Mean F1_score: 0.8679 +2024-05-29 01:07:46 INFO: Epoch 062 | Train Loss: 0.2567 | Train Accuracy: 0.9355 | Validation Loss: 0.2701 | Validation Accuracy: 0.9329 | Validation Mean Precision: 0.8125 | Validation Mean Recall: 0.8743 | Validation Mean F1_score: 0.8380 +2024-05-29 01:07:48 INFO: Epoch 063 | Train Loss: 0.2568 | Train Accuracy: 0.9347 | Validation Loss: 0.2848 | Validation Accuracy: 0.9308 | Validation Mean Precision: 0.8642 | Validation Mean Recall: 0.8640 | Validation Mean F1_score: 0.8640 +2024-05-29 01:07:49 INFO: Epoch 064 | Train Loss: 0.2592 | Train Accuracy: 0.9347 | Validation Loss: 0.3028 | Validation Accuracy: 0.9502 | Validation Mean Precision: 0.9341 | Validation Mean Recall: 0.8443 | Validation Mean F1_score: 0.8780 +2024-05-29 01:07:51 INFO: Epoch 065 | Train Loss: 0.2563 | Train Accuracy: 0.9364 | Validation Loss: 0.2770 | Validation Accuracy: 0.9344 | Validation Mean Precision: 0.8393 | Validation Mean Recall: 0.8752 | Validation Mean F1_score: 0.8552 +2024-05-29 01:07:52 INFO: Epoch 066 | Train Loss: 0.2573 | Train Accuracy: 0.9366 | Validation Loss: 0.2776 | Validation Accuracy: 0.9377 | Validation Mean Precision: 0.8700 | Validation Mean Recall: 0.8737 | Validation Mean F1_score: 0.8718 +2024-05-29 01:07:54 INFO: Epoch 067 | Train Loss: 0.2579 | Train Accuracy: 0.9347 | Validation Loss: 0.2781 | Validation Accuracy: 0.9499 | Validation Mean Precision: 0.8977 | Validation Mean Recall: 0.8684 | Validation Mean F1_score: 0.8821 +2024-05-29 01:07:55 INFO: Epoch 068 | Train Loss: 0.2532 | Train Accuracy: 0.9356 | Validation Loss: 0.2768 | Validation Accuracy: 0.9327 | Validation Mean Precision: 0.8469 | Validation Mean Recall: 0.8583 | Validation Mean F1_score: 0.8522 +2024-05-29 01:07:57 INFO: Epoch 069 | Train Loss: 0.2602 | Train Accuracy: 0.9335 | Validation Loss: 0.2614 | Validation Accuracy: 0.9387 | Validation Mean Precision: 0.8516 | Validation Mean Recall: 0.8835 | Validation Mean F1_score: 0.8659 +2024-05-29 01:07:58 INFO: Epoch 070 | Train Loss: 0.2517 | Train Accuracy: 0.9378 | Validation Loss: 0.2627 | Validation Accuracy: 0.9451 | Validation Mean Precision: 0.8909 | Validation Mean Recall: 0.8638 | Validation Mean F1_score: 0.8762 +2024-05-29 01:08:00 INFO: Epoch 071 | Train Loss: 0.2524 | Train Accuracy: 0.9378 | Validation Loss: 0.3027 | Validation Accuracy: 0.9370 | Validation Mean Precision: 0.9020 | Validation Mean Recall: 0.8489 | Validation Mean F1_score: 0.8703 +2024-05-29 01:08:01 INFO: Epoch 072 | Train Loss: 0.2508 | Train Accuracy: 0.9387 | Validation Loss: 0.2622 | Validation Accuracy: 0.9339 | Validation Mean Precision: 0.8282 | Validation Mean Recall: 0.8786 | Validation Mean F1_score: 0.8501 +2024-05-29 01:08:02 INFO: Epoch 073 | Train Loss: 0.2510 | Train Accuracy: 0.9374 | Validation Loss: 0.3073 | Validation Accuracy: 0.9001 | Validation Mean Precision: 0.8304 | Validation Mean Recall: 0.8477 | Validation Mean F1_score: 0.8362 +2024-05-29 01:08:04 INFO: Epoch 074 | Train Loss: 0.2538 | Train Accuracy: 0.9381 | Validation Loss: 0.2730 | Validation Accuracy: 0.9241 | Validation Mean Precision: 0.8150 | Validation Mean Recall: 0.8734 | Validation Mean F1_score: 0.8408 +2024-05-29 01:08:05 INFO: Epoch 075 | Train Loss: 0.2461 | Train Accuracy: 0.9397 | Validation Loss: 0.2752 | Validation Accuracy: 0.9499 | Validation Mean Precision: 0.8718 | Validation Mean Recall: 0.8853 | Validation Mean F1_score: 0.8759 +2024-05-29 01:08:07 INFO: Epoch 076 | Train Loss: 0.2501 | Train Accuracy: 0.9390 | Validation Loss: 0.2890 | Validation Accuracy: 0.9511 | Validation Mean Precision: 0.8746 | Validation Mean Recall: 0.8827 | Validation Mean F1_score: 0.8767 +2024-05-29 01:08:08 INFO: Epoch 077 | Train Loss: 0.2499 | Train Accuracy: 0.9379 | Validation Loss: 0.2729 | Validation Accuracy: 0.9437 | Validation Mean Precision: 0.8866 | Validation Mean Recall: 0.8568 | Validation Mean F1_score: 0.8679 +2024-05-29 01:08:09 INFO: Epoch 078 | Train Loss: 0.2495 | Train Accuracy: 0.9379 | Validation Loss: 0.3090 | Validation Accuracy: 0.9430 | Validation Mean Precision: 0.8976 | Validation Mean Recall: 0.8496 | Validation Mean F1_score: 0.8678 +2024-05-29 01:08:11 INFO: Epoch 079 | Train Loss: 0.2597 | Train Accuracy: 0.9355 | Validation Loss: 0.2853 | Validation Accuracy: 0.9420 | Validation Mean Precision: 0.8788 | Validation Mean Recall: 0.8599 | Validation Mean F1_score: 0.8684 +2024-05-29 01:08:12 INFO: Epoch 080 | Train Loss: 0.2516 | Train Accuracy: 0.9388 | Validation Loss: 0.3153 | Validation Accuracy: 0.9459 | Validation Mean Precision: 0.8786 | Validation Mean Recall: 0.8645 | Validation Mean F1_score: 0.8669 +2024-05-29 01:08:14 INFO: Epoch 081 | Train Loss: 0.2436 | Train Accuracy: 0.9395 | Validation Loss: 0.2982 | Validation Accuracy: 0.9061 | Validation Mean Precision: 0.8083 | Validation Mean Recall: 0.8647 | Validation Mean F1_score: 0.8334 +2024-05-29 01:08:15 INFO: Epoch 082 | Train Loss: 0.2471 | Train Accuracy: 0.9388 | Validation Loss: 0.2890 | Validation Accuracy: 0.9478 | Validation Mean Precision: 0.8683 | Validation Mean Recall: 0.8676 | Validation Mean F1_score: 0.8639 +2024-05-29 01:08:17 INFO: Epoch 083 | Train Loss: 0.2451 | Train Accuracy: 0.9402 | Validation Loss: 0.2967 | Validation Accuracy: 0.9027 | Validation Mean Precision: 0.8015 | Validation Mean Recall: 0.8642 | Validation Mean F1_score: 0.8289 +2024-05-29 01:08:18 INFO: Epoch 084 | Train Loss: 0.2420 | Train Accuracy: 0.9386 | Validation Loss: 0.2831 | Validation Accuracy: 0.9523 | Validation Mean Precision: 0.8775 | Validation Mean Recall: 0.8854 | Validation Mean F1_score: 0.8786 +2024-05-29 01:08:20 INFO: Epoch 085 | Train Loss: 0.2547 | Train Accuracy: 0.9369 | Validation Loss: 0.2654 | Validation Accuracy: 0.9346 | Validation Mean Precision: 0.8498 | Validation Mean Recall: 0.8797 | Validation Mean F1_score: 0.8636 +2024-05-29 01:08:21 INFO: Epoch 086 | Train Loss: 0.2514 | Train Accuracy: 0.9384 | Validation Loss: 0.3007 | Validation Accuracy: 0.9082 | Validation Mean Precision: 0.8393 | Validation Mean Recall: 0.8697 | Validation Mean F1_score: 0.8536 +2024-05-29 01:08:22 INFO: Epoch 087 | Train Loss: 0.2424 | Train Accuracy: 0.9400 | Validation Loss: 0.3106 | Validation Accuracy: 0.9075 | Validation Mean Precision: 0.7938 | Validation Mean Recall: 0.8659 | Validation Mean F1_score: 0.8248 +2024-05-29 01:08:24 INFO: Epoch 088 | Train Loss: 0.2446 | Train Accuracy: 0.9409 | Validation Loss: 0.2821 | Validation Accuracy: 0.9511 | Validation Mean Precision: 0.8834 | Validation Mean Recall: 0.8685 | Validation Mean F1_score: 0.8756 +2024-05-29 01:08:25 INFO: Epoch 089 | Train Loss: 0.2482 | Train Accuracy: 0.9385 | Validation Loss: 0.2714 | Validation Accuracy: 0.9300 | Validation Mean Precision: 0.8420 | Validation Mean Recall: 0.8810 | Validation Mean F1_score: 0.8599 +2024-05-29 01:08:26 INFO: Epoch 090 | Train Loss: 0.2391 | Train Accuracy: 0.9412 | Validation Loss: 0.2766 | Validation Accuracy: 0.9253 | Validation Mean Precision: 0.8245 | Validation Mean Recall: 0.8741 | Validation Mean F1_score: 0.8466 +2024-05-29 01:08:28 INFO: Epoch 091 | Train Loss: 0.2444 | Train Accuracy: 0.9385 | Validation Loss: 0.2952 | Validation Accuracy: 0.9485 | Validation Mean Precision: 0.8953 | Validation Mean Recall: 0.8605 | Validation Mean F1_score: 0.8764 +2024-05-29 01:08:29 INFO: Epoch 092 | Train Loss: 0.2455 | Train Accuracy: 0.9415 | Validation Loss: 0.3181 | Validation Accuracy: 0.9097 | Validation Mean Precision: 0.8257 | Validation Mean Recall: 0.8678 | Validation Mean F1_score: 0.8453 +2024-05-29 01:08:31 INFO: Epoch 093 | Train Loss: 0.2396 | Train Accuracy: 0.9411 | Validation Loss: 0.2680 | Validation Accuracy: 0.9447 | Validation Mean Precision: 0.8448 | Validation Mean Recall: 0.8827 | Validation Mean F1_score: 0.8604 +2024-05-29 01:08:32 INFO: Epoch 094 | Train Loss: 0.2380 | Train Accuracy: 0.9434 | Validation Loss: 0.2805 | Validation Accuracy: 0.9408 | Validation Mean Precision: 0.8437 | Validation Mean Recall: 0.8829 | Validation Mean F1_score: 0.8607 +2024-05-29 01:08:34 INFO: Epoch 095 | Train Loss: 0.2412 | Train Accuracy: 0.9411 | Validation Loss: 0.2776 | Validation Accuracy: 0.9267 | Validation Mean Precision: 0.8410 | Validation Mean Recall: 0.8749 | Validation Mean F1_score: 0.8569 +2024-05-29 01:08:35 INFO: Epoch 096 | Train Loss: 0.2447 | Train Accuracy: 0.9393 | Validation Loss: 0.2868 | Validation Accuracy: 0.9478 | Validation Mean Precision: 0.8860 | Validation Mean Recall: 0.8736 | Validation Mean F1_score: 0.8790 +2024-05-29 01:08:37 INFO: Epoch 097 | Train Loss: 0.2447 | Train Accuracy: 0.9392 | Validation Loss: 0.2930 | Validation Accuracy: 0.9276 | Validation Mean Precision: 0.8495 | Validation Mean Recall: 0.8744 | Validation Mean F1_score: 0.8609 +2024-05-29 01:08:38 INFO: Epoch 098 | Train Loss: 0.2377 | Train Accuracy: 0.9417 | Validation Loss: 0.2798 | Validation Accuracy: 0.9483 | Validation Mean Precision: 0.8845 | Validation Mean Recall: 0.8865 | Validation Mean F1_score: 0.8851 +2024-05-29 01:08:40 INFO: Epoch 099 | Train Loss: 0.2369 | Train Accuracy: 0.9421 | Validation Loss: 0.2916 | Validation Accuracy: 0.9279 | Validation Mean Precision: 0.8261 | Validation Mean Recall: 0.8778 | Validation Mean F1_score: 0.8490 +2024-05-29 01:08:41 INFO: Epoch 100 | Train Loss: 0.2441 | Train Accuracy: 0.9405 | Validation Loss: 0.2857 | Validation Accuracy: 0.9497 | Validation Mean Precision: 0.9044 | Validation Mean Recall: 0.8552 | Validation Mean F1_score: 0.8778 +2024-05-29 01:08:42 INFO: Epoch 101 | Train Loss: 0.2394 | Train Accuracy: 0.9421 | Validation Loss: 0.2720 | Validation Accuracy: 0.9427 | Validation Mean Precision: 0.8477 | Validation Mean Recall: 0.8843 | Validation Mean F1_score: 0.8634 +2024-05-29 01:08:44 INFO: Epoch 102 | Train Loss: 0.2360 | Train Accuracy: 0.9436 | Validation Loss: 0.3173 | Validation Accuracy: 0.9554 | Validation Mean Precision: 0.9357 | Validation Mean Recall: 0.8516 | Validation Mean F1_score: 0.8851 +2024-05-29 01:08:45 INFO: Epoch 103 | Train Loss: 0.2453 | Train Accuracy: 0.9418 | Validation Loss: 0.2888 | Validation Accuracy: 0.9193 | Validation Mean Precision: 0.8438 | Validation Mean Recall: 0.8632 | Validation Mean F1_score: 0.8490 +2024-05-29 01:08:47 INFO: Epoch 104 | Train Loss: 0.2416 | Train Accuracy: 0.9428 | Validation Loss: 0.2814 | Validation Accuracy: 0.9499 | Validation Mean Precision: 0.8923 | Validation Mean Recall: 0.8646 | Validation Mean F1_score: 0.8769 +2024-05-29 01:08:48 INFO: Epoch 105 | Train Loss: 0.2352 | Train Accuracy: 0.9433 | Validation Loss: 0.2688 | Validation Accuracy: 0.9518 | Validation Mean Precision: 0.8917 | Validation Mean Recall: 0.8902 | Validation Mean F1_score: 0.8906 +2024-05-29 01:08:50 INFO: Epoch 106 | Train Loss: 0.2389 | Train Accuracy: 0.9411 | Validation Loss: 0.2652 | Validation Accuracy: 0.9430 | Validation Mean Precision: 0.8431 | Validation Mean Recall: 0.8823 | Validation Mean F1_score: 0.8598 +2024-05-29 01:08:51 INFO: Epoch 107 | Train Loss: 0.2376 | Train Accuracy: 0.9431 | Validation Loss: 0.3083 | Validation Accuracy: 0.9526 | Validation Mean Precision: 0.8946 | Validation Mean Recall: 0.8753 | Validation Mean F1_score: 0.8840 +2024-05-29 01:08:52 INFO: Epoch 108 | Train Loss: 0.2360 | Train Accuracy: 0.9435 | Validation Loss: 0.2626 | Validation Accuracy: 0.9471 | Validation Mean Precision: 0.8882 | Validation Mean Recall: 0.8715 | Validation Mean F1_score: 0.8792 +2024-05-29 01:08:54 INFO: Epoch 109 | Train Loss: 0.2354 | Train Accuracy: 0.9424 | Validation Loss: 0.2737 | Validation Accuracy: 0.9432 | Validation Mean Precision: 0.8633 | Validation Mean Recall: 0.8868 | Validation Mean F1_score: 0.8737 +2024-05-29 01:08:55 INFO: Epoch 110 | Train Loss: 0.2351 | Train Accuracy: 0.9440 | Validation Loss: 0.2690 | Validation Accuracy: 0.9533 | Validation Mean Precision: 0.8975 | Validation Mean Recall: 0.8797 | Validation Mean F1_score: 0.8882 +2024-05-29 01:08:57 INFO: Epoch 111 | Train Loss: 0.2378 | Train Accuracy: 0.9420 | Validation Loss: 0.3163 | Validation Accuracy: 0.9463 | Validation Mean Precision: 0.8949 | Validation Mean Recall: 0.8634 | Validation Mean F1_score: 0.8783 +2024-05-29 01:08:58 INFO: Epoch 112 | Train Loss: 0.2336 | Train Accuracy: 0.9429 | Validation Loss: 0.2854 | Validation Accuracy: 0.9449 | Validation Mean Precision: 0.8654 | Validation Mean Recall: 0.8679 | Validation Mean F1_score: 0.8661 +2024-05-29 01:08:59 INFO: Epoch 113 | Train Loss: 0.2371 | Train Accuracy: 0.9418 | Validation Loss: 0.2602 | Validation Accuracy: 0.9415 | Validation Mean Precision: 0.8678 | Validation Mean Recall: 0.8832 | Validation Mean F1_score: 0.8750 +2024-05-29 01:09:01 INFO: Epoch 114 | Train Loss: 0.2405 | Train Accuracy: 0.9430 | Validation Loss: 0.2923 | Validation Accuracy: 0.9526 | Validation Mean Precision: 0.9054 | Validation Mean Recall: 0.8668 | Validation Mean F1_score: 0.8843 +2024-05-29 01:09:02 INFO: Epoch 115 | Train Loss: 0.2383 | Train Accuracy: 0.9420 | Validation Loss: 0.2974 | Validation Accuracy: 0.9523 | Validation Mean Precision: 0.8905 | Validation Mean Recall: 0.8809 | Validation Mean F1_score: 0.8850 +2024-05-29 01:09:04 INFO: Epoch 116 | Train Loss: 0.2352 | Train Accuracy: 0.9421 | Validation Loss: 0.2949 | Validation Accuracy: 0.9483 | Validation Mean Precision: 0.8926 | Validation Mean Recall: 0.8773 | Validation Mean F1_score: 0.8845 +2024-05-29 01:09:05 INFO: Epoch 117 | Train Loss: 0.2295 | Train Accuracy: 0.9423 | Validation Loss: 0.2957 | Validation Accuracy: 0.9475 | Validation Mean Precision: 0.8692 | Validation Mean Recall: 0.8806 | Validation Mean F1_score: 0.8743 +2024-05-29 01:09:07 INFO: Epoch 118 | Train Loss: 0.2352 | Train Accuracy: 0.9419 | Validation Loss: 0.2967 | Validation Accuracy: 0.9423 | Validation Mean Precision: 0.8815 | Validation Mean Recall: 0.8578 | Validation Mean F1_score: 0.8684 +2024-05-29 01:09:08 INFO: Epoch 119 | Train Loss: 0.2330 | Train Accuracy: 0.9426 | Validation Loss: 0.2782 | Validation Accuracy: 0.9267 | Validation Mean Precision: 0.7955 | Validation Mean Recall: 0.8685 | Validation Mean F1_score: 0.8241 +2024-05-29 01:09:09 INFO: Epoch 120 | Train Loss: 0.2346 | Train Accuracy: 0.9435 | Validation Loss: 0.2898 | Validation Accuracy: 0.9509 | Validation Mean Precision: 0.8836 | Validation Mean Recall: 0.8824 | Validation Mean F1_score: 0.8825 +2024-05-29 01:09:11 INFO: Epoch 121 | Train Loss: 0.2317 | Train Accuracy: 0.9406 | Validation Loss: 0.2599 | Validation Accuracy: 0.9418 | Validation Mean Precision: 0.8615 | Validation Mean Recall: 0.8849 | Validation Mean F1_score: 0.8718 +2024-05-29 01:09:12 INFO: Epoch 122 | Train Loss: 0.2317 | Train Accuracy: 0.9433 | Validation Loss: 0.3046 | Validation Accuracy: 0.9538 | Validation Mean Precision: 0.9172 | Validation Mean Recall: 0.8648 | Validation Mean F1_score: 0.8887 +2024-05-29 01:09:14 INFO: Epoch 123 | Train Loss: 0.2369 | Train Accuracy: 0.9432 | Validation Loss: 0.2878 | Validation Accuracy: 0.9435 | Validation Mean Precision: 0.8843 | Validation Mean Recall: 0.8609 | Validation Mean F1_score: 0.8721 +2024-05-29 01:09:15 INFO: Epoch 124 | Train Loss: 0.2359 | Train Accuracy: 0.9421 | Validation Loss: 0.2757 | Validation Accuracy: 0.9418 | Validation Mean Precision: 0.8707 | Validation Mean Recall: 0.8850 | Validation Mean F1_score: 0.8775 +2024-05-29 01:09:16 INFO: Epoch 125 | Train Loss: 0.2291 | Train Accuracy: 0.9441 | Validation Loss: 0.2829 | Validation Accuracy: 0.9528 | Validation Mean Precision: 0.8847 | Validation Mean Recall: 0.8695 | Validation Mean F1_score: 0.8768 +2024-05-29 01:09:18 INFO: Epoch 126 | Train Loss: 0.2311 | Train Accuracy: 0.9438 | Validation Loss: 0.2883 | Validation Accuracy: 0.9516 | Validation Mean Precision: 0.8827 | Validation Mean Recall: 0.8722 | Validation Mean F1_score: 0.8769 +2024-05-29 01:09:19 INFO: Epoch 127 | Train Loss: 0.2359 | Train Accuracy: 0.9426 | Validation Loss: 0.2760 | Validation Accuracy: 0.9499 | Validation Mean Precision: 0.8837 | Validation Mean Recall: 0.8745 | Validation Mean F1_score: 0.8789 +2024-05-29 01:09:21 INFO: Epoch 128 | Train Loss: 0.2295 | Train Accuracy: 0.9463 | Validation Loss: 0.2796 | Validation Accuracy: 0.9442 | Validation Mean Precision: 0.8730 | Validation Mean Recall: 0.8767 | Validation Mean F1_score: 0.8746 +2024-05-29 01:09:22 INFO: Epoch 129 | Train Loss: 0.2364 | Train Accuracy: 0.9432 | Validation Loss: 0.2764 | Validation Accuracy: 0.9478 | Validation Mean Precision: 0.9033 | Validation Mean Recall: 0.8750 | Validation Mean F1_score: 0.8878 +2024-05-29 01:09:24 INFO: Epoch 130 | Train Loss: 0.2364 | Train Accuracy: 0.9417 | Validation Loss: 0.2771 | Validation Accuracy: 0.9494 | Validation Mean Precision: 0.8728 | Validation Mean Recall: 0.8905 | Validation Mean F1_score: 0.8803 +2024-05-29 01:09:25 INFO: Epoch 131 | Train Loss: 0.2376 | Train Accuracy: 0.9442 | Validation Loss: 0.2667 | Validation Accuracy: 0.9490 | Validation Mean Precision: 0.8756 | Validation Mean Recall: 0.8862 | Validation Mean F1_score: 0.8801 +2024-05-29 01:09:27 INFO: Epoch 132 | Train Loss: 0.2263 | Train Accuracy: 0.9450 | Validation Loss: 0.3103 | Validation Accuracy: 0.9535 | Validation Mean Precision: 0.8947 | Validation Mean Recall: 0.8818 | Validation Mean F1_score: 0.8875 +2024-05-29 01:09:28 INFO: Epoch 133 | Train Loss: 0.2348 | Train Accuracy: 0.9429 | Validation Loss: 0.2708 | Validation Accuracy: 0.9379 | Validation Mean Precision: 0.8562 | Validation Mean Recall: 0.8815 | Validation Mean F1_score: 0.8666 +2024-05-29 01:09:30 INFO: Epoch 134 | Train Loss: 0.2355 | Train Accuracy: 0.9433 | Validation Loss: 0.3033 | Validation Accuracy: 0.9356 | Validation Mean Precision: 0.8828 | Validation Mean Recall: 0.8483 | Validation Mean F1_score: 0.8617 +2024-05-29 01:09:31 INFO: Epoch 135 | Train Loss: 0.2343 | Train Accuracy: 0.9430 | Validation Loss: 0.2929 | Validation Accuracy: 0.9554 | Validation Mean Precision: 0.9127 | Validation Mean Recall: 0.8739 | Validation Mean F1_score: 0.8918 +2024-05-29 01:09:33 INFO: Epoch 136 | Train Loss: 0.2328 | Train Accuracy: 0.9437 | Validation Loss: 0.2694 | Validation Accuracy: 0.9478 | Validation Mean Precision: 0.8926 | Validation Mean Recall: 0.8659 | Validation Mean F1_score: 0.8773 +2024-05-29 01:09:34 INFO: Epoch 137 | Train Loss: 0.2263 | Train Accuracy: 0.9457 | Validation Loss: 0.3113 | Validation Accuracy: 0.9533 | Validation Mean Precision: 0.9083 | Validation Mean Recall: 0.8547 | Validation Mean F1_score: 0.8789 +2024-05-29 01:09:35 INFO: Epoch 138 | Train Loss: 0.2282 | Train Accuracy: 0.9449 | Validation Loss: 0.3070 | Validation Accuracy: 0.9540 | Validation Mean Precision: 0.8865 | Validation Mean Recall: 0.8901 | Validation Mean F1_score: 0.8864 +2024-05-29 01:09:37 INFO: Epoch 139 | Train Loss: 0.2246 | Train Accuracy: 0.9457 | Validation Loss: 0.2966 | Validation Accuracy: 0.9408 | Validation Mean Precision: 0.8537 | Validation Mean Recall: 0.8867 | Validation Mean F1_score: 0.8683 +2024-05-29 01:09:38 INFO: Epoch 140 | Train Loss: 0.2394 | Train Accuracy: 0.9415 | Validation Loss: 0.3025 | Validation Accuracy: 0.9459 | Validation Mean Precision: 0.8786 | Validation Mean Recall: 0.8632 | Validation Mean F1_score: 0.8692 +2024-05-29 01:09:39 INFO: Epoch 141 | Train Loss: 0.2264 | Train Accuracy: 0.9451 | Validation Loss: 0.3347 | Validation Accuracy: 0.9142 | Validation Mean Precision: 0.8398 | Validation Mean Recall: 0.8613 | Validation Mean F1_score: 0.8476 +2024-05-29 01:09:41 INFO: Epoch 142 | Train Loss: 0.2311 | Train Accuracy: 0.9445 | Validation Loss: 0.3079 | Validation Accuracy: 0.9411 | Validation Mean Precision: 0.8551 | Validation Mean Recall: 0.8717 | Validation Mean F1_score: 0.8614 +2024-05-29 01:09:42 INFO: Epoch 143 | Train Loss: 0.2273 | Train Accuracy: 0.9443 | Validation Loss: 0.2940 | Validation Accuracy: 0.9415 | Validation Mean Precision: 0.8405 | Validation Mean Recall: 0.8832 | Validation Mean F1_score: 0.8584 +2024-05-29 01:09:44 INFO: Epoch 144 | Train Loss: 0.2301 | Train Accuracy: 0.9426 | Validation Loss: 0.2795 | Validation Accuracy: 0.9423 | Validation Mean Precision: 0.8480 | Validation Mean Recall: 0.8835 | Validation Mean F1_score: 0.8631 +2024-05-29 01:09:45 INFO: Epoch 145 | Train Loss: 0.2287 | Train Accuracy: 0.9466 | Validation Loss: 0.2916 | Validation Accuracy: 0.9423 | Validation Mean Precision: 0.8783 | Validation Mean Recall: 0.8773 | Validation Mean F1_score: 0.8776 +2024-05-29 01:09:46 INFO: Epoch 146 | Train Loss: 0.2211 | Train Accuracy: 0.9451 | Validation Loss: 0.2923 | Validation Accuracy: 0.9523 | Validation Mean Precision: 0.8744 | Validation Mean Recall: 0.8823 | Validation Mean F1_score: 0.8773 +2024-05-29 01:09:48 INFO: Epoch 147 | Train Loss: 0.2251 | Train Accuracy: 0.9453 | Validation Loss: 0.2950 | Validation Accuracy: 0.9389 | Validation Mean Precision: 0.8420 | Validation Mean Recall: 0.8840 | Validation Mean F1_score: 0.8605 +2024-05-29 01:09:49 INFO: Epoch 148 | Train Loss: 0.2266 | Train Accuracy: 0.9455 | Validation Loss: 0.3134 | Validation Accuracy: 0.9547 | Validation Mean Precision: 0.9031 | Validation Mean Recall: 0.8579 | Validation Mean F1_score: 0.8784 +2024-05-29 01:09:51 INFO: Epoch 149 | Train Loss: 0.2201 | Train Accuracy: 0.9451 | Validation Loss: 0.3001 | Validation Accuracy: 0.9509 | Validation Mean Precision: 0.8832 | Validation Mean Recall: 0.8781 | Validation Mean F1_score: 0.8803 +2024-05-29 01:09:52 INFO: Epoch 150 | Train Loss: 0.2248 | Train Accuracy: 0.9472 | Validation Loss: 0.2832 | Validation Accuracy: 0.9423 | Validation Mean Precision: 0.8776 | Validation Mean Recall: 0.8634 | Validation Mean F1_score: 0.8686 +2024-05-29 01:09:52 INFO: Best Validation F1 Score (Macro): 0.8918 +2024-05-29 01:09:52 INFO: Best Validation Recall (Macro): 0.8739 +2024-05-29 01:09:52 INFO: Best Validation Precision (Macro): 0.9127 +2024-05-29 01:09:52 INFO: Best Epoch: 135 +2024-05-29 01:09:53 INFO: Infer Result: +2024-05-29 01:09:53 INFO: Prediction errors: 276 +2024-05-29 01:09:53 INFO: Prediction error percentage: 5.29% +2024-05-29 01:09:53 INFO: Total samples: 5218 +2024-05-29 01:09:53 INFO: Infer Result End: +2024-05-29 01:09:54 INFO: Class weights: tensor([21.1878, 3.1149, 0.7420, 0.4378], device='cuda:0') +2024-05-29 01:09:55 INFO: Epoch 001 | Train Loss: 0.7153 | Train Accuracy: 0.7340 | Validation Loss: 0.3855 | Validation Accuracy: 0.8579 | Validation Mean Precision: 0.7364 | Validation Mean Recall: 0.8465 | Validation Mean F1_score: 0.7803 +2024-05-29 01:09:57 INFO: Epoch 002 | Train Loss: 0.3869 | Train Accuracy: 0.8727 | Validation Loss: 0.3771 | Validation Accuracy: 0.8960 | Validation Mean Precision: 0.8236 | Validation Mean Recall: 0.8232 | Validation Mean F1_score: 0.8229 +2024-05-29 01:09:58 INFO: Epoch 003 | Train Loss: 0.3729 | Train Accuracy: 0.8802 | Validation Loss: 0.3644 | Validation Accuracy: 0.8915 | Validation Mean Precision: 0.8278 | Validation Mean Recall: 0.8135 | Validation Mean F1_score: 0.8188 +2024-05-29 01:10:00 INFO: Epoch 004 | Train Loss: 0.3626 | Train Accuracy: 0.8838 | Validation Loss: 0.3687 | Validation Accuracy: 0.8912 | Validation Mean Precision: 0.8143 | Validation Mean Recall: 0.8141 | Validation Mean F1_score: 0.8088 +2024-05-29 01:10:01 INFO: Epoch 005 | Train Loss: 0.3617 | Train Accuracy: 0.8846 | Validation Loss: 0.3838 | Validation Accuracy: 0.8994 | Validation Mean Precision: 0.8640 | Validation Mean Recall: 0.7868 | Validation Mean F1_score: 0.8173 +2024-05-29 01:10:03 INFO: Epoch 006 | Train Loss: 0.3598 | Train Accuracy: 0.8884 | Validation Loss: 0.3625 | Validation Accuracy: 0.8797 | Validation Mean Precision: 0.8158 | Validation Mean Recall: 0.8171 | Validation Mean F1_score: 0.8122 +2024-05-29 01:10:04 INFO: Epoch 007 | Train Loss: 0.3538 | Train Accuracy: 0.8877 | Validation Loss: 0.3807 | Validation Accuracy: 0.9011 | Validation Mean Precision: 0.8244 | Validation Mean Recall: 0.8377 | Validation Mean F1_score: 0.8253 +2024-05-29 01:10:06 INFO: Epoch 008 | Train Loss: 0.3549 | Train Accuracy: 0.8872 | Validation Loss: 0.3486 | Validation Accuracy: 0.8977 | Validation Mean Precision: 0.8069 | Validation Mean Recall: 0.8500 | Validation Mean F1_score: 0.8255 +2024-05-29 01:10:07 INFO: Epoch 009 | Train Loss: 0.3569 | Train Accuracy: 0.8903 | Validation Loss: 0.3481 | Validation Accuracy: 0.9042 | Validation Mean Precision: 0.8344 | Validation Mean Recall: 0.8363 | Validation Mean F1_score: 0.8353 +2024-05-29 01:10:09 INFO: Epoch 010 | Train Loss: 0.3561 | Train Accuracy: 0.8857 | Validation Loss: 0.3606 | Validation Accuracy: 0.8939 | Validation Mean Precision: 0.7999 | Validation Mean Recall: 0.8533 | Validation Mean F1_score: 0.8184 +2024-05-29 01:10:10 INFO: Epoch 011 | Train Loss: 0.3514 | Train Accuracy: 0.8919 | Validation Loss: 0.3448 | Validation Accuracy: 0.8963 | Validation Mean Precision: 0.8194 | Validation Mean Recall: 0.8499 | Validation Mean F1_score: 0.8338 +2024-05-29 01:10:11 INFO: Epoch 012 | Train Loss: 0.3464 | Train Accuracy: 0.8920 | Validation Loss: 0.4253 | Validation Accuracy: 0.8244 | Validation Mean Precision: 0.7776 | Validation Mean Recall: 0.8241 | Validation Mean F1_score: 0.7930 +2024-05-29 01:10:13 INFO: Epoch 013 | Train Loss: 0.3534 | Train Accuracy: 0.8903 | Validation Loss: 0.3526 | Validation Accuracy: 0.9063 | Validation Mean Precision: 0.8406 | Validation Mean Recall: 0.8238 | Validation Mean F1_score: 0.8318 +2024-05-29 01:10:14 INFO: Epoch 014 | Train Loss: 0.3552 | Train Accuracy: 0.8912 | Validation Loss: 0.3485 | Validation Accuracy: 0.8864 | Validation Mean Precision: 0.8004 | Validation Mean Recall: 0.8515 | Validation Mean F1_score: 0.8229 +2024-05-29 01:10:16 INFO: Epoch 015 | Train Loss: 0.3518 | Train Accuracy: 0.8903 | Validation Loss: 0.3456 | Validation Accuracy: 0.8970 | Validation Mean Precision: 0.8218 | Validation Mean Recall: 0.8341 | Validation Mean F1_score: 0.8272 +2024-05-29 01:10:17 INFO: Epoch 016 | Train Loss: 0.3447 | Train Accuracy: 0.8915 | Validation Loss: 0.3723 | Validation Accuracy: 0.8953 | Validation Mean Precision: 0.8107 | Validation Mean Recall: 0.8414 | Validation Mean F1_score: 0.8198 +2024-05-29 01:10:19 INFO: Epoch 017 | Train Loss: 0.3465 | Train Accuracy: 0.8955 | Validation Loss: 0.3739 | Validation Accuracy: 0.9003 | Validation Mean Precision: 0.8512 | Validation Mean Recall: 0.8323 | Validation Mean F1_score: 0.8394 +2024-05-29 01:10:20 INFO: Epoch 018 | Train Loss: 0.3487 | Train Accuracy: 0.8912 | Validation Loss: 0.3505 | Validation Accuracy: 0.9015 | Validation Mean Precision: 0.8415 | Validation Mean Recall: 0.8071 | Validation Mean F1_score: 0.8215 +2024-05-29 01:10:22 INFO: Epoch 019 | Train Loss: 0.3456 | Train Accuracy: 0.8959 | Validation Loss: 0.3628 | Validation Accuracy: 0.8893 | Validation Mean Precision: 0.8132 | Validation Mean Recall: 0.8352 | Validation Mean F1_score: 0.8177 +2024-05-29 01:10:23 INFO: Epoch 020 | Train Loss: 0.3460 | Train Accuracy: 0.8949 | Validation Loss: 0.3566 | Validation Accuracy: 0.8860 | Validation Mean Precision: 0.7617 | Validation Mean Recall: 0.8656 | Validation Mean F1_score: 0.8009 +2024-05-29 01:10:25 INFO: Epoch 021 | Train Loss: 0.3447 | Train Accuracy: 0.8946 | Validation Loss: 0.3573 | Validation Accuracy: 0.9051 | Validation Mean Precision: 0.8354 | Validation Mean Recall: 0.8056 | Validation Mean F1_score: 0.8175 +2024-05-29 01:10:26 INFO: Epoch 022 | Train Loss: 0.3391 | Train Accuracy: 0.8954 | Validation Loss: 0.3559 | Validation Accuracy: 0.9034 | Validation Mean Precision: 0.7991 | Validation Mean Recall: 0.8563 | Validation Mean F1_score: 0.8178 +2024-05-29 01:10:28 INFO: Epoch 023 | Train Loss: 0.3366 | Train Accuracy: 0.8990 | Validation Loss: 0.3500 | Validation Accuracy: 0.9116 | Validation Mean Precision: 0.8469 | Validation Mean Recall: 0.8488 | Validation Mean F1_score: 0.8458 +2024-05-29 01:10:30 INFO: Epoch 024 | Train Loss: 0.3260 | Train Accuracy: 0.9006 | Validation Loss: 0.3413 | Validation Accuracy: 0.8886 | Validation Mean Precision: 0.8000 | Validation Mean Recall: 0.8478 | Validation Mean F1_score: 0.8180 +2024-05-29 01:10:31 INFO: Epoch 025 | Train Loss: 0.3264 | Train Accuracy: 0.9026 | Validation Loss: 0.3468 | Validation Accuracy: 0.8840 | Validation Mean Precision: 0.8166 | Validation Mean Recall: 0.8548 | Validation Mean F1_score: 0.8311 +2024-05-29 01:10:33 INFO: Epoch 026 | Train Loss: 0.3199 | Train Accuracy: 0.9057 | Validation Loss: 0.3456 | Validation Accuracy: 0.9188 | Validation Mean Precision: 0.8186 | Validation Mean Recall: 0.8632 | Validation Mean F1_score: 0.8298 +2024-05-29 01:10:34 INFO: Epoch 027 | Train Loss: 0.3121 | Train Accuracy: 0.9085 | Validation Loss: 0.3176 | Validation Accuracy: 0.9229 | Validation Mean Precision: 0.8549 | Validation Mean Recall: 0.8609 | Validation Mean F1_score: 0.8577 +2024-05-29 01:10:36 INFO: Epoch 028 | Train Loss: 0.3128 | Train Accuracy: 0.9088 | Validation Loss: 0.3313 | Validation Accuracy: 0.9030 | Validation Mean Precision: 0.8433 | Validation Mean Recall: 0.8171 | Validation Mean F1_score: 0.8277 +2024-05-29 01:10:37 INFO: Epoch 029 | Train Loss: 0.3048 | Train Accuracy: 0.9121 | Validation Loss: 0.3351 | Validation Accuracy: 0.8896 | Validation Mean Precision: 0.8207 | Validation Mean Recall: 0.8580 | Validation Mean F1_score: 0.8375 +2024-05-29 01:10:39 INFO: Epoch 030 | Train Loss: 0.3070 | Train Accuracy: 0.9118 | Validation Loss: 0.3896 | Validation Accuracy: 0.9308 | Validation Mean Precision: 0.9174 | Validation Mean Recall: 0.7874 | Validation Mean F1_score: 0.8335 +2024-05-29 01:10:41 INFO: Epoch 031 | Train Loss: 0.3086 | Train Accuracy: 0.9126 | Validation Loss: 0.3215 | Validation Accuracy: 0.9272 | Validation Mean Precision: 0.8323 | Validation Mean Recall: 0.8757 | Validation Mean F1_score: 0.8484 +2024-05-29 01:10:42 INFO: Epoch 032 | Train Loss: 0.2959 | Train Accuracy: 0.9132 | Validation Loss: 0.3049 | Validation Accuracy: 0.9166 | Validation Mean Precision: 0.8345 | Validation Mean Recall: 0.8784 | Validation Mean F1_score: 0.8547 +2024-05-29 01:10:44 INFO: Epoch 033 | Train Loss: 0.3047 | Train Accuracy: 0.9145 | Validation Loss: 0.3062 | Validation Accuracy: 0.9281 | Validation Mean Precision: 0.8512 | Validation Mean Recall: 0.8437 | Validation Mean F1_score: 0.8453 +2024-05-29 01:10:45 INFO: Epoch 034 | Train Loss: 0.2985 | Train Accuracy: 0.9163 | Validation Loss: 0.3060 | Validation Accuracy: 0.9193 | Validation Mean Precision: 0.8429 | Validation Mean Recall: 0.8732 | Validation Mean F1_score: 0.8570 +2024-05-29 01:10:47 INFO: Epoch 035 | Train Loss: 0.2927 | Train Accuracy: 0.9151 | Validation Loss: 0.3039 | Validation Accuracy: 0.9138 | Validation Mean Precision: 0.8351 | Validation Mean Recall: 0.8775 | Validation Mean F1_score: 0.8543 +2024-05-29 01:10:48 INFO: Epoch 036 | Train Loss: 0.2896 | Train Accuracy: 0.9177 | Validation Loss: 0.3140 | Validation Accuracy: 0.9322 | Validation Mean Precision: 0.8434 | Validation Mean Recall: 0.8705 | Validation Mean F1_score: 0.8519 +2024-05-29 01:10:50 INFO: Epoch 037 | Train Loss: 0.2899 | Train Accuracy: 0.9188 | Validation Loss: 0.3012 | Validation Accuracy: 0.9176 | Validation Mean Precision: 0.8340 | Validation Mean Recall: 0.8794 | Validation Mean F1_score: 0.8539 +2024-05-29 01:10:51 INFO: Epoch 038 | Train Loss: 0.2863 | Train Accuracy: 0.9207 | Validation Loss: 0.3030 | Validation Accuracy: 0.9231 | Validation Mean Precision: 0.8070 | Validation Mean Recall: 0.8945 | Validation Mean F1_score: 0.8400 +2024-05-29 01:10:53 INFO: Epoch 039 | Train Loss: 0.2907 | Train Accuracy: 0.9194 | Validation Loss: 0.3020 | Validation Accuracy: 0.9250 | Validation Mean Precision: 0.8040 | Validation Mean Recall: 0.8742 | Validation Mean F1_score: 0.8310 +2024-05-29 01:10:54 INFO: Epoch 040 | Train Loss: 0.2924 | Train Accuracy: 0.9205 | Validation Loss: 0.2926 | Validation Accuracy: 0.9190 | Validation Mean Precision: 0.8339 | Validation Mean Recall: 0.8848 | Validation Mean F1_score: 0.8564 +2024-05-29 01:10:55 INFO: Epoch 041 | Train Loss: 0.2851 | Train Accuracy: 0.9194 | Validation Loss: 0.2905 | Validation Accuracy: 0.9372 | Validation Mean Precision: 0.8701 | Validation Mean Recall: 0.8803 | Validation Mean F1_score: 0.8746 +2024-05-29 01:10:57 INFO: Epoch 042 | Train Loss: 0.2851 | Train Accuracy: 0.9224 | Validation Loss: 0.2880 | Validation Accuracy: 0.9351 | Validation Mean Precision: 0.8657 | Validation Mean Recall: 0.8688 | Validation Mean F1_score: 0.8664 +2024-05-29 01:10:58 INFO: Epoch 043 | Train Loss: 0.2797 | Train Accuracy: 0.9250 | Validation Loss: 0.3238 | Validation Accuracy: 0.8979 | Validation Mean Precision: 0.8217 | Validation Mean Recall: 0.8565 | Validation Mean F1_score: 0.8367 +2024-05-29 01:11:00 INFO: Epoch 044 | Train Loss: 0.2775 | Train Accuracy: 0.9228 | Validation Loss: 0.2947 | Validation Accuracy: 0.9193 | Validation Mean Precision: 0.8022 | Validation Mean Recall: 0.8744 | Validation Mean F1_score: 0.8306 +2024-05-29 01:11:02 INFO: Epoch 045 | Train Loss: 0.2753 | Train Accuracy: 0.9261 | Validation Loss: 0.2843 | Validation Accuracy: 0.9363 | Validation Mean Precision: 0.8575 | Validation Mean Recall: 0.8772 | Validation Mean F1_score: 0.8659 +2024-05-29 01:11:03 INFO: Epoch 046 | Train Loss: 0.2702 | Train Accuracy: 0.9260 | Validation Loss: 0.3121 | Validation Accuracy: 0.9334 | Validation Mean Precision: 0.8922 | Validation Mean Recall: 0.8340 | Validation Mean F1_score: 0.8572 +2024-05-29 01:11:05 INFO: Epoch 047 | Train Loss: 0.2709 | Train Accuracy: 0.9273 | Validation Loss: 0.2895 | Validation Accuracy: 0.9391 | Validation Mean Precision: 0.8918 | Validation Mean Recall: 0.8594 | Validation Mean F1_score: 0.8749 +2024-05-29 01:11:06 INFO: Epoch 048 | Train Loss: 0.2790 | Train Accuracy: 0.9240 | Validation Loss: 0.2837 | Validation Accuracy: 0.9425 | Validation Mean Precision: 0.8962 | Validation Mean Recall: 0.8756 | Validation Mean F1_score: 0.8851 +2024-05-29 01:11:08 INFO: Epoch 049 | Train Loss: 0.2739 | Train Accuracy: 0.9266 | Validation Loss: 0.2945 | Validation Accuracy: 0.9123 | Validation Mean Precision: 0.7993 | Validation Mean Recall: 0.8767 | Validation Mean F1_score: 0.8307 +2024-05-29 01:11:09 INFO: Epoch 050 | Train Loss: 0.2743 | Train Accuracy: 0.9259 | Validation Loss: 0.2828 | Validation Accuracy: 0.9217 | Validation Mean Precision: 0.8427 | Validation Mean Recall: 0.8726 | Validation Mean F1_score: 0.8566 +2024-05-29 01:11:11 INFO: Epoch 051 | Train Loss: 0.2698 | Train Accuracy: 0.9280 | Validation Loss: 0.2861 | Validation Accuracy: 0.9152 | Validation Mean Precision: 0.8464 | Validation Mean Recall: 0.8744 | Validation Mean F1_score: 0.8596 +2024-05-29 01:11:12 INFO: Epoch 052 | Train Loss: 0.2723 | Train Accuracy: 0.9254 | Validation Loss: 0.2761 | Validation Accuracy: 0.9341 | Validation Mean Precision: 0.8384 | Validation Mean Recall: 0.9002 | Validation Mean F1_score: 0.8632 +2024-05-29 01:11:14 INFO: Epoch 053 | Train Loss: 0.2654 | Train Accuracy: 0.9287 | Validation Loss: 0.2775 | Validation Accuracy: 0.9439 | Validation Mean Precision: 0.9045 | Validation Mean Recall: 0.8643 | Validation Mean F1_score: 0.8826 +2024-05-29 01:11:15 INFO: Epoch 054 | Train Loss: 0.2657 | Train Accuracy: 0.9287 | Validation Loss: 0.2999 | Validation Accuracy: 0.9044 | Validation Mean Precision: 0.8346 | Validation Mean Recall: 0.8505 | Validation Mean F1_score: 0.8404 +2024-05-29 01:11:17 INFO: Epoch 055 | Train Loss: 0.2673 | Train Accuracy: 0.9313 | Validation Loss: 0.2771 | Validation Accuracy: 0.9401 | Validation Mean Precision: 0.8600 | Validation Mean Recall: 0.8788 | Validation Mean F1_score: 0.8675 +2024-05-29 01:11:18 INFO: Epoch 056 | Train Loss: 0.2655 | Train Accuracy: 0.9294 | Validation Loss: 0.2879 | Validation Accuracy: 0.9420 | Validation Mean Precision: 0.8785 | Validation Mean Recall: 0.8743 | Validation Mean F1_score: 0.8739 +2024-05-29 01:11:19 INFO: Epoch 057 | Train Loss: 0.2641 | Train Accuracy: 0.9294 | Validation Loss: 0.2677 | Validation Accuracy: 0.9305 | Validation Mean Precision: 0.8363 | Validation Mean Recall: 0.8826 | Validation Mean F1_score: 0.8563 +2024-05-29 01:11:21 INFO: Epoch 058 | Train Loss: 0.2594 | Train Accuracy: 0.9315 | Validation Loss: 0.2707 | Validation Accuracy: 0.9260 | Validation Mean Precision: 0.8238 | Validation Mean Recall: 0.8940 | Validation Mean F1_score: 0.8536 +2024-05-29 01:11:22 INFO: Epoch 059 | Train Loss: 0.2617 | Train Accuracy: 0.9338 | Validation Loss: 0.2643 | Validation Accuracy: 0.9379 | Validation Mean Precision: 0.8479 | Validation Mean Recall: 0.8942 | Validation Mean F1_score: 0.8659 +2024-05-29 01:11:24 INFO: Epoch 060 | Train Loss: 0.2569 | Train Accuracy: 0.9321 | Validation Loss: 0.2638 | Validation Accuracy: 0.9430 | Validation Mean Precision: 0.8675 | Validation Mean Recall: 0.8817 | Validation Mean F1_score: 0.8726 +2024-05-29 01:11:26 INFO: Epoch 061 | Train Loss: 0.2625 | Train Accuracy: 0.9306 | Validation Loss: 0.3039 | Validation Accuracy: 0.9336 | Validation Mean Precision: 0.8855 | Validation Mean Recall: 0.8657 | Validation Mean F1_score: 0.8732 +2024-05-29 01:11:27 INFO: Epoch 062 | Train Loss: 0.2603 | Train Accuracy: 0.9309 | Validation Loss: 0.2673 | Validation Accuracy: 0.9274 | Validation Mean Precision: 0.8403 | Validation Mean Recall: 0.8833 | Validation Mean F1_score: 0.8599 +2024-05-29 01:11:29 INFO: Epoch 063 | Train Loss: 0.2590 | Train Accuracy: 0.9335 | Validation Loss: 0.2725 | Validation Accuracy: 0.9439 | Validation Mean Precision: 0.9112 | Validation Mean Recall: 0.8662 | Validation Mean F1_score: 0.8867 +2024-05-29 01:11:30 INFO: Epoch 064 | Train Loss: 0.2616 | Train Accuracy: 0.9327 | Validation Loss: 0.2650 | Validation Accuracy: 0.9365 | Validation Mean Precision: 0.8602 | Validation Mean Recall: 0.8991 | Validation Mean F1_score: 0.8761 +2024-05-29 01:11:32 INFO: Epoch 065 | Train Loss: 0.2493 | Train Accuracy: 0.9362 | Validation Loss: 0.2712 | Validation Accuracy: 0.9442 | Validation Mean Precision: 0.8534 | Validation Mean Recall: 0.8945 | Validation Mean F1_score: 0.8651 +2024-05-29 01:11:33 INFO: Epoch 066 | Train Loss: 0.2582 | Train Accuracy: 0.9297 | Validation Loss: 0.2670 | Validation Accuracy: 0.9415 | Validation Mean Precision: 0.8514 | Validation Mean Recall: 0.8869 | Validation Mean F1_score: 0.8645 +2024-05-29 01:11:35 INFO: Epoch 067 | Train Loss: 0.2598 | Train Accuracy: 0.9332 | Validation Loss: 0.2765 | Validation Accuracy: 0.9197 | Validation Mean Precision: 0.8676 | Validation Mean Recall: 0.8667 | Validation Mean F1_score: 0.8670 +2024-05-29 01:11:36 INFO: Epoch 068 | Train Loss: 0.2601 | Train Accuracy: 0.9302 | Validation Loss: 0.2669 | Validation Accuracy: 0.9415 | Validation Mean Precision: 0.8963 | Validation Mean Recall: 0.8715 | Validation Mean F1_score: 0.8824 +2024-05-29 01:11:38 INFO: Epoch 069 | Train Loss: 0.2609 | Train Accuracy: 0.9323 | Validation Loss: 0.2747 | Validation Accuracy: 0.9305 | Validation Mean Precision: 0.8149 | Validation Mean Recall: 0.8885 | Validation Mean F1_score: 0.8423 +2024-05-29 01:11:40 INFO: Epoch 070 | Train Loss: 0.2543 | Train Accuracy: 0.9336 | Validation Loss: 0.2802 | Validation Accuracy: 0.9193 | Validation Mean Precision: 0.8160 | Validation Mean Recall: 0.8889 | Validation Mean F1_score: 0.8465 +2024-05-29 01:11:42 INFO: Epoch 071 | Train Loss: 0.2506 | Train Accuracy: 0.9366 | Validation Loss: 0.2599 | Validation Accuracy: 0.9478 | Validation Mean Precision: 0.9094 | Validation Mean Recall: 0.8801 | Validation Mean F1_score: 0.8939 +2024-05-29 01:11:43 INFO: Epoch 072 | Train Loss: 0.2561 | Train Accuracy: 0.9327 | Validation Loss: 0.2603 | Validation Accuracy: 0.9444 | Validation Mean Precision: 0.8659 | Validation Mean Recall: 0.8944 | Validation Mean F1_score: 0.8757 +2024-05-29 01:11:45 INFO: Epoch 073 | Train Loss: 0.2520 | Train Accuracy: 0.9353 | Validation Loss: 0.2702 | Validation Accuracy: 0.9377 | Validation Mean Precision: 0.8264 | Validation Mean Recall: 0.8977 | Validation Mean F1_score: 0.8513 +2024-05-29 01:11:46 INFO: Epoch 074 | Train Loss: 0.2481 | Train Accuracy: 0.9343 | Validation Loss: 0.2680 | Validation Accuracy: 0.9274 | Validation Mean Precision: 0.8202 | Validation Mean Recall: 0.8893 | Validation Mean F1_score: 0.8472 +2024-05-29 01:11:48 INFO: Epoch 075 | Train Loss: 0.2522 | Train Accuracy: 0.9351 | Validation Loss: 0.2735 | Validation Accuracy: 0.9193 | Validation Mean Precision: 0.8245 | Validation Mean Recall: 0.8841 | Validation Mean F1_score: 0.8512 +2024-05-29 01:11:49 INFO: Epoch 076 | Train Loss: 0.2547 | Train Accuracy: 0.9346 | Validation Loss: 0.3240 | Validation Accuracy: 0.9123 | Validation Mean Precision: 0.8894 | Validation Mean Recall: 0.8398 | Validation Mean F1_score: 0.8617 +2024-05-29 01:11:51 INFO: Epoch 077 | Train Loss: 0.2498 | Train Accuracy: 0.9393 | Validation Loss: 0.2805 | Validation Accuracy: 0.9188 | Validation Mean Precision: 0.7940 | Validation Mean Recall: 0.8892 | Validation Mean F1_score: 0.8308 +2024-05-29 01:11:52 INFO: Epoch 078 | Train Loss: 0.2471 | Train Accuracy: 0.9360 | Validation Loss: 0.2699 | Validation Accuracy: 0.9439 | Validation Mean Precision: 0.8825 | Validation Mean Recall: 0.8944 | Validation Mean F1_score: 0.8848 +2024-05-29 01:11:54 INFO: Epoch 079 | Train Loss: 0.2487 | Train Accuracy: 0.9356 | Validation Loss: 0.2776 | Validation Accuracy: 0.9339 | Validation Mean Precision: 0.8538 | Validation Mean Recall: 0.8796 | Validation Mean F1_score: 0.8654 +2024-05-29 01:11:55 INFO: Epoch 080 | Train Loss: 0.2572 | Train Accuracy: 0.9366 | Validation Loss: 0.2511 | Validation Accuracy: 0.9406 | Validation Mean Precision: 0.8664 | Validation Mean Recall: 0.8982 | Validation Mean F1_score: 0.8802 +2024-05-29 01:11:57 INFO: Epoch 081 | Train Loss: 0.2506 | Train Accuracy: 0.9360 | Validation Loss: 0.2938 | Validation Accuracy: 0.9248 | Validation Mean Precision: 0.7877 | Validation Mean Recall: 0.8899 | Validation Mean F1_score: 0.8225 +2024-05-29 01:11:58 INFO: Epoch 082 | Train Loss: 0.2437 | Train Accuracy: 0.9394 | Validation Loss: 0.2564 | Validation Accuracy: 0.9372 | Validation Mean Precision: 0.8497 | Validation Mean Recall: 0.8953 | Validation Mean F1_score: 0.8694 +2024-05-29 01:12:00 INFO: Epoch 083 | Train Loss: 0.2443 | Train Accuracy: 0.9384 | Validation Loss: 0.2602 | Validation Accuracy: 0.9363 | Validation Mean Precision: 0.8785 | Validation Mean Recall: 0.8850 | Validation Mean F1_score: 0.8812 +2024-05-29 01:12:01 INFO: Epoch 084 | Train Loss: 0.2452 | Train Accuracy: 0.9362 | Validation Loss: 0.2597 | Validation Accuracy: 0.9396 | Validation Mean Precision: 0.8585 | Validation Mean Recall: 0.8910 | Validation Mean F1_score: 0.8725 +2024-05-29 01:12:03 INFO: Epoch 085 | Train Loss: 0.2435 | Train Accuracy: 0.9352 | Validation Loss: 0.2677 | Validation Accuracy: 0.9444 | Validation Mean Precision: 0.9117 | Validation Mean Recall: 0.8634 | Validation Mean F1_score: 0.8844 +2024-05-29 01:12:04 INFO: Epoch 086 | Train Loss: 0.2476 | Train Accuracy: 0.9402 | Validation Loss: 0.2685 | Validation Accuracy: 0.9339 | Validation Mean Precision: 0.8227 | Validation Mean Recall: 0.8931 | Validation Mean F1_score: 0.8450 +2024-05-29 01:12:06 INFO: Epoch 087 | Train Loss: 0.2483 | Train Accuracy: 0.9378 | Validation Loss: 0.2700 | Validation Accuracy: 0.9459 | Validation Mean Precision: 0.8503 | Validation Mean Recall: 0.8925 | Validation Mean F1_score: 0.8636 +2024-05-29 01:12:08 INFO: Epoch 088 | Train Loss: 0.2434 | Train Accuracy: 0.9364 | Validation Loss: 0.2546 | Validation Accuracy: 0.9423 | Validation Mean Precision: 0.9009 | Validation Mean Recall: 0.8806 | Validation Mean F1_score: 0.8901 +2024-05-29 01:12:09 INFO: Epoch 089 | Train Loss: 0.2387 | Train Accuracy: 0.9374 | Validation Loss: 0.2575 | Validation Accuracy: 0.9447 | Validation Mean Precision: 0.8725 | Validation Mean Recall: 0.8967 | Validation Mean F1_score: 0.8812 +2024-05-29 01:12:11 INFO: Epoch 090 | Train Loss: 0.2502 | Train Accuracy: 0.9339 | Validation Loss: 0.2569 | Validation Accuracy: 0.9423 | Validation Mean Precision: 0.8874 | Validation Mean Recall: 0.8838 | Validation Mean F1_score: 0.8856 +2024-05-29 01:12:12 INFO: Epoch 091 | Train Loss: 0.2408 | Train Accuracy: 0.9385 | Validation Loss: 0.2585 | Validation Accuracy: 0.9459 | Validation Mean Precision: 0.8800 | Validation Mean Recall: 0.8921 | Validation Mean F1_score: 0.8820 +2024-05-29 01:12:14 INFO: Epoch 092 | Train Loss: 0.2420 | Train Accuracy: 0.9387 | Validation Loss: 0.2552 | Validation Accuracy: 0.9480 | Validation Mean Precision: 0.8807 | Validation Mean Recall: 0.8985 | Validation Mean F1_score: 0.8866 +2024-05-29 01:12:15 INFO: Epoch 093 | Train Loss: 0.2379 | Train Accuracy: 0.9394 | Validation Loss: 0.2599 | Validation Accuracy: 0.9411 | Validation Mean Precision: 0.8927 | Validation Mean Recall: 0.8822 | Validation Mean F1_score: 0.8868 +2024-05-29 01:12:16 INFO: Epoch 094 | Train Loss: 0.2454 | Train Accuracy: 0.9393 | Validation Loss: 0.2661 | Validation Accuracy: 0.9339 | Validation Mean Precision: 0.8435 | Validation Mean Recall: 0.8907 | Validation Mean F1_score: 0.8642 +2024-05-29 01:12:18 INFO: Epoch 095 | Train Loss: 0.2451 | Train Accuracy: 0.9379 | Validation Loss: 0.2583 | Validation Accuracy: 0.9365 | Validation Mean Precision: 0.8730 | Validation Mean Recall: 0.8885 | Validation Mean F1_score: 0.8802 +2024-05-29 01:12:19 INFO: Epoch 096 | Train Loss: 0.2467 | Train Accuracy: 0.9383 | Validation Loss: 0.2601 | Validation Accuracy: 0.9439 | Validation Mean Precision: 0.8610 | Validation Mean Recall: 0.8937 | Validation Mean F1_score: 0.8725 +2024-05-29 01:12:21 INFO: Epoch 097 | Train Loss: 0.2420 | Train Accuracy: 0.9386 | Validation Loss: 0.2540 | Validation Accuracy: 0.9399 | Validation Mean Precision: 0.8324 | Validation Mean Recall: 0.8900 | Validation Mean F1_score: 0.8544 +2024-05-29 01:12:22 INFO: Epoch 098 | Train Loss: 0.2386 | Train Accuracy: 0.9376 | Validation Loss: 0.3058 | Validation Accuracy: 0.8941 | Validation Mean Precision: 0.7867 | Validation Mean Recall: 0.8765 | Validation Mean F1_score: 0.8249 +2024-05-29 01:12:24 INFO: Epoch 099 | Train Loss: 0.2474 | Train Accuracy: 0.9330 | Validation Loss: 0.2698 | Validation Accuracy: 0.9451 | Validation Mean Precision: 0.8972 | Validation Mean Recall: 0.8685 | Validation Mean F1_score: 0.8821 +2024-05-29 01:12:25 INFO: Epoch 100 | Train Loss: 0.2386 | Train Accuracy: 0.9400 | Validation Loss: 0.2691 | Validation Accuracy: 0.9456 | Validation Mean Precision: 0.8807 | Validation Mean Recall: 0.8983 | Validation Mean F1_score: 0.8867 +2024-05-29 01:12:26 INFO: Epoch 101 | Train Loss: 0.2379 | Train Accuracy: 0.9388 | Validation Loss: 0.2913 | Validation Accuracy: 0.9118 | Validation Mean Precision: 0.8662 | Validation Mean Recall: 0.8597 | Validation Mean F1_score: 0.8601 +2024-05-29 01:12:28 INFO: Epoch 102 | Train Loss: 0.2417 | Train Accuracy: 0.9402 | Validation Loss: 0.2545 | Validation Accuracy: 0.9492 | Validation Mean Precision: 0.8994 | Validation Mean Recall: 0.8907 | Validation Mean F1_score: 0.8947 +2024-05-29 01:12:29 INFO: Epoch 103 | Train Loss: 0.2373 | Train Accuracy: 0.9405 | Validation Loss: 0.2559 | Validation Accuracy: 0.9468 | Validation Mean Precision: 0.8630 | Validation Mean Recall: 0.8946 | Validation Mean F1_score: 0.8734 +2024-05-29 01:12:31 INFO: Epoch 104 | Train Loss: 0.2386 | Train Accuracy: 0.9402 | Validation Loss: 0.2571 | Validation Accuracy: 0.9485 | Validation Mean Precision: 0.8940 | Validation Mean Recall: 0.8795 | Validation Mean F1_score: 0.8862 +2024-05-29 01:12:32 INFO: Epoch 105 | Train Loss: 0.2383 | Train Accuracy: 0.9399 | Validation Loss: 0.2599 | Validation Accuracy: 0.9473 | Validation Mean Precision: 0.9270 | Validation Mean Recall: 0.8749 | Validation Mean F1_score: 0.8987 +2024-05-29 01:12:34 INFO: Epoch 106 | Train Loss: 0.2351 | Train Accuracy: 0.9403 | Validation Loss: 0.2768 | Validation Accuracy: 0.9394 | Validation Mean Precision: 0.8365 | Validation Mean Recall: 0.8886 | Validation Mean F1_score: 0.8547 +2024-05-29 01:12:35 INFO: Epoch 107 | Train Loss: 0.2368 | Train Accuracy: 0.9414 | Validation Loss: 0.2615 | Validation Accuracy: 0.9379 | Validation Mean Precision: 0.8621 | Validation Mean Recall: 0.8880 | Validation Mean F1_score: 0.8737 +2024-05-29 01:12:37 INFO: Epoch 108 | Train Loss: 0.2389 | Train Accuracy: 0.9409 | Validation Loss: 0.2585 | Validation Accuracy: 0.9298 | Validation Mean Precision: 0.8401 | Validation Mean Recall: 0.8891 | Validation Mean F1_score: 0.8622 +2024-05-29 01:12:38 INFO: Epoch 109 | Train Loss: 0.2375 | Train Accuracy: 0.9400 | Validation Loss: 0.2929 | Validation Accuracy: 0.9415 | Validation Mean Precision: 0.8369 | Validation Mean Recall: 0.8850 | Validation Mean F1_score: 0.8461 +2024-05-29 01:12:40 INFO: Epoch 110 | Train Loss: 0.2347 | Train Accuracy: 0.9405 | Validation Loss: 0.3048 | Validation Accuracy: 0.8991 | Validation Mean Precision: 0.8031 | Validation Mean Recall: 0.8789 | Validation Mean F1_score: 0.8356 +2024-05-29 01:12:42 INFO: Epoch 111 | Train Loss: 0.2366 | Train Accuracy: 0.9398 | Validation Loss: 0.2538 | Validation Accuracy: 0.9475 | Validation Mean Precision: 0.8843 | Validation Mean Recall: 0.8884 | Validation Mean F1_score: 0.8856 +2024-05-29 01:12:44 INFO: Epoch 112 | Train Loss: 0.2364 | Train Accuracy: 0.9410 | Validation Loss: 0.2593 | Validation Accuracy: 0.9485 | Validation Mean Precision: 0.9128 | Validation Mean Recall: 0.8733 | Validation Mean F1_score: 0.8917 +2024-05-29 01:12:45 INFO: Epoch 113 | Train Loss: 0.2355 | Train Accuracy: 0.9414 | Validation Loss: 0.2456 | Validation Accuracy: 0.9442 | Validation Mean Precision: 0.8732 | Validation Mean Recall: 0.8889 | Validation Mean F1_score: 0.8805 +2024-05-29 01:12:47 INFO: Epoch 114 | Train Loss: 0.2308 | Train Accuracy: 0.9405 | Validation Loss: 0.2547 | Validation Accuracy: 0.9509 | Validation Mean Precision: 0.8926 | Validation Mean Recall: 0.8934 | Validation Mean F1_score: 0.8917 +2024-05-29 01:12:49 INFO: Epoch 115 | Train Loss: 0.2352 | Train Accuracy: 0.9398 | Validation Loss: 0.2585 | Validation Accuracy: 0.9516 | Validation Mean Precision: 0.9059 | Validation Mean Recall: 0.8819 | Validation Mean F1_score: 0.8934 +2024-05-29 01:12:50 INFO: Epoch 116 | Train Loss: 0.2350 | Train Accuracy: 0.9418 | Validation Loss: 0.2582 | Validation Accuracy: 0.9437 | Validation Mean Precision: 0.8530 | Validation Mean Recall: 0.8864 | Validation Mean F1_score: 0.8667 +2024-05-29 01:12:52 INFO: Epoch 117 | Train Loss: 0.2365 | Train Accuracy: 0.9412 | Validation Loss: 0.2547 | Validation Accuracy: 0.9418 | Validation Mean Precision: 0.8572 | Validation Mean Recall: 0.8984 | Validation Mean F1_score: 0.8743 +2024-05-29 01:12:54 INFO: Epoch 118 | Train Loss: 0.2359 | Train Accuracy: 0.9421 | Validation Loss: 0.2676 | Validation Accuracy: 0.9226 | Validation Mean Precision: 0.8458 | Validation Mean Recall: 0.8865 | Validation Mean F1_score: 0.8648 +2024-05-29 01:12:55 INFO: Epoch 119 | Train Loss: 0.2350 | Train Accuracy: 0.9417 | Validation Loss: 0.2670 | Validation Accuracy: 0.9233 | Validation Mean Precision: 0.8406 | Validation Mean Recall: 0.8663 | Validation Mean F1_score: 0.8529 +2024-05-29 01:12:57 INFO: Epoch 120 | Train Loss: 0.2361 | Train Accuracy: 0.9419 | Validation Loss: 0.2471 | Validation Accuracy: 0.9454 | Validation Mean Precision: 0.9043 | Validation Mean Recall: 0.8730 | Validation Mean F1_score: 0.8868 +2024-05-29 01:12:58 INFO: Epoch 121 | Train Loss: 0.2301 | Train Accuracy: 0.9425 | Validation Loss: 0.2528 | Validation Accuracy: 0.9435 | Validation Mean Precision: 0.8586 | Validation Mean Recall: 0.8952 | Validation Mean F1_score: 0.8735 +2024-05-29 01:13:00 INFO: Epoch 122 | Train Loss: 0.2301 | Train Accuracy: 0.9428 | Validation Loss: 0.2522 | Validation Accuracy: 0.9368 | Validation Mean Precision: 0.8629 | Validation Mean Recall: 0.8920 | Validation Mean F1_score: 0.8765 +2024-05-29 01:13:01 INFO: Epoch 123 | Train Loss: 0.2270 | Train Accuracy: 0.9430 | Validation Loss: 0.2535 | Validation Accuracy: 0.9483 | Validation Mean Precision: 0.8869 | Validation Mean Recall: 0.8861 | Validation Mean F1_score: 0.8854 +2024-05-29 01:13:03 INFO: Epoch 124 | Train Loss: 0.2373 | Train Accuracy: 0.9407 | Validation Loss: 0.2443 | Validation Accuracy: 0.9499 | Validation Mean Precision: 0.9040 | Validation Mean Recall: 0.8877 | Validation Mean F1_score: 0.8953 +2024-05-29 01:13:04 INFO: Epoch 125 | Train Loss: 0.2369 | Train Accuracy: 0.9408 | Validation Loss: 0.2487 | Validation Accuracy: 0.9408 | Validation Mean Precision: 0.8470 | Validation Mean Recall: 0.8950 | Validation Mean F1_score: 0.8669 +2024-05-29 01:13:05 INFO: Epoch 126 | Train Loss: 0.2325 | Train Accuracy: 0.9406 | Validation Loss: 0.2493 | Validation Accuracy: 0.9451 | Validation Mean Precision: 0.8878 | Validation Mean Recall: 0.8862 | Validation Mean F1_score: 0.8862 +2024-05-29 01:13:07 INFO: Epoch 127 | Train Loss: 0.2287 | Train Accuracy: 0.9436 | Validation Loss: 0.2560 | Validation Accuracy: 0.9497 | Validation Mean Precision: 0.9214 | Validation Mean Recall: 0.8633 | Validation Mean F1_score: 0.8888 +2024-05-29 01:13:08 INFO: Epoch 128 | Train Loss: 0.2326 | Train Accuracy: 0.9425 | Validation Loss: 0.2499 | Validation Accuracy: 0.9473 | Validation Mean Precision: 0.9066 | Validation Mean Recall: 0.8545 | Validation Mean F1_score: 0.8769 +2024-05-29 01:13:10 INFO: Epoch 129 | Train Loss: 0.2261 | Train Accuracy: 0.9439 | Validation Loss: 0.2410 | Validation Accuracy: 0.9468 | Validation Mean Precision: 0.8777 | Validation Mean Recall: 0.8924 | Validation Mean F1_score: 0.8840 +2024-05-29 01:13:11 INFO: Epoch 130 | Train Loss: 0.2302 | Train Accuracy: 0.9420 | Validation Loss: 0.2591 | Validation Accuracy: 0.9468 | Validation Mean Precision: 0.9059 | Validation Mean Recall: 0.8826 | Validation Mean F1_score: 0.8934 +2024-05-29 01:13:13 INFO: Epoch 131 | Train Loss: 0.2277 | Train Accuracy: 0.9424 | Validation Loss: 0.2433 | Validation Accuracy: 0.9418 | Validation Mean Precision: 0.8739 | Validation Mean Recall: 0.8906 | Validation Mean F1_score: 0.8817 +2024-05-29 01:13:14 INFO: Epoch 132 | Train Loss: 0.2311 | Train Accuracy: 0.9432 | Validation Loss: 0.2515 | Validation Accuracy: 0.9483 | Validation Mean Precision: 0.8859 | Validation Mean Recall: 0.8938 | Validation Mean F1_score: 0.8871 +2024-05-29 01:13:15 INFO: Epoch 133 | Train Loss: 0.2321 | Train Accuracy: 0.9453 | Validation Loss: 0.2674 | Validation Accuracy: 0.9391 | Validation Mean Precision: 0.8580 | Validation Mean Recall: 0.8718 | Validation Mean F1_score: 0.8639 +2024-05-29 01:13:17 INFO: Epoch 134 | Train Loss: 0.2290 | Train Accuracy: 0.9418 | Validation Loss: 0.2519 | Validation Accuracy: 0.9478 | Validation Mean Precision: 0.8650 | Validation Mean Recall: 0.8955 | Validation Mean F1_score: 0.8749 +2024-05-29 01:13:18 INFO: Epoch 135 | Train Loss: 0.2315 | Train Accuracy: 0.9430 | Validation Loss: 0.2515 | Validation Accuracy: 0.9430 | Validation Mean Precision: 0.8731 | Validation Mean Recall: 0.8855 | Validation Mean F1_score: 0.8788 +2024-05-29 01:13:20 INFO: Epoch 136 | Train Loss: 0.2241 | Train Accuracy: 0.9444 | Validation Loss: 0.2534 | Validation Accuracy: 0.9384 | Validation Mean Precision: 0.8605 | Validation Mean Recall: 0.8888 | Validation Mean F1_score: 0.8722 +2024-05-29 01:13:22 INFO: Epoch 137 | Train Loss: 0.2242 | Train Accuracy: 0.9451 | Validation Loss: 0.2517 | Validation Accuracy: 0.9466 | Validation Mean Precision: 0.8789 | Validation Mean Recall: 0.8929 | Validation Mean F1_score: 0.8835 +2024-05-29 01:13:24 INFO: Epoch 138 | Train Loss: 0.2232 | Train Accuracy: 0.9460 | Validation Loss: 0.2462 | Validation Accuracy: 0.9449 | Validation Mean Precision: 0.8552 | Validation Mean Recall: 0.8826 | Validation Mean F1_score: 0.8662 +2024-05-29 01:13:26 INFO: Epoch 139 | Train Loss: 0.2217 | Train Accuracy: 0.9437 | Validation Loss: 0.2574 | Validation Accuracy: 0.9406 | Validation Mean Precision: 0.8720 | Validation Mean Recall: 0.8893 | Validation Mean F1_score: 0.8796 +2024-05-29 01:13:27 INFO: Epoch 140 | Train Loss: 0.2289 | Train Accuracy: 0.9464 | Validation Loss: 0.2516 | Validation Accuracy: 0.9415 | Validation Mean Precision: 0.9035 | Validation Mean Recall: 0.8865 | Validation Mean F1_score: 0.8946 +2024-05-29 01:13:29 INFO: Epoch 141 | Train Loss: 0.2312 | Train Accuracy: 0.9439 | Validation Loss: 0.2439 | Validation Accuracy: 0.9499 | Validation Mean Precision: 0.8684 | Validation Mean Recall: 0.8967 | Validation Mean F1_score: 0.8771 +2024-05-29 01:13:30 INFO: Epoch 142 | Train Loss: 0.2297 | Train Accuracy: 0.9418 | Validation Loss: 0.2441 | Validation Accuracy: 0.9447 | Validation Mean Precision: 0.8890 | Validation Mean Recall: 0.8807 | Validation Mean F1_score: 0.8845 +2024-05-29 01:13:32 INFO: Epoch 143 | Train Loss: 0.2305 | Train Accuracy: 0.9445 | Validation Loss: 0.2535 | Validation Accuracy: 0.9454 | Validation Mean Precision: 0.8631 | Validation Mean Recall: 0.8980 | Validation Mean F1_score: 0.8765 +2024-05-29 01:13:33 INFO: Epoch 144 | Train Loss: 0.2258 | Train Accuracy: 0.9448 | Validation Loss: 0.2426 | Validation Accuracy: 0.9487 | Validation Mean Precision: 0.8848 | Validation Mean Recall: 0.8961 | Validation Mean F1_score: 0.8885 +2024-05-29 01:13:35 INFO: Epoch 145 | Train Loss: 0.2177 | Train Accuracy: 0.9453 | Validation Loss: 0.2586 | Validation Accuracy: 0.9399 | Validation Mean Precision: 0.8581 | Validation Mean Recall: 0.8820 | Validation Mean F1_score: 0.8683 +2024-05-29 01:13:37 INFO: Epoch 146 | Train Loss: 0.2191 | Train Accuracy: 0.9460 | Validation Loss: 0.2532 | Validation Accuracy: 0.9368 | Validation Mean Precision: 0.8530 | Validation Mean Recall: 0.8699 | Validation Mean F1_score: 0.8604 +2024-05-29 01:13:38 INFO: Epoch 147 | Train Loss: 0.2292 | Train Accuracy: 0.9462 | Validation Loss: 0.2493 | Validation Accuracy: 0.9456 | Validation Mean Precision: 0.8658 | Validation Mean Recall: 0.8877 | Validation Mean F1_score: 0.8744 +2024-05-29 01:13:40 INFO: Epoch 148 | Train Loss: 0.2264 | Train Accuracy: 0.9430 | Validation Loss: 0.2436 | Validation Accuracy: 0.9471 | Validation Mean Precision: 0.8962 | Validation Mean Recall: 0.8813 | Validation Mean F1_score: 0.8883 +2024-05-29 01:13:41 INFO: Epoch 149 | Train Loss: 0.2257 | Train Accuracy: 0.9436 | Validation Loss: 0.2408 | Validation Accuracy: 0.9502 | Validation Mean Precision: 0.8866 | Validation Mean Recall: 0.8838 | Validation Mean F1_score: 0.8844 +2024-05-29 01:13:43 INFO: Epoch 150 | Train Loss: 0.2259 | Train Accuracy: 0.9453 | Validation Loss: 0.2507 | Validation Accuracy: 0.9447 | Validation Mean Precision: 0.9128 | Validation Mean Recall: 0.8688 | Validation Mean F1_score: 0.8888 +2024-05-29 01:13:43 INFO: Best Validation F1 Score (Macro): 0.8987 +2024-05-29 01:13:43 INFO: Best Validation Recall (Macro): 0.8749 +2024-05-29 01:13:43 INFO: Best Validation Precision (Macro): 0.9270 +2024-05-29 01:13:43 INFO: Best Epoch: 105 +2024-05-29 01:13:44 INFO: Infer Result: +2024-05-29 01:13:44 INFO: Prediction errors: 277 +2024-05-29 01:13:44 INFO: Prediction error percentage: 5.31% +2024-05-29 01:13:44 INFO: Total samples: 5218 +2024-05-29 01:13:44 INFO: Infer Result End: +2024-05-29 01:13:45 INFO: Class weights: tensor([21.1878, 3.1149, 0.7420, 0.4378], device='cuda:0') +2024-05-29 01:13:46 INFO: Epoch 001 | Train Loss: 0.5522 | Train Accuracy: 0.8203 | Validation Loss: 0.3500 | Validation Accuracy: 0.8654 | Validation Mean Precision: 0.7424 | Validation Mean Recall: 0.8555 | Validation Mean F1_score: 0.7875 +2024-05-29 01:13:48 INFO: Epoch 002 | Train Loss: 0.3739 | Train Accuracy: 0.8840 | Validation Loss: 0.3281 | Validation Accuracy: 0.8884 | Validation Mean Precision: 0.7683 | Validation Mean Recall: 0.8636 | Validation Mean F1_score: 0.8060 +2024-05-29 01:13:49 INFO: Epoch 003 | Train Loss: 0.3690 | Train Accuracy: 0.8832 | Validation Loss: 0.3156 | Validation Accuracy: 0.8948 | Validation Mean Precision: 0.8094 | Validation Mean Recall: 0.8525 | Validation Mean F1_score: 0.8294 +2024-05-29 01:13:50 INFO: Epoch 004 | Train Loss: 0.3699 | Train Accuracy: 0.8828 | Validation Loss: 0.3496 | Validation Accuracy: 0.8752 | Validation Mean Precision: 0.7393 | Validation Mean Recall: 0.8699 | Validation Mean F1_score: 0.7881 +2024-05-29 01:13:52 INFO: Epoch 005 | Train Loss: 0.3555 | Train Accuracy: 0.8906 | Validation Loss: 0.3119 | Validation Accuracy: 0.8970 | Validation Mean Precision: 0.8134 | Validation Mean Recall: 0.8354 | Validation Mean F1_score: 0.8235 +2024-05-29 01:13:53 INFO: Epoch 006 | Train Loss: 0.3598 | Train Accuracy: 0.8899 | Validation Loss: 0.3153 | Validation Accuracy: 0.8915 | Validation Mean Precision: 0.7934 | Validation Mean Recall: 0.8546 | Validation Mean F1_score: 0.8209 +2024-05-29 01:13:55 INFO: Epoch 007 | Train Loss: 0.3670 | Train Accuracy: 0.8904 | Validation Loss: 0.3234 | Validation Accuracy: 0.8924 | Validation Mean Precision: 0.7900 | Validation Mean Recall: 0.8508 | Validation Mean F1_score: 0.8137 +2024-05-29 01:13:56 INFO: Epoch 008 | Train Loss: 0.3572 | Train Accuracy: 0.8905 | Validation Loss: 0.3167 | Validation Accuracy: 0.8936 | Validation Mean Precision: 0.7821 | Validation Mean Recall: 0.8500 | Validation Mean F1_score: 0.8108 +2024-05-29 01:13:58 INFO: Epoch 009 | Train Loss: 0.3542 | Train Accuracy: 0.8954 | Validation Loss: 0.3912 | Validation Accuracy: 0.8977 | Validation Mean Precision: 0.8861 | Validation Mean Recall: 0.6835 | Validation Mean F1_score: 0.6724 +2024-05-29 01:14:00 INFO: Epoch 010 | Train Loss: 0.3517 | Train Accuracy: 0.8951 | Validation Loss: 0.3090 | Validation Accuracy: 0.9154 | Validation Mean Precision: 0.8555 | Validation Mean Recall: 0.8375 | Validation Mean F1_score: 0.8456 +2024-05-29 01:14:02 INFO: Epoch 011 | Train Loss: 0.3468 | Train Accuracy: 0.8996 | Validation Loss: 0.3001 | Validation Accuracy: 0.9090 | Validation Mean Precision: 0.8131 | Validation Mean Recall: 0.8506 | Validation Mean F1_score: 0.8292 +2024-05-29 01:14:04 INFO: Epoch 012 | Train Loss: 0.3399 | Train Accuracy: 0.9003 | Validation Loss: 0.3083 | Validation Accuracy: 0.9015 | Validation Mean Precision: 0.7884 | Validation Mean Recall: 0.8673 | Validation Mean F1_score: 0.8189 +2024-05-29 01:14:05 INFO: Epoch 013 | Train Loss: 0.3385 | Train Accuracy: 0.9004 | Validation Loss: 0.3251 | Validation Accuracy: 0.8757 | Validation Mean Precision: 0.7619 | Validation Mean Recall: 0.8754 | Validation Mean F1_score: 0.8048 +2024-05-29 01:14:07 INFO: Epoch 014 | Train Loss: 0.3400 | Train Accuracy: 0.8993 | Validation Loss: 0.3105 | Validation Accuracy: 0.8975 | Validation Mean Precision: 0.7679 | Validation Mean Recall: 0.8820 | Validation Mean F1_score: 0.8111 +2024-05-29 01:14:08 INFO: Epoch 015 | Train Loss: 0.3263 | Train Accuracy: 0.9047 | Validation Loss: 0.2822 | Validation Accuracy: 0.9212 | Validation Mean Precision: 0.8312 | Validation Mean Recall: 0.8591 | Validation Mean F1_score: 0.8429 +2024-05-29 01:14:09 INFO: Epoch 016 | Train Loss: 0.3287 | Train Accuracy: 0.9078 | Validation Loss: 0.2929 | Validation Accuracy: 0.9276 | Validation Mean Precision: 0.8541 | Validation Mean Recall: 0.8508 | Validation Mean F1_score: 0.8517 +2024-05-29 01:14:11 INFO: Epoch 017 | Train Loss: 0.3217 | Train Accuracy: 0.9075 | Validation Loss: 0.2738 | Validation Accuracy: 0.9253 | Validation Mean Precision: 0.8276 | Validation Mean Recall: 0.8760 | Validation Mean F1_score: 0.8480 +2024-05-29 01:14:12 INFO: Epoch 018 | Train Loss: 0.3195 | Train Accuracy: 0.9144 | Validation Loss: 0.2735 | Validation Accuracy: 0.9269 | Validation Mean Precision: 0.8196 | Validation Mean Recall: 0.8776 | Validation Mean F1_score: 0.8433 +2024-05-29 01:14:14 INFO: Epoch 019 | Train Loss: 0.3118 | Train Accuracy: 0.9167 | Validation Loss: 0.2774 | Validation Accuracy: 0.9138 | Validation Mean Precision: 0.7965 | Validation Mean Recall: 0.8827 | Validation Mean F1_score: 0.8314 +2024-05-29 01:14:15 INFO: Epoch 020 | Train Loss: 0.3158 | Train Accuracy: 0.9158 | Validation Loss: 0.2708 | Validation Accuracy: 0.9221 | Validation Mean Precision: 0.8245 | Validation Mean Recall: 0.8754 | Validation Mean F1_score: 0.8471 +2024-05-29 01:14:16 INFO: Epoch 021 | Train Loss: 0.3059 | Train Accuracy: 0.9145 | Validation Loss: 0.2673 | Validation Accuracy: 0.9197 | Validation Mean Precision: 0.8241 | Validation Mean Recall: 0.8800 | Validation Mean F1_score: 0.8487 +2024-05-29 01:14:18 INFO: Epoch 022 | Train Loss: 0.3047 | Train Accuracy: 0.9197 | Validation Loss: 0.3004 | Validation Accuracy: 0.9152 | Validation Mean Precision: 0.8557 | Validation Mean Recall: 0.8587 | Validation Mean F1_score: 0.8480 +2024-05-29 01:14:19 INFO: Epoch 023 | Train Loss: 0.3043 | Train Accuracy: 0.9167 | Validation Loss: 0.2625 | Validation Accuracy: 0.9358 | Validation Mean Precision: 0.8606 | Validation Mean Recall: 0.8653 | Validation Mean F1_score: 0.8607 +2024-05-29 01:14:21 INFO: Epoch 024 | Train Loss: 0.2983 | Train Accuracy: 0.9209 | Validation Loss: 0.2709 | Validation Accuracy: 0.9418 | Validation Mean Precision: 0.8613 | Validation Mean Recall: 0.8708 | Validation Mean F1_score: 0.8633 +2024-05-29 01:14:22 INFO: Epoch 025 | Train Loss: 0.2962 | Train Accuracy: 0.9197 | Validation Loss: 0.2698 | Validation Accuracy: 0.9411 | Validation Mean Precision: 0.8537 | Validation Mean Recall: 0.8783 | Validation Mean F1_score: 0.8642 +2024-05-29 01:14:24 INFO: Epoch 026 | Train Loss: 0.3008 | Train Accuracy: 0.9197 | Validation Loss: 0.3021 | Validation Accuracy: 0.8917 | Validation Mean Precision: 0.8151 | Validation Mean Recall: 0.8501 | Validation Mean F1_score: 0.8305 +2024-05-29 01:14:25 INFO: Epoch 027 | Train Loss: 0.2928 | Train Accuracy: 0.9239 | Validation Loss: 0.2605 | Validation Accuracy: 0.9353 | Validation Mean Precision: 0.8407 | Validation Mean Recall: 0.8948 | Validation Mean F1_score: 0.8608 +2024-05-29 01:14:27 INFO: Epoch 028 | Train Loss: 0.2858 | Train Accuracy: 0.9230 | Validation Loss: 0.2611 | Validation Accuracy: 0.9365 | Validation Mean Precision: 0.8308 | Validation Mean Recall: 0.8963 | Validation Mean F1_score: 0.8562 +2024-05-29 01:14:28 INFO: Epoch 029 | Train Loss: 0.2883 | Train Accuracy: 0.9275 | Validation Loss: 0.2759 | Validation Accuracy: 0.9068 | Validation Mean Precision: 0.7824 | Validation Mean Recall: 0.8876 | Validation Mean F1_score: 0.8235 +2024-05-29 01:14:29 INFO: Epoch 030 | Train Loss: 0.2825 | Train Accuracy: 0.9279 | Validation Loss: 0.2701 | Validation Accuracy: 0.9449 | Validation Mean Precision: 0.8755 | Validation Mean Recall: 0.8559 | Validation Mean F1_score: 0.8630 +2024-05-29 01:14:31 INFO: Epoch 031 | Train Loss: 0.2863 | Train Accuracy: 0.9243 | Validation Loss: 0.2559 | Validation Accuracy: 0.9358 | Validation Mean Precision: 0.8351 | Validation Mean Recall: 0.8988 | Validation Mean F1_score: 0.8585 +2024-05-29 01:14:32 INFO: Epoch 032 | Train Loss: 0.2789 | Train Accuracy: 0.9287 | Validation Loss: 0.2467 | Validation Accuracy: 0.9463 | Validation Mean Precision: 0.8719 | Validation Mean Recall: 0.8786 | Validation Mean F1_score: 0.8740 +2024-05-29 01:14:34 INFO: Epoch 033 | Train Loss: 0.2783 | Train Accuracy: 0.9295 | Validation Loss: 0.2501 | Validation Accuracy: 0.9379 | Validation Mean Precision: 0.8656 | Validation Mean Recall: 0.8665 | Validation Mean F1_score: 0.8658 +2024-05-29 01:14:35 INFO: Epoch 034 | Train Loss: 0.2727 | Train Accuracy: 0.9312 | Validation Loss: 0.2493 | Validation Accuracy: 0.9298 | Validation Mean Precision: 0.8434 | Validation Mean Recall: 0.8546 | Validation Mean F1_score: 0.8484 +2024-05-29 01:14:37 INFO: Epoch 035 | Train Loss: 0.2779 | Train Accuracy: 0.9296 | Validation Loss: 0.2492 | Validation Accuracy: 0.9224 | Validation Mean Precision: 0.8464 | Validation Mean Recall: 0.8520 | Validation Mean F1_score: 0.8489 +2024-05-29 01:14:39 INFO: Epoch 036 | Train Loss: 0.2733 | Train Accuracy: 0.9327 | Validation Loss: 0.2885 | Validation Accuracy: 0.9279 | Validation Mean Precision: 0.9080 | Validation Mean Recall: 0.8273 | Validation Mean F1_score: 0.8616 +2024-05-29 01:14:40 INFO: Epoch 037 | Train Loss: 0.2775 | Train Accuracy: 0.9303 | Validation Loss: 0.2454 | Validation Accuracy: 0.9399 | Validation Mean Precision: 0.8496 | Validation Mean Recall: 0.8985 | Validation Mean F1_score: 0.8704 +2024-05-29 01:14:42 INFO: Epoch 038 | Train Loss: 0.2728 | Train Accuracy: 0.9313 | Validation Loss: 0.2623 | Validation Accuracy: 0.9121 | Validation Mean Precision: 0.8160 | Validation Mean Recall: 0.8964 | Validation Mean F1_score: 0.8509 +2024-05-29 01:14:43 INFO: Epoch 039 | Train Loss: 0.2680 | Train Accuracy: 0.9321 | Validation Loss: 0.2379 | Validation Accuracy: 0.9471 | Validation Mean Precision: 0.8742 | Validation Mean Recall: 0.8566 | Validation Mean F1_score: 0.8649 +2024-05-29 01:14:45 INFO: Epoch 040 | Train Loss: 0.2686 | Train Accuracy: 0.9324 | Validation Loss: 0.2637 | Validation Accuracy: 0.9487 | Validation Mean Precision: 0.8879 | Validation Mean Recall: 0.8862 | Validation Mean F1_score: 0.8837 +2024-05-29 01:14:46 INFO: Epoch 041 | Train Loss: 0.2633 | Train Accuracy: 0.9357 | Validation Loss: 0.2428 | Validation Accuracy: 0.9435 | Validation Mean Precision: 0.8923 | Validation Mean Recall: 0.8526 | Validation Mean F1_score: 0.8701 +2024-05-29 01:14:48 INFO: Epoch 042 | Train Loss: 0.2661 | Train Accuracy: 0.9352 | Validation Loss: 0.2480 | Validation Accuracy: 0.9281 | Validation Mean Precision: 0.8271 | Validation Mean Recall: 0.8921 | Validation Mean F1_score: 0.8525 +2024-05-29 01:14:49 INFO: Epoch 043 | Train Loss: 0.2624 | Train Accuracy: 0.9364 | Validation Loss: 0.2365 | Validation Accuracy: 0.9485 | Validation Mean Precision: 0.8922 | Validation Mean Recall: 0.8856 | Validation Mean F1_score: 0.8863 +2024-05-29 01:14:51 INFO: Epoch 044 | Train Loss: 0.2619 | Train Accuracy: 0.9357 | Validation Loss: 0.2507 | Validation Accuracy: 0.9375 | Validation Mean Precision: 0.8640 | Validation Mean Recall: 0.8634 | Validation Mean F1_score: 0.8619 +2024-05-29 01:14:52 INFO: Epoch 045 | Train Loss: 0.2611 | Train Accuracy: 0.9391 | Validation Loss: 0.2320 | Validation Accuracy: 0.9449 | Validation Mean Precision: 0.8784 | Validation Mean Recall: 0.8908 | Validation Mean F1_score: 0.8828 +2024-05-29 01:14:54 INFO: Epoch 046 | Train Loss: 0.2609 | Train Accuracy: 0.9356 | Validation Loss: 0.2472 | Validation Accuracy: 0.9255 | Validation Mean Precision: 0.8256 | Validation Mean Recall: 0.8952 | Validation Mean F1_score: 0.8548 +2024-05-29 01:14:55 INFO: Epoch 047 | Train Loss: 0.2604 | Train Accuracy: 0.9354 | Validation Loss: 0.2942 | Validation Accuracy: 0.9097 | Validation Mean Precision: 0.8179 | Validation Mean Recall: 0.8810 | Validation Mean F1_score: 0.8430 +2024-05-29 01:14:57 INFO: Epoch 048 | Train Loss: 0.2584 | Train Accuracy: 0.9365 | Validation Loss: 0.2268 | Validation Accuracy: 0.9425 | Validation Mean Precision: 0.8596 | Validation Mean Recall: 0.9028 | Validation Mean F1_score: 0.8763 +2024-05-29 01:14:58 INFO: Epoch 049 | Train Loss: 0.2583 | Train Accuracy: 0.9348 | Validation Loss: 0.2326 | Validation Accuracy: 0.9435 | Validation Mean Precision: 0.8569 | Validation Mean Recall: 0.8761 | Validation Mean F1_score: 0.8655 +2024-05-29 01:15:00 INFO: Epoch 050 | Train Loss: 0.2558 | Train Accuracy: 0.9369 | Validation Loss: 0.2437 | Validation Accuracy: 0.9327 | Validation Mean Precision: 0.8721 | Validation Mean Recall: 0.8755 | Validation Mean F1_score: 0.8734 +2024-05-29 01:15:01 INFO: Epoch 051 | Train Loss: 0.2592 | Train Accuracy: 0.9356 | Validation Loss: 0.2396 | Validation Accuracy: 0.9499 | Validation Mean Precision: 0.9035 | Validation Mean Recall: 0.8756 | Validation Mean F1_score: 0.8885 +2024-05-29 01:15:03 INFO: Epoch 052 | Train Loss: 0.2561 | Train Accuracy: 0.9392 | Validation Loss: 0.2425 | Validation Accuracy: 0.9207 | Validation Mean Precision: 0.8424 | Validation Mean Recall: 0.8876 | Validation Mean F1_score: 0.8620 +2024-05-29 01:15:04 INFO: Epoch 053 | Train Loss: 0.2649 | Train Accuracy: 0.9364 | Validation Loss: 0.2449 | Validation Accuracy: 0.9293 | Validation Mean Precision: 0.8623 | Validation Mean Recall: 0.8785 | Validation Mean F1_score: 0.8700 +2024-05-29 01:15:06 INFO: Epoch 054 | Train Loss: 0.2537 | Train Accuracy: 0.9384 | Validation Loss: 0.2415 | Validation Accuracy: 0.9502 | Validation Mean Precision: 0.8928 | Validation Mean Recall: 0.8738 | Validation Mean F1_score: 0.8826 +2024-05-29 01:15:07 INFO: Epoch 055 | Train Loss: 0.2535 | Train Accuracy: 0.9378 | Validation Loss: 0.2268 | Validation Accuracy: 0.9490 | Validation Mean Precision: 0.8852 | Validation Mean Recall: 0.8867 | Validation Mean F1_score: 0.8844 +2024-05-29 01:15:09 INFO: Epoch 056 | Train Loss: 0.2523 | Train Accuracy: 0.9385 | Validation Loss: 0.2487 | Validation Accuracy: 0.9442 | Validation Mean Precision: 0.8939 | Validation Mean Recall: 0.8531 | Validation Mean F1_score: 0.8709 +2024-05-29 01:15:10 INFO: Epoch 057 | Train Loss: 0.2543 | Train Accuracy: 0.9369 | Validation Loss: 0.2358 | Validation Accuracy: 0.9506 | Validation Mean Precision: 0.9005 | Validation Mean Recall: 0.8847 | Validation Mean F1_score: 0.8918 +2024-05-29 01:15:12 INFO: Epoch 058 | Train Loss: 0.2486 | Train Accuracy: 0.9423 | Validation Loss: 0.2328 | Validation Accuracy: 0.9418 | Validation Mean Precision: 0.8817 | Validation Mean Recall: 0.8804 | Validation Mean F1_score: 0.8804 +2024-05-29 01:15:13 INFO: Epoch 059 | Train Loss: 0.2492 | Train Accuracy: 0.9417 | Validation Loss: 0.2293 | Validation Accuracy: 0.9447 | Validation Mean Precision: 0.8670 | Validation Mean Recall: 0.8881 | Validation Mean F1_score: 0.8757 +2024-05-29 01:15:14 INFO: Epoch 060 | Train Loss: 0.2520 | Train Accuracy: 0.9357 | Validation Loss: 0.2328 | Validation Accuracy: 0.9442 | Validation Mean Precision: 0.8621 | Validation Mean Recall: 0.8965 | Validation Mean F1_score: 0.8711 +2024-05-29 01:15:16 INFO: Epoch 061 | Train Loss: 0.2513 | Train Accuracy: 0.9388 | Validation Loss: 0.2349 | Validation Accuracy: 0.9344 | Validation Mean Precision: 0.8586 | Validation Mean Recall: 0.8796 | Validation Mean F1_score: 0.8686 +2024-05-29 01:15:18 INFO: Epoch 062 | Train Loss: 0.2477 | Train Accuracy: 0.9411 | Validation Loss: 0.2338 | Validation Accuracy: 0.9494 | Validation Mean Precision: 0.8695 | Validation Mean Recall: 0.8990 | Validation Mean F1_score: 0.8757 +2024-05-29 01:15:19 INFO: Epoch 063 | Train Loss: 0.2536 | Train Accuracy: 0.9403 | Validation Loss: 0.2277 | Validation Accuracy: 0.9435 | Validation Mean Precision: 0.8602 | Validation Mean Recall: 0.8964 | Validation Mean F1_score: 0.8733 +2024-05-29 01:15:21 INFO: Epoch 064 | Train Loss: 0.2574 | Train Accuracy: 0.9391 | Validation Loss: 0.2368 | Validation Accuracy: 0.9518 | Validation Mean Precision: 0.9008 | Validation Mean Recall: 0.8799 | Validation Mean F1_score: 0.8888 +2024-05-29 01:15:22 INFO: Epoch 065 | Train Loss: 0.2454 | Train Accuracy: 0.9426 | Validation Loss: 0.2489 | Validation Accuracy: 0.9430 | Validation Mean Precision: 0.8678 | Validation Mean Recall: 0.8740 | Validation Mean F1_score: 0.8679 +2024-05-29 01:15:24 INFO: Epoch 066 | Train Loss: 0.2527 | Train Accuracy: 0.9414 | Validation Loss: 0.2262 | Validation Accuracy: 0.9471 | Validation Mean Precision: 0.8680 | Validation Mean Recall: 0.8970 | Validation Mean F1_score: 0.8770 +2024-05-29 01:15:25 INFO: Epoch 067 | Train Loss: 0.2477 | Train Accuracy: 0.9420 | Validation Loss: 0.2258 | Validation Accuracy: 0.9528 | Validation Mean Precision: 0.8917 | Validation Mean Recall: 0.8876 | Validation Mean F1_score: 0.8877 +2024-05-29 01:15:27 INFO: Epoch 068 | Train Loss: 0.2420 | Train Accuracy: 0.9434 | Validation Loss: 0.2347 | Validation Accuracy: 0.9485 | Validation Mean Precision: 0.8667 | Validation Mean Recall: 0.8981 | Validation Mean F1_score: 0.8763 +2024-05-29 01:15:28 INFO: Epoch 069 | Train Loss: 0.2491 | Train Accuracy: 0.9409 | Validation Loss: 0.2411 | Validation Accuracy: 0.9253 | Validation Mean Precision: 0.8311 | Validation Mean Recall: 0.8892 | Validation Mean F1_score: 0.8557 +2024-05-29 01:15:30 INFO: Epoch 070 | Train Loss: 0.2476 | Train Accuracy: 0.9410 | Validation Loss: 0.2438 | Validation Accuracy: 0.9310 | Validation Mean Precision: 0.8419 | Validation Mean Recall: 0.8923 | Validation Mean F1_score: 0.8622 +2024-05-29 01:15:31 INFO: Epoch 071 | Train Loss: 0.2451 | Train Accuracy: 0.9432 | Validation Loss: 0.2347 | Validation Accuracy: 0.9526 | Validation Mean Precision: 0.8871 | Validation Mean Recall: 0.8912 | Validation Mean F1_score: 0.8864 +2024-05-29 01:15:33 INFO: Epoch 072 | Train Loss: 0.2509 | Train Accuracy: 0.9420 | Validation Loss: 0.2302 | Validation Accuracy: 0.9370 | Validation Mean Precision: 0.8412 | Validation Mean Recall: 0.8959 | Validation Mean F1_score: 0.8639 +2024-05-29 01:15:34 INFO: Epoch 073 | Train Loss: 0.2429 | Train Accuracy: 0.9423 | Validation Loss: 0.2365 | Validation Accuracy: 0.9461 | Validation Mean Precision: 0.8589 | Validation Mean Recall: 0.8936 | Validation Mean F1_score: 0.8718 +2024-05-29 01:15:36 INFO: Epoch 074 | Train Loss: 0.2398 | Train Accuracy: 0.9436 | Validation Loss: 0.2248 | Validation Accuracy: 0.9499 | Validation Mean Precision: 0.8697 | Validation Mean Recall: 0.8973 | Validation Mean F1_score: 0.8780 +2024-05-29 01:15:37 INFO: Epoch 075 | Train Loss: 0.2439 | Train Accuracy: 0.9429 | Validation Loss: 0.2445 | Validation Accuracy: 0.9341 | Validation Mean Precision: 0.8606 | Validation Mean Recall: 0.8901 | Validation Mean F1_score: 0.8703 +2024-05-29 01:15:38 INFO: Epoch 076 | Train Loss: 0.2503 | Train Accuracy: 0.9416 | Validation Loss: 0.2321 | Validation Accuracy: 0.9516 | Validation Mean Precision: 0.8785 | Validation Mean Recall: 0.9019 | Validation Mean F1_score: 0.8835 +2024-05-29 01:15:40 INFO: Epoch 077 | Train Loss: 0.2388 | Train Accuracy: 0.9443 | Validation Loss: 0.2253 | Validation Accuracy: 0.9492 | Validation Mean Precision: 0.8923 | Validation Mean Recall: 0.8838 | Validation Mean F1_score: 0.8871 +2024-05-29 01:15:41 INFO: Epoch 078 | Train Loss: 0.2395 | Train Accuracy: 0.9445 | Validation Loss: 0.2290 | Validation Accuracy: 0.9483 | Validation Mean Precision: 0.8846 | Validation Mean Recall: 0.8879 | Validation Mean F1_score: 0.8834 +2024-05-29 01:15:43 INFO: Epoch 079 | Train Loss: 0.2402 | Train Accuracy: 0.9431 | Validation Loss: 0.2307 | Validation Accuracy: 0.9475 | Validation Mean Precision: 0.8603 | Validation Mean Recall: 0.8771 | Validation Mean F1_score: 0.8656 +2024-05-29 01:15:44 INFO: Epoch 080 | Train Loss: 0.2382 | Train Accuracy: 0.9441 | Validation Loss: 0.2315 | Validation Accuracy: 0.9478 | Validation Mean Precision: 0.8613 | Validation Mean Recall: 0.8771 | Validation Mean F1_score: 0.8660 +2024-05-29 01:15:46 INFO: Epoch 081 | Train Loss: 0.2442 | Train Accuracy: 0.9447 | Validation Loss: 0.2756 | Validation Accuracy: 0.9173 | Validation Mean Precision: 0.8645 | Validation Mean Recall: 0.8634 | Validation Mean F1_score: 0.8637 +2024-05-29 01:15:47 INFO: Epoch 082 | Train Loss: 0.2427 | Train Accuracy: 0.9418 | Validation Loss: 0.2658 | Validation Accuracy: 0.9061 | Validation Mean Precision: 0.8135 | Validation Mean Recall: 0.8797 | Validation Mean F1_score: 0.8424 +2024-05-29 01:15:49 INFO: Epoch 083 | Train Loss: 0.2400 | Train Accuracy: 0.9437 | Validation Loss: 0.2399 | Validation Accuracy: 0.9365 | Validation Mean Precision: 0.8269 | Validation Mean Recall: 0.8993 | Validation Mean F1_score: 0.8505 +2024-05-29 01:15:50 INFO: Epoch 084 | Train Loss: 0.2394 | Train Accuracy: 0.9458 | Validation Loss: 0.2312 | Validation Accuracy: 0.9435 | Validation Mean Precision: 0.8488 | Validation Mean Recall: 0.8906 | Validation Mean F1_score: 0.8652 +2024-05-29 01:15:52 INFO: Epoch 085 | Train Loss: 0.2399 | Train Accuracy: 0.9439 | Validation Loss: 0.2269 | Validation Accuracy: 0.9492 | Validation Mean Precision: 0.8641 | Validation Mean Recall: 0.9015 | Validation Mean F1_score: 0.8755 +2024-05-29 01:15:54 INFO: Epoch 086 | Train Loss: 0.2386 | Train Accuracy: 0.9461 | Validation Loss: 0.2290 | Validation Accuracy: 0.9504 | Validation Mean Precision: 0.8869 | Validation Mean Recall: 0.8848 | Validation Mean F1_score: 0.8851 +2024-05-29 01:15:55 INFO: Epoch 087 | Train Loss: 0.2349 | Train Accuracy: 0.9438 | Validation Loss: 0.2372 | Validation Accuracy: 0.9471 | Validation Mean Precision: 0.8773 | Validation Mean Recall: 0.8883 | Validation Mean F1_score: 0.8772 +2024-05-29 01:15:56 INFO: Epoch 088 | Train Loss: 0.2403 | Train Accuracy: 0.9450 | Validation Loss: 0.2286 | Validation Accuracy: 0.9478 | Validation Mean Precision: 0.8763 | Validation Mean Recall: 0.8840 | Validation Mean F1_score: 0.8773 +2024-05-29 01:15:58 INFO: Epoch 089 | Train Loss: 0.2317 | Train Accuracy: 0.9470 | Validation Loss: 0.2379 | Validation Accuracy: 0.9490 | Validation Mean Precision: 0.8656 | Validation Mean Recall: 0.8911 | Validation Mean F1_score: 0.8728 +2024-05-29 01:15:59 INFO: Epoch 090 | Train Loss: 0.2358 | Train Accuracy: 0.9441 | Validation Loss: 0.3328 | Validation Accuracy: 0.8857 | Validation Mean Precision: 0.7890 | Validation Mean Recall: 0.8822 | Validation Mean F1_score: 0.8281 +2024-05-29 01:16:01 INFO: Epoch 091 | Train Loss: 0.2360 | Train Accuracy: 0.9441 | Validation Loss: 0.2315 | Validation Accuracy: 0.9485 | Validation Mean Precision: 0.8613 | Validation Mean Recall: 0.9039 | Validation Mean F1_score: 0.8736 +2024-05-29 01:16:03 INFO: Epoch 092 | Train Loss: 0.2379 | Train Accuracy: 0.9424 | Validation Loss: 0.2375 | Validation Accuracy: 0.9523 | Validation Mean Precision: 0.8939 | Validation Mean Recall: 0.8746 | Validation Mean F1_score: 0.8835 +2024-05-29 01:16:04 INFO: Epoch 093 | Train Loss: 0.2345 | Train Accuracy: 0.9463 | Validation Loss: 0.2396 | Validation Accuracy: 0.9506 | Validation Mean Precision: 0.8930 | Validation Mean Recall: 0.8806 | Validation Mean F1_score: 0.8851 +2024-05-29 01:16:05 INFO: Epoch 094 | Train Loss: 0.2340 | Train Accuracy: 0.9457 | Validation Loss: 0.2291 | Validation Accuracy: 0.9523 | Validation Mean Precision: 0.8789 | Validation Mean Recall: 0.8975 | Validation Mean F1_score: 0.8825 +2024-05-29 01:16:07 INFO: Epoch 095 | Train Loss: 0.2359 | Train Accuracy: 0.9465 | Validation Loss: 0.2341 | Validation Accuracy: 0.9492 | Validation Mean Precision: 0.8710 | Validation Mean Recall: 0.9028 | Validation Mean F1_score: 0.8809 +2024-05-29 01:16:08 INFO: Epoch 096 | Train Loss: 0.2328 | Train Accuracy: 0.9440 | Validation Loss: 0.2341 | Validation Accuracy: 0.9487 | Validation Mean Precision: 0.8756 | Validation Mean Recall: 0.9014 | Validation Mean F1_score: 0.8792 +2024-05-29 01:16:10 INFO: Epoch 097 | Train Loss: 0.2368 | Train Accuracy: 0.9475 | Validation Loss: 0.2284 | Validation Accuracy: 0.9432 | Validation Mean Precision: 0.8534 | Validation Mean Recall: 0.8919 | Validation Mean F1_score: 0.8662 +2024-05-29 01:16:11 INFO: Epoch 098 | Train Loss: 0.2383 | Train Accuracy: 0.9458 | Validation Loss: 0.2287 | Validation Accuracy: 0.9492 | Validation Mean Precision: 0.8593 | Validation Mean Recall: 0.9070 | Validation Mean F1_score: 0.8711 +2024-05-29 01:16:13 INFO: Epoch 099 | Train Loss: 0.2322 | Train Accuracy: 0.9465 | Validation Loss: 0.2415 | Validation Accuracy: 0.9542 | Validation Mean Precision: 0.9140 | Validation Mean Recall: 0.8597 | Validation Mean F1_score: 0.8844 +2024-05-29 01:16:14 INFO: Epoch 100 | Train Loss: 0.2398 | Train Accuracy: 0.9429 | Validation Loss: 0.2266 | Validation Accuracy: 0.9540 | Validation Mean Precision: 0.8987 | Validation Mean Recall: 0.8803 | Validation Mean F1_score: 0.8885 +2024-05-29 01:16:16 INFO: Epoch 101 | Train Loss: 0.2326 | Train Accuracy: 0.9475 | Validation Loss: 0.2360 | Validation Accuracy: 0.9492 | Validation Mean Precision: 0.8990 | Validation Mean Recall: 0.8713 | Validation Mean F1_score: 0.8846 +2024-05-29 01:16:18 INFO: Epoch 102 | Train Loss: 0.2255 | Train Accuracy: 0.9474 | Validation Loss: 0.2285 | Validation Accuracy: 0.9535 | Validation Mean Precision: 0.8878 | Validation Mean Recall: 0.8961 | Validation Mean F1_score: 0.8883 +2024-05-29 01:16:19 INFO: Epoch 103 | Train Loss: 0.2353 | Train Accuracy: 0.9448 | Validation Loss: 0.2224 | Validation Accuracy: 0.9533 | Validation Mean Precision: 0.8830 | Validation Mean Recall: 0.8941 | Validation Mean F1_score: 0.8862 +2024-05-29 01:16:21 INFO: Epoch 104 | Train Loss: 0.2271 | Train Accuracy: 0.9485 | Validation Loss: 0.2401 | Validation Accuracy: 0.9523 | Validation Mean Precision: 0.8855 | Validation Mean Recall: 0.8681 | Validation Mean F1_score: 0.8759 +2024-05-29 01:16:22 INFO: Epoch 105 | Train Loss: 0.2360 | Train Accuracy: 0.9412 | Validation Loss: 0.2309 | Validation Accuracy: 0.9502 | Validation Mean Precision: 0.8945 | Validation Mean Recall: 0.8722 | Validation Mean F1_score: 0.8824 +2024-05-29 01:16:24 INFO: Epoch 106 | Train Loss: 0.2348 | Train Accuracy: 0.9449 | Validation Loss: 0.2282 | Validation Accuracy: 0.9487 | Validation Mean Precision: 0.8652 | Validation Mean Recall: 0.9024 | Validation Mean F1_score: 0.8771 +2024-05-29 01:16:25 INFO: Epoch 107 | Train Loss: 0.2368 | Train Accuracy: 0.9457 | Validation Loss: 0.2383 | Validation Accuracy: 0.9197 | Validation Mean Precision: 0.8275 | Validation Mean Recall: 0.8991 | Validation Mean F1_score: 0.8548 +2024-05-29 01:16:26 INFO: Early stopping at epoch 106 | Best epoch : 57 +2024-05-29 01:16:26 INFO: Best Validation F1 Score (Macro): 0.8918 +2024-05-29 01:16:26 INFO: Best Validation Recall (Macro): 0.8847 +2024-05-29 01:16:26 INFO: Best Validation Precision (Macro): 0.9005 +2024-05-29 01:16:26 INFO: Best Epoch: 57 +2024-05-29 01:16:26 INFO: Infer Result: +2024-05-29 01:16:26 INFO: Prediction errors: 434 +2024-05-29 01:16:26 INFO: Prediction error percentage: 8.32% +2024-05-29 01:16:26 INFO: Total samples: 5218 +2024-05-29 01:16:26 INFO: Infer Result End: +2024-05-29 01:16:26 INFO: Result: Avg F1: 0.8822 Avg Wrong Percentage: 5.99% +2024-05-29 01:16:26 INFO: Result: Avg Precision: [0.7481330358677849, 0.8581788688175195, 0.949279701595013, 0.9525727597360033] | 0.87704109150408 +2024-05-29 01:16:26 INFO: Result: Avg Recall: [0.8096774193548386, 0.8906921241050119, 0.8885600455321571, 0.9802013422818792] | 0.8922827328184718 +2024-05-29 01:16:26 INFO: Result: Avg F1: [0.7714399759907937, 0.8738125884545493, 0.9175302382524844, 0.9660268498572094] | 0.8822024131387591 diff --git a/client/model.pth b/client/model.pth new file mode 100644 index 0000000..0580501 Binary files /dev/null and b/client/model.pth differ diff --git a/config/config.yaml b/config/config.yaml new file mode 100644 index 0000000..66d7a4e --- /dev/null +++ b/config/config.yaml @@ -0,0 +1,48 @@ +#---设备配置---# +#device: cpu +device: cuda + +#---训练配置---# +n_epochs: 150 +batch_size: 16 +learning_rate: 0.001 +nc: 4 +#data_train: train_val # train: 只用train训练,val做验证, infer做测试;train_val: 用train和val做训练,infer做验证, infer做测试;all: 全部训练,全部验证,全部测试(数据先1/5作为infer,剩下的再1/5作为val,剩下的4/5作为训练) +data_train: train +early_stop_patience: 50 +gamma: 0.98 +step_size: 10 +experiments_count: 5 + +#---检测和推理配置---# +# 检测和推理使用模型路径 +model_path: model/psychology.pth + +#---样本特征---# +# 标签名称 +label_name: 类别 +# 特征名称 +feature_names: + - "强迫症状数字化" + - "人际关系敏感数字化" + - "抑郁数字化" + - "多因子症状" + - "母亲教养方式数字化" + - "父亲教养方式数字化" + - "自评家庭经济条件数字化" + - "有无心理治疗(咨询)史数字化" + - "学业情况数字化" + - "出勤情况数字化" +# 定义特征权重列表 +feature_weights: + - 0.135 + - 0.085 + - 0.08 + - 0.2 + - 0.09 + - 0.09 + - 0.06 + - 0.06 + - 0.08 + - 0.12 + diff --git a/config/config.yaml.bak b/config/config.yaml.bak new file mode 100644 index 0000000..ff9f6cf --- /dev/null +++ b/config/config.yaml.bak @@ -0,0 +1,61 @@ +#---设备配置---# +device: cpu +#device: cuda + +#---训练配置---# +n_epochs: 150 +batch_size: 16 +learning_rate: 0.001 +nc: 4 +use_infer_as_val: true +#data_train: train_val # train: 只用train训练,val做验证, infer做测试;train_val: 用train和val做训练,infer做验证, infer做测试;all: 全部训练,全部验证,全部测试(数据先1/5作为infer,剩下的再1/5作为val,剩下的4/5作为训练) +data_train: all +early_stop_patience: 50 +gamma: 0.98 +step_size: 10 +experiments_count: 50 + +#---训练结果---# +# 日志路径 +log_path: results/training.log +# 训练过程统计图路径 +train_process_path: results/training_progress.png +# 训练结果统计图路径 +train_result_path: results/training_result.png +# 训练模型路径 +model_path: model/psychology.pth +# 用于测试的部分数据路径 +infer_path: results/infer.xlsx + +#---训练原始数据---# +# 训练样本数据路径配置 +data_path: data_processed/feature_label_weighted.xlsx + +#---样本特征---# +# 标签名称 +label_name: 类别 +# 特征名称 +feature_names: + - "强迫症状数字化" + - "人际关系敏感数字化" + - "抑郁数字化" + - "多因子症状" + - "母亲教养方式数字化" + - "父亲教养方式数字化" + - "自评家庭经济条件数字化" + - "有无心理治疗(咨询)史数字化" + - "学业情况数字化" + - "出勤情况数字化" +# 定义特征权重列表 +feature_weights: + - 0.135 + - 0.085 + - 0.08 + - 0.2 + - 0.09 + - 0.09 + - 0.06 + - 0.06 + - 0.08 + - 0.12 + diff --git a/data.xlsx b/data.xlsx new file mode 100644 index 0000000..b6f1688 Binary files /dev/null and b/data.xlsx differ diff --git a/data/data_src.xlsx b/data/data_src.xlsx new file mode 100644 index 0000000..84d946e Binary files /dev/null and b/data/data_src.xlsx differ diff --git a/data_processed/Dropout_Warning_RES.xlsx b/data_processed/Dropout_Warning_RES.xlsx new file mode 100644 index 0000000..dc57eed Binary files /dev/null and b/data_processed/Dropout_Warning_RES.xlsx differ diff --git a/data_processed/Leave_Record_RES.xlsx b/data_processed/Leave_Record_RES.xlsx new file mode 100644 index 0000000..2594979 Binary files /dev/null and b/data_processed/Leave_Record_RES.xlsx differ diff --git a/evaluate_api.py b/evaluate_api.py new file mode 100644 index 0000000..e049a4d --- /dev/null +++ b/evaluate_api.py @@ -0,0 +1,152 @@ +import os +import sys +root_path = os.getcwd() +sys.path.append(root_path) + +import time +import datetime +import signal +import uvicorn +import pandas as pd +from fastapi import FastAPI, Request +from pydantic import BaseModel +from typing import List +from utils.common import evaluate_model +from fastapi.middleware.cors import CORSMiddleware +import logging +import matplotlib.pyplot as plt +import argparse +import numpy as np +import yaml +import threading +import pickle +from fastapi.responses import FileResponse +from fastapi.staticfiles import StaticFiles +from utils.feature_process import create_feature_df, apply_feature_weights, Features + + +app = FastAPI() + +# 定义fastapi返回类 +class ClassificationResult(BaseModel): + precision: list + recall: list + f1: list + wrong_percentage: float + +# 允许所有域名的跨域请求 +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"], + allow_headers=["*"], +) + +# 定义接口 +@app.post("/evaluate/") +async def classify_features(request: Request, features_list: List[Features]): + # 遍历每个特征对象,并将其添加到 all_features 中 + all_features = create_feature_df(features_list) + + # 读取 YAML 配置文件 + config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "config/config.yaml")) + with open(config_path, 'r') as f: + config = yaml.load(f, Loader=yaml.FullLoader) + feature_names = config['feature_names'] + feature_weights = config['feature_weights'] + + # 应用特征权重 + feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) + + start_time = time.time() # 记录开始时间 + + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "evaluate_api")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + + # 训练前设置 + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + data_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"all_features_label_{now}.xlsx")) + config['data_path'] = data_path + feature_label_weighted.to_excel(data_path, index=False) + + # 配置日志 + log_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"evaluate_{now}.log")) + logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + # 开始验证 + list_avg_f1 = [] + list_wrong_percentage = [] + list_precision = [] + list_recall = [] + list_f1 = [] + + # 特征和标签 + X = feature_label_weighted[config['feature_names']].values + y = feature_label_weighted[config['label_name']].values + + print("config: ", config) + logging.info("config: ", config) + avg_f1, wrong_percentage, precision, recall, f1 = evaluate_model(config["model_path"], X, y, config) + list_avg_f1.append(avg_f1) + list_wrong_percentage.append(wrong_percentage) + list_precision.append(precision) + list_recall.append(recall) + list_f1.append(f1) + + logging.info(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + logging.info(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + logging.info(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + logging.info(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + print(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + print(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + print(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + print(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + + end_time = time.time() # 记录结束时间 + # 训练结束 + print("预测耗时:", end_time - start_time, "秒") # 打印执行时间 + + # 返回分类结果和模型文件下载 URL,static不是程序执行路径,而是app.mount的静态文件夹 + log_file_url = f"{request.base_url}evaluate_api/evaluate_{now}.log" + data_file_url = f"{request.base_url}evaluate_api/all_features_label_{now}.xlsx" + + # 返回分类结果和模型文件 + return { + "classification_result": ClassificationResult( + precision=precision, + recall=recall, + f1=f1, + wrong_percentage=wrong_percentage + ), + "data_file": { + "log_file_url": log_file_url, + "data_file_url": data_file_url + } + } + +# 以下是fastapi启动配置 +if __name__ == "__main__": + name_app = os.path.basename(__file__)[0:-3] # Get the name of the script + log_config = { + "version": 1, + "disable_existing_loggers": True, + "handlers": { + "file_handler": { + "class": "logging.FileHandler", + "filename": "logfile.log", + }, + }, + "root": { + "handlers": ["file_handler"], + "level": "INFO", + }, + } + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "evaluate_api")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + # train_api.py同级目录下的static文件夹 + app.mount("/evaluate_api", StaticFiles(directory=static_dir), name="static") + uvicorn.run(app, host="0.0.0.0", port=3397, reload=False) + diff --git a/evaluate_api/evaluate_feature_label_weighted_20240529_014300.xlsx b/evaluate_api/evaluate_feature_label_weighted_20240529_014300.xlsx new file mode 100644 index 0000000..079728c Binary files /dev/null and b/evaluate_api/evaluate_feature_label_weighted_20240529_014300.xlsx differ diff --git a/evaluate_api/evaluate_feature_label_weighted_20240529_014648.xlsx b/evaluate_api/evaluate_feature_label_weighted_20240529_014648.xlsx new file mode 100644 index 0000000..b6f1688 Binary files /dev/null and b/evaluate_api/evaluate_feature_label_weighted_20240529_014648.xlsx differ diff --git a/evaluate_api/evaluate_log_20240529_014300.log b/evaluate_api/evaluate_log_20240529_014300.log new file mode 100644 index 0000000..f6a4810 --- /dev/null +++ b/evaluate_api/evaluate_log_20240529_014300.log @@ -0,0 +1,6 @@ +2024-05-29 01:43:02 INFO: config: +2024-05-29 01:43:03 INFO: Infer Result: +2024-05-29 01:43:03 INFO: Prediction errors: 1070 +2024-05-29 01:43:03 INFO: Prediction error percentage: 4.10% +2024-05-29 01:43:03 INFO: Total samples: 26088 +2024-05-29 01:43:03 INFO: Infer Result End: diff --git a/evaluate_api/evaluate_log_20240529_014648.log b/evaluate_api/evaluate_log_20240529_014648.log new file mode 100644 index 0000000..d873f0b --- /dev/null +++ b/evaluate_api/evaluate_log_20240529_014648.log @@ -0,0 +1,10 @@ +2024-05-29 01:46:51 INFO: config: +2024-05-29 01:46:52 INFO: Infer Result: +2024-05-29 01:46:52 INFO: Prediction errors: 1070 +2024-05-29 01:46:52 INFO: Prediction error percentage: 4.10% +2024-05-29 01:46:52 INFO: Total samples: 26088 +2024-05-29 01:46:52 INFO: Infer Result End: +2024-05-29 01:46:52 INFO: Result: Avg F1: 0.9233 Avg Wrong Percentage: 4.10% +2024-05-29 01:46:52 INFO: Result: Avg Precision: [0.8276923076923077, 0.9590373783922171, 0.9740385781875531, 0.9537483137406051] | 0.9286291445031708 +2024-05-29 01:46:52 INFO: Result: Avg Recall: [0.8733766233766234, 0.8944603629417383, 0.9136322257624033, 0.9965767217076118] | 0.9195114834470941 +2024-05-29 01:46:52 INFO: Result: Avg F1: [0.8499210110584519, 0.9256239189523102, 0.9428688861487876, 0.9746922698178238] | 0.9232765214943434 diff --git a/evaluate_api/evaluate_result_img_20240529_014648.png b/evaluate_api/evaluate_result_img_20240529_014648.png new file mode 100644 index 0000000..42b0bf0 Binary files /dev/null and b/evaluate_api/evaluate_result_img_20240529_014648.png differ diff --git a/evaluate_local.py b/evaluate_local.py new file mode 100644 index 0000000..2699fd5 --- /dev/null +++ b/evaluate_local.py @@ -0,0 +1,86 @@ +import os +import time +import datetime +import pandas as pd +from typing import List +from common import evaluate_model +import logging +import numpy as np +import yaml +from feature_process import create_feature_df, apply_feature_weights, Features, process_features_list +from data_process import preprocess_data, convert_to_list + +if __name__ == "__main__": + # 读取原始数据表 + df_src = pd.read_excel("data/data_src.xlsx") + df_leave = pd.read_excel("data_processed/Leave_Record_RES.xlsx") + df_dropout_warning = pd.read_excel("data_processed/Dropout_Warning_RES.xlsx") + + # 数据预处理 + df = preprocess_data(df_src, df_leave, df_dropout_warning) + + # 转换成数据列表 + features_data_list = convert_to_list(df) + + processed_features_list: List[Features] = process_features_list(features_data_list) + + # 特征预处理 + all_features = create_feature_df(processed_features_list) + + # 读取 YAML 配置文件 + config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "train_local.yaml")) + with open(config_path, 'r') as f: + config = yaml.load(f, Loader=yaml.FullLoader) + feature_names = config['feature_names'] + feature_weights = config['feature_weights'] + + # 应用特征权重 + feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) + + start_time = time.time() # 记录开始时间 + + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "evaluate_local")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + + # 训练前设置 + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + data_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"all_features_label_{now}.xlsx")) + config['data_path'] = data_path + feature_label_weighted.to_excel(data_path, index=False) + + # 配置日志 + log_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"evaluate_{now}.log")) + logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + # 开始验证 + list_avg_f1 = [] + list_wrong_percentage = [] + list_precision = [] + list_recall = [] + list_f1 = [] + + # 特征和标签 + X = feature_label_weighted[config['feature_names']].values + y = feature_label_weighted[config['label_name']].values + + print(config) + avg_f1, wrong_percentage, precision, recall, f1 = evaluate_model(config["model_path"], X, y, config) + list_avg_f1.append(avg_f1) + list_wrong_percentage.append(wrong_percentage) + list_precision.append(precision) + list_recall.append(recall) + list_f1.append(f1) + + logging.info(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + logging.info(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + logging.info(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + logging.info(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + print(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + print(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + print(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + print(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + + end_time = time.time() # 记录结束时间 + # 训练结束 + print("预测耗时:", end_time - start_time, "秒") # 打印执行时间 \ No newline at end of file diff --git a/inference_api.py b/inference_api.py new file mode 100644 index 0000000..030b735 --- /dev/null +++ b/inference_api.py @@ -0,0 +1,111 @@ +import os +import sys +root_path = os.getcwd() +sys.path.append(root_path) + +import time +import datetime +import signal +import uvicorn +import pandas as pd +from fastapi import FastAPI, Request +from pydantic import BaseModel +from typing import List +from utils.common import inference_model +from fastapi.middleware.cors import CORSMiddleware +import logging +import matplotlib.pyplot as plt +import argparse +import numpy as np +import yaml +import threading +import pickle +from fastapi.responses import FileResponse +from fastapi.staticfiles import StaticFiles +from utils.feature_process import create_feature_df, apply_feature_weights, Features + + +app = FastAPI() + +# 定义fastapi返回类 +class PredictionResult(BaseModel): + predictions: list + +# 允许所有域名的跨域请求 +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"], + allow_headers=["*"], +) + +# 定义接口 +@app.post("/inference/") +async def classify_features(request: Request, features_list: List[Features]): + # 遍历每个特征对象,并将其添加到 all_features 中 + all_features = create_feature_df(features_list) + + # 读取 YAML 配置文件 + config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "config/config.yaml")) + with open(config_path, 'r') as f: + config = yaml.load(f, Loader=yaml.FullLoader) + feature_names = config['feature_names'] + feature_weights = config['feature_weights'] + + # 应用特征权重 + feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) + + start_time = time.time() # 记录开始时间 + + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "inference_api")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + + # 训练前设置 + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + data_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"all_features_label_{now}.xlsx")) + config['data_path'] = data_path + feature_label_weighted.to_excel(data_path, index=False) + + # 配置日志 + log_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"inference_{now}.log")) + logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + # 特征和标签 + X = feature_label_weighted[config['feature_names']].values + y = feature_label_weighted[config['label_name']].values + + predictions = inference_model(config["model_path"], X, y, config) + end_time = time.time() # 记录结束时间 + print("预测耗时:", end_time - start_time, "秒") # 打印执行时间 + + print("预测结果:", predictions) + + # 返回预测结果 + return PredictionResult(predictions=predictions) + +# 以下是fastapi启动配置 +if __name__ == "__main__": + name_app = os.path.basename(__file__)[0:-3] # Get the name of the script + log_config = { + "version": 1, + "disable_existing_loggers": True, + "handlers": { + "file_handler": { + "class": "logging.FileHandler", + "filename": "logfile.log", + }, + }, + "root": { + "handlers": ["file_handler"], + "level": "INFO", + }, + } + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "inference_api")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + # train_api.py同级目录下的static文件夹 + app.mount("/inference_api", StaticFiles(directory=static_dir), name="static") + uvicorn.run(app, host="0.0.0.0", port=3397, reload=False) + diff --git a/inference_api/inference_feature_label_weighted_20240529_014934.xlsx b/inference_api/inference_feature_label_weighted_20240529_014934.xlsx new file mode 100644 index 0000000..b5f3bfb Binary files /dev/null and b/inference_api/inference_feature_label_weighted_20240529_014934.xlsx differ diff --git a/inference_api/inference_log_20240529_014934.log b/inference_api/inference_log_20240529_014934.log new file mode 100644 index 0000000..e69de29 diff --git a/inference_local.py b/inference_local.py new file mode 100644 index 0000000..857f650 --- /dev/null +++ b/inference_local.py @@ -0,0 +1,143 @@ +import os +import time +import datetime +import pandas as pd +from typing import List +from common import inference_model +import logging +import numpy as np +import yaml +from feature_process import create_feature_df, apply_feature_weights, Features, process_features_list + +# 模拟发送的特征数据 +features_data1 = { + "somatization": 0.5, + "obsessive_compulsive": 0.3, + "interpersonal_sensitivity": 0.7, + "depression": 0.6, + "anxiety": 0.8, + "hostility": 0.4, + "terror": 0.2, + "paranoia": 0.1, + "psychoticism": 0.9, + "other": 0.2, + "father_parenting_style": 2, + "mother_parenting_style": 3, + "self_assessed_family_economic_condition": 4, + "history_of_psychological_counseling": 1, + "absenteeism_above_average": True, + "academic_warning": False, + "label": -1 +} +features_data2 = { + "somatization": 4.3, + "obsessive_compulsive": 4.1, + "interpersonal_sensitivity": 3.8, + "depression": 4, + "anxiety": 4.2, + "hostility": 4.2, + "terror": 4, + "paranoia": 4.2, + "psychoticism": 3.8, + "other": 3.6, + "father_parenting_style": 1, + "mother_parenting_style": 0, + "self_assessed_family_economic_condition": 0, + "history_of_psychological_counseling": False, + "absenteeism_above_average": True, + "academic_warning": True, + "label": -1 +} +features_data3 = { + "somatization": 1.1, + "obsessive_compulsive": 2.3, + "interpersonal_sensitivity": 2.6, + "depression": 2.2, + "anxiety": 1.6, + "hostility": 1.5, + "terror": 1.6, + "paranoia": 1.5, + "psychoticism": 1.2, + "other": 1.3, + "father_parenting_style": 1, + "mother_parenting_style": 1, + "self_assessed_family_economic_condition": 1, + "history_of_psychological_counseling": False, + "absenteeism_above_average": False, + "academic_warning": False, + "label": -1 +} +features_data4 = { + "somatization": 1.5, + "obsessive_compulsive": 2.4, + "interpersonal_sensitivity": 2.2, + "depression": 3.2, + "anxiety": 1.6, + "hostility": 1.5, + "terror": 3.1, + "paranoia": 1.5, + "psychoticism": 1.9, + "other": 2.6, + "father_parenting_style": 1, + "mother_parenting_style": 1, + "self_assessed_family_economic_condition": 0, + "history_of_psychological_counseling": False, + "absenteeism_above_average": False, + "academic_warning": False, + "label": -1 +} + +# 必须是features_list +# features_data_list = [features_data3] +features_data_list = [features_data4, features_data2, features_data3, features_data1] + +if __name__ == "__main__": + + processed_features_list: List[Features] = process_features_list(features_data_list) + + # 特征预处理 + all_features = create_feature_df(processed_features_list) + + # 读取 YAML 配置文件 + config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "train_local.yaml")) + with open(config_path, 'r') as f: + config = yaml.load(f, Loader=yaml.FullLoader) + feature_names = config['feature_names'] + feature_weights = config['feature_weights'] + + # 应用特征权重 + feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) + + start_time = time.time() # 记录开始时间 + + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "evaluate_local")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + + # 训练前设置 + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + data_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"all_features_label_{now}.xlsx")) + config['data_path'] = data_path + feature_label_weighted.to_excel(data_path, index=False) + + # 配置日志 + log_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"evaluate_{now}.log")) + logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + # 开始验证 + list_avg_f1 = [] + list_wrong_percentage = [] + list_precision = [] + list_recall = [] + list_f1 = [] + + # 特征和标签 + X = feature_label_weighted[config['feature_names']].values + y = feature_label_weighted[config['label_name']].values + + print(config) + predictions = inference_model(config["model_path"], X, y, config) + end_time = time.time() # 记录结束时间 + print("预测耗时:", end_time - start_time, "秒") # 打印执行时间 + + print("预测结果:", predictions) \ No newline at end of file diff --git a/log.txt b/log.txt new file mode 100644 index 0000000..d873f0b --- /dev/null +++ b/log.txt @@ -0,0 +1,10 @@ +2024-05-29 01:46:51 INFO: config: +2024-05-29 01:46:52 INFO: Infer Result: +2024-05-29 01:46:52 INFO: Prediction errors: 1070 +2024-05-29 01:46:52 INFO: Prediction error percentage: 4.10% +2024-05-29 01:46:52 INFO: Total samples: 26088 +2024-05-29 01:46:52 INFO: Infer Result End: +2024-05-29 01:46:52 INFO: Result: Avg F1: 0.9233 Avg Wrong Percentage: 4.10% +2024-05-29 01:46:52 INFO: Result: Avg Precision: [0.8276923076923077, 0.9590373783922171, 0.9740385781875531, 0.9537483137406051] | 0.9286291445031708 +2024-05-29 01:46:52 INFO: Result: Avg Recall: [0.8733766233766234, 0.8944603629417383, 0.9136322257624033, 0.9965767217076118] | 0.9195114834470941 +2024-05-29 01:46:52 INFO: Result: Avg F1: [0.8499210110584519, 0.9256239189523102, 0.9428688861487876, 0.9746922698178238] | 0.9232765214943434 diff --git a/model/psychology.pth b/model/psychology.pth new file mode 100644 index 0000000..a589a4b Binary files /dev/null and b/model/psychology.pth differ diff --git a/psy_api.py b/psy_api.py new file mode 100644 index 0000000..fd5258b --- /dev/null +++ b/psy_api.py @@ -0,0 +1,305 @@ +import os +import sys +root_path = os.getcwd() +sys.path.append(root_path) + +import time +import datetime +import signal +import uvicorn +import pandas as pd +from fastapi import FastAPI, Request +from pydantic import BaseModel +from typing import List +from utils.common import train_detect, evaluate_model, inference_model +from fastapi.middleware.cors import CORSMiddleware +import logging +import matplotlib.pyplot as plt +import argparse +import numpy as np +import yaml +import threading +import pickle +from fastapi.responses import FileResponse +from fastapi.staticfiles import StaticFiles +from utils.feature_process import create_feature_df, apply_feature_weights, Features + +app = FastAPI() + +# 定义fastapi返回类 inference +class PredictionResult(BaseModel): + predictions: list + +# 定义fastapi返回类 +class ClassificationResult(BaseModel): + precision: list + recall: list + f1: list + wrong_percentage: float + +# 允许所有域名的跨域请求 +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"], + allow_headers=["*"], +) + +# 定义接口 +@app.post("/train/") +async def classify_features(request: Request, features_list: List[Features]): + # 遍历每个特征对象,并将其添加到 all_features 中 + all_features = create_feature_df(features_list) + + # 读取 YAML 配置文件 + config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "config/config.yaml")) + with open(config_path, 'r') as f: + config = yaml.load(f, Loader=yaml.FullLoader) + feature_names = config['feature_names'] + feature_weights = config['feature_weights'] + + # 应用特征权重 + feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) + + start_time = time.time() # 记录开始时间 + + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "train_api")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + + # 训练前设置 + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + data_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"train_feature_label_weighted_{now}.xlsx")) + config['data_path'] = data_path + feature_label_weighted.to_excel(data_path, index=False) + + # 添加模型保存路径 + model_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"train_model_{now}.pth")) + config['model_path'] = model_path + + # 配置日志 + log_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"train_log_{now}.log")) + logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + # 配置训练和验证结果图片路径 + train_process_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"train_progress_img_{now}.png")) + config['train_process_path'] = train_process_path + evaluate_result_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"evaluate_result_img_{now}.png")) + config['evaluate_result_path'] = evaluate_result_path + + print("config: ", config) + logging.info("config: ", config) + + # 开始训练 + list_avg_f1 = [] + list_wrong_percentage = [] + list_precision = [] + list_recall = [] + list_f1 = [] + train_times = 1 if config['data_train']==r'all' else config["experiments_count"] + for i in range(train_times): + avg_f1, wrong_percentage, precision, recall, f1 = train_detect(config) + list_avg_f1.append(avg_f1) + list_wrong_percentage.append(wrong_percentage) + list_precision.append(precision) + list_recall.append(recall) + list_f1.append(f1) + + logging.info(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + logging.info(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + logging.info(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + logging.info(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + print(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + print(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + print(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + print(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + + end_time = time.time() # 记录结束时间 + # 训练结束 + print("预测耗时:", end_time - start_time, "秒") # 打印执行时间 + + # 返回分类结果和模型文件下载 URL,static不是程序执行路径,而是app.mount的静态文件夹 + model_file_url = f"{request.base_url}train_api/train_model_{now}.pth" + log_file_url = f"{request.base_url}train_api/train_log_{now}.log" + data_file_url = f"{request.base_url}train_api/train_feature_label_weighted_{now}.xlsx" + + # 返回分类结果和模型文件 + return { + "classification_result": ClassificationResult( + precision=precision, + recall=recall, + f1=f1, + wrong_percentage=wrong_percentage + ), + "data_file": { + "model_file_url": model_file_url, + "log_file_url": log_file_url, + "data_file_url": data_file_url + } + } + +# 定义接口 +@app.post("/evaluate/") +async def classify_features(request: Request, features_list: List[Features]): + # 遍历每个特征对象,并将其添加到 all_features 中 + all_features = create_feature_df(features_list) + + # 读取 YAML 配置文件 + config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "config/config.yaml")) + with open(config_path, 'r') as f: + config = yaml.load(f, Loader=yaml.FullLoader) + feature_names = config['feature_names'] + feature_weights = config['feature_weights'] + + # 应用特征权重 + feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) + + start_time = time.time() # 记录开始时间 + + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "evaluate_api")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + + # 训练前设置 + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + data_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"evaluate_feature_label_weighted_{now}.xlsx")) + config['data_path'] = data_path + feature_label_weighted.to_excel(data_path, index=False) + + # 配置验证结果图片路径 + evaluate_result_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"evaluate_result_img_{now}.png")) + config['evaluate_result_path'] = evaluate_result_path + + # 配置日志 + log_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"evaluate_log_{now}.log")) + logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + # 开始验证 + list_avg_f1 = [] + list_wrong_percentage = [] + list_precision = [] + list_recall = [] + list_f1 = [] + + # 特征和标签 + X = feature_label_weighted[config['feature_names']].values + y = feature_label_weighted[config['label_name']].values + + print("config: ", config) + logging.info("config: ", config) + avg_f1, wrong_percentage, precision, recall, f1 = evaluate_model(config["model_path"], X, y, config) + list_avg_f1.append(avg_f1) + list_wrong_percentage.append(wrong_percentage) + list_precision.append(precision) + list_recall.append(recall) + list_f1.append(f1) + + logging.info(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + logging.info(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + logging.info(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + logging.info(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + print(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + print(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + print(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + print(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + + end_time = time.time() # 记录结束时间 + # 训练结束 + print("预测耗时:", end_time - start_time, "秒") # 打印执行时间 + + # 返回分类结果和模型文件下载 URL,static不是程序执行路径,而是app.mount的静态文件夹 + log_file_url = f"{request.base_url}evaluate_api/evaluate_log_{now}.log" + data_file_url = f"{request.base_url}evaluate_api/evaluate_feature_label_weighted_{now}.xlsx" + + # 返回分类结果和模型文件 + return { + "classification_result": ClassificationResult( + precision=precision, + recall=recall, + f1=f1, + wrong_percentage=wrong_percentage + ), + "data_file": { + "log_file_url": log_file_url, + "data_file_url": data_file_url + } + } + +# 定义接口 +@app.post("/inference/") +async def classify_features(request: Request, features_list: List[Features]): + # 遍历每个特征对象,并将其添加到 all_features 中 + all_features = create_feature_df(features_list) + + # 读取 YAML 配置文件 + config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "config/config.yaml")) + with open(config_path, 'r') as f: + config = yaml.load(f, Loader=yaml.FullLoader) + feature_names = config['feature_names'] + feature_weights = config['feature_weights'] + + # 应用特征权重 + feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) + + start_time = time.time() # 记录开始时间 + + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "inference_api")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + + # 训练前设置 + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + data_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"inference_feature_label_weighted_{now}.xlsx")) + config['data_path'] = data_path + feature_label_weighted.to_excel(data_path, index=False) + + # 配置日志 + log_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"inference_log_{now}.log")) + logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + # 特征和标签 + X = feature_label_weighted[config['feature_names']].values + y = feature_label_weighted[config['label_name']].values + + predictions = inference_model(config["model_path"], X, y, config) + end_time = time.time() # 记录结束时间 + print("预测耗时:", end_time - start_time, "秒") # 打印执行时间 + + print("预测结果:", predictions) + + # 返回预测结果 + return PredictionResult(predictions=predictions) + + +# 以下是fastapi启动配置 +if __name__ == "__main__": + name_app = os.path.basename(__file__)[0:-3] # Get the name of the script + log_config = { + "version": 1, + "disable_existing_loggers": True, + "handlers": { + "file_handler": { + "class": "logging.FileHandler", + "filename": "logfile.log", + }, + }, + "root": { + "handlers": ["file_handler"], + "level": "INFO", + }, + } + # 创建静态文件存放文件夹 + static_dir_train = os.path.abspath(os.path.join(os.path.dirname(__file__), "train_api")) # 设置模型文件和配置文件的存放目录,和本py同级 + static_dir_evaluate = os.path.abspath(os.path.join(os.path.dirname(__file__), "evaluate_api")) + static_dir_inference = os.path.abspath(os.path.join(os.path.dirname(__file__), "inference_api")) + os.makedirs(static_dir_train, exist_ok=True) + os.makedirs(static_dir_evaluate, exist_ok=True) + os.makedirs(static_dir_inference, exist_ok=True) + # 同级目录下的static文件夹 + app.mount("/train_api", StaticFiles(directory=static_dir_train), name="static_dir_train") + app.mount("/evaluate_api", StaticFiles(directory=static_dir_evaluate), name="static_dir_evaluate") + app.mount("/inference_api", StaticFiles(directory=static_dir_evaluate), name="static_dir_inference") + uvicorn.run(app, host="0.0.0.0", port=3397, reload=False) + ## train evl 功能OK了 差infer就可以了;还有就是做一个模型上传机制;目前为止最好的模型就是model下面那个 + diff --git a/train_api.py b/train_api.py new file mode 100644 index 0000000..4dfad6c --- /dev/null +++ b/train_api.py @@ -0,0 +1,156 @@ +import os +import sys +root_path = os.getcwd() +sys.path.append(root_path) + +import time +import datetime +import signal +import uvicorn +import pandas as pd +from fastapi import FastAPI, Request +from pydantic import BaseModel +from typing import List +from utils.common import train_detect +from fastapi.middleware.cors import CORSMiddleware +import logging +import matplotlib.pyplot as plt +import argparse +import numpy as np +import yaml +import threading +import pickle +from fastapi.responses import FileResponse +from fastapi.staticfiles import StaticFiles +from utils.feature_process import create_feature_df, apply_feature_weights, Features + +app = FastAPI() + +# 定义fastapi返回类 +class ClassificationResult(BaseModel): + precision: list + recall: list + f1: list + wrong_percentage: float + +# 允许所有域名的跨域请求 +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"], + allow_headers=["*"], +) + +# 定义接口 +@app.post("/train/") +async def classify_features(request: Request, features_list: List[Features]): + # 遍历每个特征对象,并将其添加到 all_features 中 + all_features = create_feature_df(features_list) + + # 读取 YAML 配置文件 + config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "config/config.yaml")) + with open(config_path, 'r') as f: + config = yaml.load(f, Loader=yaml.FullLoader) + feature_names = config['feature_names'] + feature_weights = config['feature_weights'] + + # 应用特征权重 + feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) + + start_time = time.time() # 记录开始时间 + + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "train_api")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + + # 训练前设置 + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + data_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"all_features_label_{now}.xlsx")) + config['data_path'] = data_path + feature_label_weighted.to_excel(data_path, index=False) + + # 添加模型保存路径 + model_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"model_{now}.pth")) + config['model_path'] = model_path + + # 配置日志 + log_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"train_{now}.log")) + logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + print("config: ", config) + logging.info("config: ", config) + + # 开始训练 + list_avg_f1 = [] + list_wrong_percentage = [] + list_precision = [] + list_recall = [] + list_f1 = [] + train_times = 1 if config['data_train']==r'all' else config["experiments_count"] + for i in range(train_times): + print(config) + avg_f1, wrong_percentage, precision, recall, f1 = train_detect(config) + list_avg_f1.append(avg_f1) + list_wrong_percentage.append(wrong_percentage) + list_precision.append(precision) + list_recall.append(recall) + list_f1.append(f1) + + logging.info(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + logging.info(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + logging.info(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + logging.info(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + print(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + print(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + print(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + print(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + + end_time = time.time() # 记录结束时间 + # 训练结束 + print("预测耗时:", end_time - start_time, "秒") # 打印执行时间 + + # 返回分类结果和模型文件下载 URL,static不是程序执行路径,而是app.mount的静态文件夹 + model_file_url = f"{request.base_url}train_api/model_{now}.pth" + log_file_url = f"{request.base_url}train_api/train_{now}.log" + data_file_url = f"{request.base_url}train_api/all_features_label_{now}.xlsx" + + # 返回分类结果和模型文件 + return { + "classification_result": ClassificationResult( + precision=precision, + recall=recall, + f1=f1, + wrong_percentage=wrong_percentage + ), + "data_file": { + "model_file_url": model_file_url, + "log_file_url": log_file_url, + "data_file_url": data_file_url + } + } + +# 以下是fastapi启动配置 +if __name__ == "__main__": + name_app = os.path.basename(__file__)[0:-3] # Get the name of the script + log_config = { + "version": 1, + "disable_existing_loggers": True, + "handlers": { + "file_handler": { + "class": "logging.FileHandler", + "filename": "logfile.log", + }, + }, + "root": { + "handlers": ["file_handler"], + "level": "INFO", + }, + } + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "train_api")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + # train_api.py同级目录下的static文件夹 + app.mount("/train_api", StaticFiles(directory=static_dir), name="static") + uvicorn.run(app, host="0.0.0.0", port=3397, reload=False) + diff --git a/train_api.yaml b/train_api.yaml new file mode 100644 index 0000000..a548889 --- /dev/null +++ b/train_api.yaml @@ -0,0 +1,61 @@ +#---设备配置---# +device: cpu +#device: cuda + +#---训练配置---# +n_epochs: 150 +batch_size: 16 +learning_rate: 0.001 +nc: 4 +use_infer_as_val: true +#data_train: train_val # train: 只用train训练,val做验证, infer做测试;train_val: 用train和val做训练,infer做验证, infer做测试;all: 全部训练,全部验证,全部测试(数据先1/5作为infer,剩下的再1/5作为val,剩下的4/5作为训练) +data_train: all +early_stop_patience: 50 +gamma: 0.98 +step_size: 10 +experiments_count: 50 + +#---训练结果---# +# 日志路径 +log_path: results/training.log +# 训练过程统计图路径 +train_process_path: results/training_progress.png +# 训练结果统计图路径 +train_result_path: results/training_result.png +# 训练模型路径 +model_path: results/psychology.pth +# 用于测试的部分数据路径 +infer_path: results/infer.xlsx + +#---训练原始数据---# +# 训练样本数据路径配置 +data_path: data_processed/feature_label_weighted.xlsx + +#---样本特征---# +# 标签名称 +label_name: 类别 +# 特征名称 +feature_names: + - "强迫症状数字化" + - "人际关系敏感数字化" + - "抑郁数字化" + - "多因子症状" + - "母亲教养方式数字化" + - "父亲教养方式数字化" + - "自评家庭经济条件数字化" + - "有无心理治疗(咨询)史数字化" + - "学业情况数字化" + - "出勤情况数字化" +# 定义特征权重列表 +feature_weights: + - 0.135 + - 0.085 + - 0.08 + - 0.2 + - 0.09 + - 0.09 + - 0.06 + - 0.06 + - 0.08 + - 0.12 + diff --git a/train_local.py b/train_local.py new file mode 100644 index 0000000..ccd1e25 --- /dev/null +++ b/train_local.py @@ -0,0 +1,87 @@ +import os +import time +import datetime +import pandas as pd +from typing import List +from common import train_detect +import logging +import numpy as np +import yaml +from feature_process import create_feature_df, apply_feature_weights, Features, process_features_list +from data_process import preprocess_data, convert_to_list + +if __name__ == "__main__": + # 读取原始数据表 + df_src = pd.read_excel("data/data_src.xlsx") + df_leave = pd.read_excel("data_processed/Leave_Record_RES.xlsx") + df_dropout_warning = pd.read_excel("data_processed/Dropout_Warning_RES.xlsx") + + # 数据预处理 + df = preprocess_data(df_src, df_leave, df_dropout_warning) + + # 转换成数据列表 + features_data_list = convert_to_list(df) + + processed_features_list: List[Features] = process_features_list(features_data_list) + + # 特征预处理 + all_features = create_feature_df(processed_features_list) + + # 读取 YAML 配置文件 + config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "train_local.yaml")) + with open(config_path, 'r') as f: + config = yaml.load(f, Loader=yaml.FullLoader) + feature_names = config['feature_names'] + feature_weights = config['feature_weights'] + + # 应用特征权重 + feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) + + start_time = time.time() # 记录开始时间 + + # 创建静态文件存放文件夹 + static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "static_local")) # 设置模型文件和配置文件的存放目录,和本py同级 + os.makedirs(static_dir, exist_ok=True) + + # 训练前设置 + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + data_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"all_features_label_{now}.xlsx")) + config['data_path'] = data_path + feature_label_weighted.to_excel(data_path, index=False) + + # 添加模型保存路径 + model_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"model_{now}.pth")) + config['model_path'] = model_path + + # 配置日志 + log_path = os.path.abspath(os.path.join(os.path.dirname(__file__), static_dir, f"train_{now}.log")) + logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + # 开始训练 + list_avg_f1 = [] + list_wrong_percentage = [] + list_precision = [] + list_recall = [] + list_f1 = [] + train_times = 1 if config['data_train']==r'all' else config["experiments_count"] + for i in range(train_times): + print(config) + avg_f1, wrong_percentage, precision, recall, f1 = train_detect(config) + list_avg_f1.append(avg_f1) + list_wrong_percentage.append(wrong_percentage) + list_precision.append(precision) + list_recall.append(recall) + list_f1.append(f1) + + logging.info(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + logging.info(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + logging.info(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + logging.info(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + print(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + print(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + print(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + print(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + + end_time = time.time() # 记录结束时间 + # 训练结束 + print("预测耗时:", end_time - start_time, "秒") # 打印执行时间 \ No newline at end of file diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/__pycache__/__init__.cpython-310.pyc b/utils/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000..eff5549 Binary files /dev/null and b/utils/__pycache__/__init__.cpython-310.pyc differ diff --git a/utils/__pycache__/common.cpython-310.pyc b/utils/__pycache__/common.cpython-310.pyc new file mode 100644 index 0000000..1b4da1e Binary files /dev/null and b/utils/__pycache__/common.cpython-310.pyc differ diff --git a/utils/__pycache__/data_process.cpython-310.pyc b/utils/__pycache__/data_process.cpython-310.pyc new file mode 100644 index 0000000..0a0c5e4 Binary files /dev/null and b/utils/__pycache__/data_process.cpython-310.pyc differ diff --git a/utils/__pycache__/feature_process.cpython-310.pyc b/utils/__pycache__/feature_process.cpython-310.pyc new file mode 100644 index 0000000..f7314fd Binary files /dev/null and b/utils/__pycache__/feature_process.cpython-310.pyc differ diff --git a/utils/common.py b/utils/common.py new file mode 100644 index 0000000..5d85576 --- /dev/null +++ b/utils/common.py @@ -0,0 +1,348 @@ +import os +import yaml +import pandas as pd +import numpy as np +import torch +from torch import nn +from torch.utils.data import DataLoader, TensorDataset +from sklearn.model_selection import StratifiedKFold +from sklearn.metrics import precision_score, recall_score, f1_score +from sklearn.utils.class_weight import compute_class_weight +import logging +import matplotlib.pyplot as plt +import argparse + + +class MLP(nn.Module): + def __init__(self, config): + super(MLP, self).__init__() + self.model = nn.Sequential( + nn.Linear(len(config['feature_names']), 32), + nn.ReLU(), + nn.Linear(32, 128), + nn.ReLU(), + nn.Linear(128, 32), + nn.ReLU(), + nn.Linear(32, config['nc']), + ) + + def forward(self, x): + return self.model(x) + +def load_and_split_data(config): + parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + file_path = os.path.join(parent_dir, config['data_path']) + + data = pd.read_excel(file_path) + + X = data[config['feature_names']].values + y = data[config['label_name']].values + + skf_outer = StratifiedKFold(n_splits=5, shuffle=True) + train_index_outer, test_index_outer = next(skf_outer.split(X, y)) + X_train_val, X_infer = X[train_index_outer], X[test_index_outer] + y_train_val, y_infer = y[train_index_outer], y[test_index_outer] + + skf_inner = StratifiedKFold(n_splits=5, shuffle=True) + train_index_inner, test_index_inner = next(skf_inner.split(X_train_val, y_train_val)) + X_train, X_val = X_train_val[train_index_inner], X_train_val[test_index_inner] + y_train, y_val = y_train_val[train_index_inner], y_train_val[test_index_inner] + + return X, y, X_train_val, y_train_val, X_train, y_train, X_val, y_val, X_infer, y_infer + +def save_model(model_path, best_model): + torch.save(best_model, model_path) + +def evaluate_model(model_path, X_infer, y_infer, config): + # 如果传入的是模型文件路径,则从该路径加载模型 + if isinstance(model_path, str): + model = MLP(config).to(config['device']) + model.load_state_dict(torch.load(model_path, map_location=config['device'])) # 加载训练好的模型参数 + else: + model = model_path + # infer_data = pd.DataFrame(X_infer, columns=config['feature_names']) + # infer_data[config['label_name']] = y_infer + # infer_data.to_excel(os.path.join(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")), config['infer_path']), index=False) + + model.eval() + + with torch.no_grad(): + outputs = model(torch.from_numpy(X_infer).float().to(config['device'])) + + _, predictions = torch.max(outputs, 1) + + wrong_indices = np.where(y_infer != predictions.cpu().numpy())[0] + + wrong_count = len(wrong_indices) + total_count = len(y_infer) + wrong_percentage = (wrong_count / total_count) * 100 + + print("Infer Result: ") + logging.info("Infer Result: ") + print("预测错误数量:", wrong_count) + print("预测错误占总数量的百分比:", wrong_percentage, "%") + print("总数量:", total_count) + + logging.info(f"Prediction errors: {wrong_count}") + logging.info(f"Prediction error percentage: {wrong_percentage:.2f}%") + logging.info(f"Total samples: {total_count}") + + precision = precision_score(y_infer, predictions.cpu().numpy(), average=None) + recall = recall_score(y_infer, predictions.cpu().numpy(), average=None) + f1 = f1_score(y_infer, predictions.cpu().numpy(), average=None) + + avg_precision = np.mean(precision) + avg_recall = np.mean(recall) + avg_f1 = np.mean(f1) + + for i in range(len(precision)): + print(f"Class {i} Precision: {precision[i]:.4f}, Recall: {recall[i]:.4f}, F1: {f1[i]:.4f}") + + print("精确率:", precision) + print("召回率:", recall) + print("F1得分:", f1) + print("平均精确率:", avg_precision) + print("平均召回率:", avg_recall) + print("平均F1得分:", avg_f1) + print("Infer Result End: ") + logging.info("Infer Result End: ") + + fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(15, 5)) + ax1.bar(np.arange(len(precision)), precision) + ax1.set_title('Precision') + ax2.bar(np.arange(len(recall)), recall) + ax2.set_title('Recall') + ax3.bar(np.arange(len(f1)), f1) + ax3.set_title('F1 Score') + # 保存图片 + parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + evaluate_result_path = os.path.join(parent_dir, config['evaluate_result_path']) + plt.savefig(evaluate_result_path) + + return avg_f1, wrong_percentage, precision, recall, f1 + +def inference_model(model_path, X_infer, y_infer, config): + # 如果传入的是模型文件路径,则从该路径加载模型 + if isinstance(model_path, str): + model = MLP(config).to(config['device']) + model.load_state_dict(torch.load(model_path, map_location=config['device'])) # 加载训练好的模型参数 + else: + model = model_path + # infer_data = pd.DataFrame(X_infer, columns=config['feature_names']) + # infer_data[config['label_name']] = y_infer + # infer_data.to_excel(os.path.join(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")), config['infer_path']), index=False) + + model.eval() + + # 推理 + with torch.no_grad(): + outputs = model(torch.from_numpy(X_infer).float().to(config['device'])) + + # 获取预测结果 + _, predictions = torch.max(outputs, 1) + + # 实际类别从1开始,程序类别从0开始 + predictions += 1 + + # 打印预测结果 + # print("预测结果:", predictions.cpu().numpy()) + # 返回预测结果 + return predictions.cpu().numpy().tolist() + +def train_detect(config): + X, y, X_train_val, y_train_val, X_train, y_train, X_val, y_val, X_infer, y_infer = load_and_split_data(config) + + if config['data_train'] == r'train_val': + train_dataset = TensorDataset(torch.from_numpy(X_train_val).float().to(config['device']), torch.from_numpy(y_train_val).long().to(config['device'])) + val_dataset = TensorDataset(torch.from_numpy(X_infer).float().to(config['device']), torch.from_numpy(y_infer).long().to(config['device'])) + class_weights = torch.tensor(compute_class_weight('balanced', classes=np.unique(y_train_val), y=y_train_val), dtype=torch.float32).to(config['device']) + logging.info(f"Class weights: {class_weights}") + elif config['data_train'] == r'train': + train_dataset = TensorDataset(torch.from_numpy(X_train).float().to(config['device']), torch.from_numpy(y_train).long().to(config['device'])) + val_dataset = TensorDataset(torch.from_numpy(X_val).float().to(config['device']), torch.from_numpy(y_val).long().to(config['device'])) + class_weights = torch.tensor(compute_class_weight('balanced', classes=np.unique(y_train), y=y_train), dtype=torch.float32).to(config['device']) + logging.info(f"Class weights: {class_weights}") + elif config['data_train'] == r'all': + train_dataset = TensorDataset(torch.from_numpy(X).float().to(config['device']), torch.from_numpy(y).long().to(config['device'])) + val_dataset = TensorDataset(torch.from_numpy(X).float().to(config['device']), torch.from_numpy(y).long().to(config['device'])) + X_infer = X + y_infer = y + class_weights = torch.tensor(compute_class_weight('balanced', classes=np.unique(y), y=y), dtype=torch.float32).to(config['device']) + logging.info(f"Class weights: {class_weights}") + else: + print("Error: Set data_train first in yaml!") + logging.error("Error: Set data_train first in yaml!") + + + train_loader = DataLoader(train_dataset, batch_size=config['batch_size'], shuffle=True) + val_loader = DataLoader(val_dataset, batch_size=config['batch_size']) + + model = MLP(config).to(config['device']) + + criterion = nn.CrossEntropyLoss(weight=class_weights) + optimizer = torch.optim.Adam(model.parameters(), lr=config['learning_rate']) + scheduler = torch.optim.lr_scheduler.StepLR(optimizer, config['step_size'], config['gamma']) + + best_val_f1, best_val_recall, best_val_precision, best_epoch, best_model = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, config) + + # 保存模型 + parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + model_path = os.path.join(parent_dir, config['model_path']) + save_model(model_path, best_model) + + logging.info(f"Best Validation F1 Score (Macro): {best_val_f1:.4f}") + logging.info(f"Best Validation Recall (Macro): {best_val_recall:.4f}") + logging.info(f"Best Validation Precision (Macro): {best_val_precision:.4f}") + logging.info(f"Best Epoch: {best_epoch + 1}") + print(f"Best Validation F1 Score (Macro): {best_val_f1:.4f}") + print(f"Best Validation Recall (Macro): {best_val_recall:.4f}") + print(f"Best Validation Precision (Macro): {best_val_precision:.4f}") + print(f"Best Epoch: {best_epoch + 1}") + + avg_f1, wrong_percentage, precision, recall, f1 = evaluate_model(model, X_infer, y_infer, config) + + return avg_f1, wrong_percentage, precision, recall, f1 + +def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, config): + n_epochs = config['n_epochs'] + best_val_f1 = 0.0 + best_val_recall = 0.0 + best_val_precision = 0.0 + best_epoch = -1 + best_model = None + patience = config['early_stop_patience'] + trigger_times = 0 + + train_loss_history = [] + train_acc_history = [] + val_loss_history = [] + val_acc_history = [] + val_f1_history = [] + val_precision_history = [] + val_recall_history = [] + + plt.rcParams['figure.max_open_warning'] = 50 + + for epoch in range(n_epochs): + # 训练阶段 + model.train() + train_loss, train_acc = 0, 0 + for inputs, targets in train_loader: + optimizer.zero_grad() + outputs = model(inputs) + loss = criterion(outputs, targets) + loss.backward() + optimizer.step() + train_loss += loss.item() * inputs.size(0) + _, preds = torch.max(outputs, 1) + train_acc += torch.sum(preds == targets.data) + + train_loss /= len(train_loader.dataset) + train_acc = train_acc.double().cpu() / len(train_loader.dataset) + + # 更新学习率 + scheduler.step() + + # 验证阶段 + model.eval() + val_loss, val_acc, all_preds, all_targets = 0, 0, [], [] + with torch.no_grad(): + for inputs, targets in val_loader: + outputs = model(inputs) + loss = criterion(outputs, targets) + val_loss += loss.item() * inputs.size(0) + _, preds = torch.max(outputs, 1) + val_acc += torch.sum(preds == targets.data) + all_preds.extend(preds.cpu().numpy()) + all_targets.extend(targets.cpu().numpy()) + + val_loss /= len(val_loader.dataset) + val_acc = val_acc.double().cpu() / len(val_loader.dataset) + + class_precisions_m = precision_score(all_targets, all_preds, average='macro') + class_recalls_m = recall_score(all_targets, all_preds, average='macro') + class_f1_scores_m = f1_score(all_targets, all_preds, average='macro') + + logging.info(f'Epoch {epoch+1:0{3}d} | Train Loss: {train_loss:.4f} | Train Accuracy: {train_acc:.4f} | Validation Loss: {val_loss:.4f} | Validation Accuracy: {val_acc:.4f} | Validation Mean Precision: {class_precisions_m:.4f} | Validation Mean Recall: {class_recalls_m:.4f} | Validation Mean F1_score: {class_f1_scores_m:.4f}') + print(f'Epoch {epoch+1:0{3}d} | Train Loss: {train_loss:.4f} | Train Accuracy: {train_acc:.4f} | Validation Loss: {val_loss:.4f} | Validation Accuracy: {val_acc:.4f} | Validation Mean Precision: {class_precisions_m:.4f} | Validation Mean Recall: {class_recalls_m:.4f} | Validation Mean F1_score: {class_f1_scores_m:.4f}') + + train_loss_history.append(train_loss) + train_acc_history.append(train_acc) + val_loss_history.append(val_loss) + val_acc_history.append(val_acc) + val_f1_history.append(class_f1_scores_m) + val_precision_history.append(class_precisions_m) + val_recall_history.append(class_recalls_m) + + # 打印训练和验证过程的可视化图片 + plt.close('all') + fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(15, 5)) + ax1.plot(train_loss_history, label='Train Loss') + ax1.plot(val_loss_history, label='Validation Loss') + ax1.set_title('Loss') + ax1.legend() + ax2.plot(train_acc_history, label='Train Accuracy') + ax2.plot(val_acc_history, label='Validation Accuracy') + ax2.set_title('Accuracy') + ax2.legend() + ax3.plot(val_f1_history, label='Validation F1') + ax3.plot(val_precision_history, label='Validation Precision') + ax3.plot(val_recall_history, label='Validation Recall') + ax3.set_title('Precision Recall F1-Score (Macro Mean)') + ax3.legend() + # 保存图片 + parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + train_process_path = os.path.join(parent_dir, config['train_process_path']) + plt.savefig(train_process_path) + + if class_f1_scores_m > best_val_f1: + best_val_f1 = class_f1_scores_m + best_val_recall = class_recalls_m + best_val_precision = class_precisions_m + best_epoch = epoch + best_model = model.state_dict() + trigger_times = 0 + else: + trigger_times += 1 + if trigger_times >= patience: + logging.info(f'Early stopping at epoch {epoch} | Best epoch : {best_epoch + 1}') + print(f'Early stopping at epoch {epoch} | Best epoch : {best_epoch + 1}') + break + + return best_val_f1, best_val_recall, best_val_precision, best_epoch, best_model + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('--config', type=str, default='config.yaml', help='Path to the configuration file') + args = parser.parse_args() + with open(args.config, 'r') as f: + config = yaml.load(f, Loader=yaml.FullLoader) + + # 配置日志 + parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + log_path = os.path.join(parent_dir, config['log_path']) + logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + list_avg_f1 = [] + list_wrong_percentage = [] + list_precision = [] + list_recall = [] + list_f1 = [] + train_times = 1 if config['data_train']==r'all' else config["experiments_count"] + for i in range(train_times): + avg_f1, wrong_percentage, precision, recall, f1 = train_detect(config) + list_avg_f1.append(avg_f1) + list_wrong_percentage.append(wrong_percentage) + list_precision.append(precision) + list_recall.append(recall) + list_f1.append(f1) + + logging.info(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + logging.info(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + logging.info(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + logging.info(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") + + print(f"Result: Avg F1: {sum(list_avg_f1) / len(list_avg_f1):.4f} Avg Wrong Percentage: {sum(list_wrong_percentage) / len(list_wrong_percentage):.2f}%") + print(f"Result: Avg Precision: {[sum(p[i] for p in list_precision) / len(list_precision) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}") + print(f"Result: Avg Recall: {[sum(r[i] for r in list_recall) / len(list_recall) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}") + print(f"Result: Avg F1: {[sum(f1[i] for f1 in list_f1) / len(list_f1) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}") \ No newline at end of file diff --git a/utils/data_process.py b/utils/data_process.py new file mode 100644 index 0000000..b98a2c4 --- /dev/null +++ b/utils/data_process.py @@ -0,0 +1,93 @@ +from pydantic import BaseModel +import requests +import pandas as pd +import os + +def preprocess_data(df_src, df_leave, df_dropout_warning): + """ + 对原始数据进行预处理,返回处理好的 DataFrame。 + + 参数: + df_src (pandas.DataFrame): 学生信息表 + df_leave (pandas.DataFrame): 请假记录表 + df_dropout_warning (pandas.DataFrame): 学业预警表 + + 返回: + pandas.DataFrame: 处理好的数据 DataFrame + """ + # 定义SCL-90的10个因子 + scl_90_factors = ["躯体化", "强迫症状", "人际关系敏感", "抑郁", "焦虑", "敌对", "恐怖", "偏执", "精神病性", "其他"] + new_factor_names = ["somatization", "obsessive_compulsive", "interpersonal_sensitivity", "depression", "anxiety", "hostility", "terror", "paranoia", "psychoticism", "other"] + + def calculate_warning_level(row): + factors = row[scl_90_factors] + if (factors >= 4).sum() >= 1 or (factors >= 3).sum() >= 8: + return 1 + elif (factors >= 3).sum() >= 1: + return 2 + elif (factors >= 2).sum() >= 1: + return 3 + else: + return 4 + + # 根据学号填充请假次数 + df_leave['请假次数'] = df_leave['学号'].map(df_leave.groupby('学号')['请假次数'].sum().to_dict()) + df_src['请假次数'] = df_src['编号'].map(df_leave.set_index('学号')['请假次数']).fillna(0) + # 计算请假次数平均值 + leave_mean = df_leave['请假次数'].mean() + + # 根据学号填充是否受过退学预警 + df_dropout_warning['是否受过退学预警'] = df_dropout_warning['学号'].map(df_dropout_warning.groupby('学号')['是否受过退学预警'].sum().to_dict()) + df_src['是否受过退学预警'] = df_src['编号'].map(df_dropout_warning.set_index('学号')['是否受过退学预警']).fillna(0) + + # 计算预警等级 + df_src['类别'] = df_src.apply(calculate_warning_level, axis=1) + + # 英文数字化特征 + for i, factor in enumerate(scl_90_factors): + df_src[new_factor_names[i]] = df_src[factor] + df_src['label'] = df_src['类别'].apply(lambda x: x - 1) + + # 对df_src进行统一处理 + df_src['father_parenting_style'] = df_src['父亲教养方式'].apply(lambda x: 1 if x == "温暖与理解" else 0) + df_src['mother_parenting_style'] = df_src['母亲教养方式'].apply(lambda x: 1 if x == "温暖与理解" else 0) + df_src['self_assessed_family_economic_condition'] = df_src['自评家庭经济条件'].apply(lambda x: 2 if x == "贫困" else 1 if x == "较差" else 0) + df_src['history_of_psychological_counseling'] = df_src['心理治疗(咨询)史'].apply(lambda x: 0 if x in ['无', '没有'] else 1) + df_src['absenteeism_above_average'] = df_src['请假次数'].apply(lambda x: 1 if x >= leave_mean else 0) + df_src['academic_warning'] = df_src['是否受过退学预警'].apply(lambda x: 1 if x == 1 else 0) + + return df_src + +def convert_to_list(df): + """ + 将 DataFrame 转换成包含所有特征和标签的数据列表。 + + 参数: + df (pandas.DataFrame): 处理好的数据 DataFrame + + 返回: + list: 包含所有特征和标签的数据列表 + """ + features_data_list = [] + for _, row in df.iterrows(): + features_data = { + "somatization": row["somatization"], + "obsessive_compulsive": row["obsessive_compulsive"], + "interpersonal_sensitivity": row["interpersonal_sensitivity"], + "depression": row["depression"], + "anxiety": row["anxiety"], + "hostility": row["hostility"], + "terror": row["terror"], + "paranoia": row["paranoia"], + "psychoticism": row["psychoticism"], + "other": row["other"], + "father_parenting_style": row["father_parenting_style"], + "mother_parenting_style": row["mother_parenting_style"], + "self_assessed_family_economic_condition": row["self_assessed_family_economic_condition"], + "history_of_psychological_counseling": row["history_of_psychological_counseling"], + "absenteeism_above_average": row["absenteeism_above_average"], + "academic_warning": row["academic_warning"], + "label": row["label"] + } + features_data_list.append(features_data) + return features_data_list \ No newline at end of file diff --git a/utils/feature_process.py b/utils/feature_process.py new file mode 100644 index 0000000..dbddf50 --- /dev/null +++ b/utils/feature_process.py @@ -0,0 +1,134 @@ +import os +import sys +root_path = os.getcwd() +sys.path.append(root_path) + +import time +import datetime +import signal +import uvicorn +import pandas as pd +from fastapi import FastAPI, Request +from pydantic import BaseModel +from typing import List +from fastapi.middleware.cors import CORSMiddleware +import logging +import matplotlib.pyplot as plt +import argparse +import numpy as np +import yaml +import threading +import pickle +from fastapi.responses import FileResponse +from fastapi.staticfiles import StaticFiles + +# 定义单个样本的特征类 +class Features(BaseModel): + # 10个SCL评测量(后续再处理)范围0-4 + somatization: float + obsessive_compulsive: float + interpersonal_sensitivity: float + depression: float + anxiety: float + hostility: float + terror: float + paranoia: float + psychoticism: float + other: float + # 基本信息特征量 + father_parenting_style: int # 温暖与理解:1;其他:0 + mother_parenting_style: int # 温暖与理解:1;其他:0 + self_assessed_family_economic_condition: int # 贫困:2;较差:1;其他:0 + history_of_psychological_counseling: bool # 有:1;无:0 + # 日常行为特征量 + absenteeism_above_average: bool # 大于平均次数:1;小于等于:0 + academic_warning: bool # 有预警:1;无预警:0 + # 标签 + label: int # 0-3 共4个类别 + +def process_features_list(features_list: List[dict]) -> List[Features]: + """ + 将包含字典的列表转换为包含 Features 实例的列表 + """ + return [Features(**features_dict) for features_dict in features_list] + +def create_feature_df(features_list): + """ + 根据features_list对象创建一个DataFrame。 + + 参数: + features_list (Features): 包含特征值的对象的数组 + + 返回: + pandas.DataFrame: 包含特征和标签的DataFrame + """ + + # 定义一个空的 DataFrame 用于存储所有样本特征 + all_features = pd.DataFrame() + + for features in features_list: + relevant_features = { + "somatization": features.somatization, + "obsessive_compulsive": features.obsessive_compulsive, + "interpersonal_sensitivity": features.interpersonal_sensitivity, + "depression": features.depression, + "anxiety": features.anxiety, + "hostility": features.hostility, + "terror": features.terror, + "paranoia": features.paranoia, + "psychoticism": features.psychoticism, + "other": features.other + } + df_feature = pd.DataFrame({ + # 数字化特征--基本信息 + '父亲教养方式数字化': [(lambda x: 0.59 if x == 1 else 0.46)(features.father_parenting_style)], + '母亲教养方式数字化': [(lambda x: 0.69 if x == 1 else 0.56)(features.mother_parenting_style)], + '自评家庭经济条件数字化': [(lambda x: 0.54 if x in [2, 1] else 0.47)(features.self_assessed_family_economic_condition)], + '有无心理治疗(咨询)史数字化': [(lambda x: 0.21 if x else 0.09)(features.history_of_psychological_counseling)], + # 数字化特征--症状因子 + '强迫症状数字化': [features.obsessive_compulsive / 4], + '人际关系敏感数字化': [features.interpersonal_sensitivity / 4], + '抑郁数字化': [features.depression / 4], + '多因子症状': [(lambda x: sum(1 for value in x.values() if value > 3.0) / 10)(relevant_features)], + # 数字化特征--日常行为 + '出勤情况数字化': [0.74 if features.absenteeism_above_average else 0.67], + '学业情况数字化': [0.59 if features.academic_warning else 0.50], + "类别": [features.label] + }) + all_features = pd.concat([all_features, df_feature], ignore_index=True) + + return all_features + +def apply_feature_weights(df, feature_names, feature_weights): + """ + 将特征权重应用到DataFrame中。 + + 参数: + df (pandas.DataFrame): 包含特征和标签的DataFrame + feature_names (list): 特征名称列表 + feature_weights (list): 特征权重列表 + + 返回: + pandas.DataFrame: 应用权重后的DataFrame + """ + # 找到最大值 + max_value = max(feature_weights) + + # 缩放权重 + feature_weights_scaled = [x / max_value for x in feature_weights] + + # 打印缩放后的特征权重 + # print("Scaled Feature Weights:", feature_weights_scaled) + + # 将特征和标签分开,并做归一化处理 + X = df[feature_names].values + y = df['类别'].values + + # 分别乘以权重,放在归一化后 + for i in range(len(feature_names)): + X[:, i] = X[:, i] * feature_weights_scaled[i] + + feature_label_weighted = pd.DataFrame(X, columns=feature_names) + feature_label_weighted['类别'] = y + + return feature_label_weighted \ No newline at end of file