Compare commits

...

5 Commits
master ... v2

@ -18,9 +18,9 @@ def download_file(data_file_info, save_dir):
log_file_url = data_file_info["log_file_url"] log_file_url = data_file_info["log_file_url"]
log_save_path = os.path.join(save_dir, "log.txt") log_save_path = os.path.join(save_dir, "log.txt")
response = requests.get(log_file_url) response = requests.get(log_file_url)
with open(log_save_path, 'wb') as file: # with open(log_save_path, 'wb') as file:
file.write(response.content) # file.write(response.content)
print(f"Log file saved to: {log_save_path}") # print(f"Log file saved to: {log_save_path}")
else: else:
print("无法获取日志文件信息") print("无法获取日志文件信息")
@ -29,9 +29,9 @@ def download_file(data_file_info, save_dir):
data_file_url = data_file_info["data_file_url"] data_file_url = data_file_info["data_file_url"]
data_save_path = os.path.join(save_dir, "data.xlsx") data_save_path = os.path.join(save_dir, "data.xlsx")
response = requests.get(data_file_url) response = requests.get(data_file_url)
with open(data_save_path, 'wb') as file: # with open(data_save_path, 'wb') as file:
file.write(response.content) # file.write(response.content)
print(f"Data file saved to: {data_save_path}") # print(f"Data file saved to: {data_save_path}")
else: else:
print("无法获取数据文件信息") print("无法获取数据文件信息")

@ -16,9 +16,9 @@ def download_file(data_file_info, save_dir):
model_file_url = data_file_info["model_file_url"] model_file_url = data_file_info["model_file_url"]
model_save_path = os.path.join(save_dir, "model.pth") model_save_path = os.path.join(save_dir, "model.pth")
response = requests.get(model_file_url) response = requests.get(model_file_url)
with open(model_save_path, 'wb') as file: # with open(model_save_path, 'wb') as file:
file.write(response.content) # file.write(response.content)
print(f"Model saved to: {model_save_path}") # print(f"Model saved to: {model_save_path}")
else: else:
print("无法获取模型文件信息") print("无法获取模型文件信息")
@ -27,9 +27,9 @@ def download_file(data_file_info, save_dir):
log_file_url = data_file_info["log_file_url"] log_file_url = data_file_info["log_file_url"]
log_save_path = os.path.join(save_dir, "log.txt") log_save_path = os.path.join(save_dir, "log.txt")
response = requests.get(log_file_url) response = requests.get(log_file_url)
with open(log_save_path, 'wb') as file: # with open(log_save_path, 'wb') as file:
file.write(response.content) # file.write(response.content)
print(f"Log file saved to: {log_save_path}") # print(f"Log file saved to: {log_save_path}")
else: else:
print("无法获取日志文件信息") print("无法获取日志文件信息")
@ -38,9 +38,9 @@ def download_file(data_file_info, save_dir):
data_file_url = data_file_info["data_file_url"] data_file_url = data_file_info["data_file_url"]
data_save_path = os.path.join(save_dir, "data.xlsx") data_save_path = os.path.join(save_dir, "data.xlsx")
response = requests.get(data_file_url) response = requests.get(data_file_url)
with open(data_save_path, 'wb') as file: # with open(data_save_path, 'wb') as file:
file.write(response.content) # file.write(response.content)
print(f"Data file saved to: {data_save_path}") # print(f"Data file saved to: {data_save_path}")
else: else:
print("无法获取数据文件信息") print("无法获取数据文件信息")

Binary file not shown.

@ -1,764 +0,0 @@
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

Binary file not shown.

@ -1,127 +1,128 @@
#---设备配置---# #---系统配置---#
device: cpu system:
# device: cuda print_log: true
log_retention_days: 1
clean_dirs:
- "train_api"
- "inference_api"
- "evaluate_api"
host: "0.0.0.0"
port: 8088
device: "cpu" # 可选: "cpu", "cuda"
#---训练配置---# #---路径配置---#
n_epochs: 150 paths:
batch_size: 16 model:
learning_rate: 0.001 train: "/data/model/psychology.pth"
nc: 4 default: "model/psychology.pth"
#data_train: train_val # train: 只用train训练val做验证 infer做测试train_val: 用train和val做训练infer做验证 infer做测试all: 全部训练全部验证全部测试数据先1/5作为infer剩下的再1/5作为val剩下的4/5作为训练 normalizer:
data_train: train_val train: "/data/model/normalizer.pkl"
early_stop_patience: 50 default: "model/normalizer.pkl"
gamma: 0.98 fonts:
step_size: 10 chinese: "fonts/simhei.ttf"
experimental_mode: false
experiments_count: 50
replace_model: true # 是否替换现有模型
#---检测和推理配置---#
# 检测和推理使用模型路径
model_path: /data/model/psychology.pth
default_model_path: model/psychology.pth
#---样本特征---# #---训练配置---#
# 标签名称 training:
label_name: 类别 n_epochs: 500
# 特征名称 batch_size: 1024
feature_names: learning_rate: 0.001
- "强迫症状数字化" early_stop_patience: 100
- "人际关系敏感数字化" scheduler:
- "抑郁数字化" gamma: 0.98
- "多因子症状" step_size: 20
- "母亲教养方式数字化" regularization:
- "父亲教养方式数字化" l1_lambda: 1e-6 # 默认1e-5, 降低L1因为特征已经通过权重控制
- "自评家庭经济条件数字化" l2_lambda: 5e-4 # 默认1e-4, 增加L2加强过拟合控制
- "有无心理治疗(咨询)史数字化" dropout_rate: 0.2
- "学业情况数字化" experimental_mode: true
- "出勤情况数字化" experiments_count: 10
# 定义特征权重列表 replace_model: true
feature_weights: data_mode: "train_val" # 可选: "train", "train_val", "all"
- 0.135 class_weights:
- 0.085 balance_mode: "balanced" # 可选: "balanced", "balanced_subsample", "none"
- 0.08 # recall_weights: [1.4, 1.5, 1.1, 0.5] # 召回率调节权重 值更大则更容易检测出来
- 0.2 recall_weights: [1, 1, 1, 1] # 召回率调节权重 整体平衡 整体错误率更低
- 0.09 weight_normalize: "max" # 可选: "max", "sum", "none"
- 0.09
- 0.06
- 0.06
- 0.08
- 0.12
#---网络结构---#
# MLP configuration
mlp:
input_dim: 10 # Number of input features
layers:
- output_dim: 32
activation: relu
- output_dim: 128
activation: relu
- output_dim: 32
activation: relu
output_dim: 4 # Number of classes
# Transformer configuration #---模型配置---#
transformer: model:
d_model: 32 # Reduced embedding dimension num_classes: 4 # nc
nhead: 4 # Reduced number of attention heads input_dim: 10
num_encoder_layers: 2 # Reduced number of encoder layers architecture: "mlp" # 可选: "mlp", "transformer"
num_decoder_layers: 2 # Reduced number of decoder layers mlp:
dim_feedforward: 128 # Reduced feedforward network dimension layers:
dropout: 0.1 # Dropout probability - output_dim: 32
input_dim: 10 # Number of input features activation: "relu"
output_dim: 4 # Number of classes - output_dim: 128
activation: "relu"
- output_dim: 32
activation: "relu"
output_dim: 4
#---训练配置备份---# #---特征配置---#
# MLP good train param 1 features:
# #---训练配置---# label_name: "类别"
# n_epochs: 150 groups:
# 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_val 父亲教养:
# early_stop_patience: 50 - "父亲教养方式数字化"
# gamma: 0.98 母亲教养:
# step_size: 10 - "母亲教养方式数字化"
# experiments_count: 1 家庭经济:
- "自评家庭经济条件数字化"
心理咨询:
- "有无心理治疗(咨询)史数字化"
多因子:
- "多因子症状"
出勤:
- "出勤情况数字化"
学业:
- "学业情况数字化"
# MLP good train param 2 feature_names:
# #---训练配置---# - "强迫症状数字化"
# n_epochs: 300 - "人际关系敏感数字化"
# batch_size: 8 - "抑郁数字化"
# learning_rate: 0.0005 - "多因子症状"
# 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_val - "自评家庭经济条件数字化"
# early_stop_patience: 50 - "有无心理治疗(咨询)史数字化"
# gamma: 0.98 - "学业情况数字化"
# step_size: 10 - "出勤情况数字化"
# experiments_count: 1
# Transformer good train param 1 feature_weights:
# #---训练配置---# - 0.135 # 强迫症状
# n_epochs: 150 - 0.085 # 人际关系敏感
# batch_size: 64 - 0.08 # 抑郁
# learning_rate: 0.001 - 0.2 # 多因子症状
# nc: 4 - 0.09 # 母亲教养
# #data_train: train_val # train: 只用train训练val做验证 infer做测试train_val: 用train和val做训练infer做验证 infer做测试all: 全部训练全部验证全部测试数据先1/5作为infer剩下的再1/5作为val剩下的4/5作为训练 - 0.09 # 父亲教养
# data_train: train_val - 0.06 # 家庭经济
# early_stop_patience: 50 - 0.06 # 心理治疗史
# gamma: 0.98 - 0.08 # 学业情况
# step_size: 10 - 0.12 # 出勤情况
# experiments_count: 1
# Transformer good train param 2 feature_mapping:
# #---训练配置---# 父亲教养方式:
# n_epochs: 300 1: 0.59 # 温暖与理解
# batch_size: 8 0: 0.46 # 其他
# learning_rate: 0.0005 母亲教养方式:
# nc: 4 1: 0.69 # 温暖与理解
# #data_train: train_val # train: 只用train训练val做验证 infer做测试train_val: 用train和val做训练infer做验证 infer做测试all: 全部训练全部验证全部测试数据先1/5作为infer剩下的再1/5作为val剩下的4/5作为训练 0: 0.56 # 其他
# data_train: train_val 家庭经济条件:
# early_stop_patience: 50 2: 0.54 # 贫困
# gamma: 0.98 1: 0.54 # 较差
# step_size: 10 0: 0.47 # 其他
# experiments_count: 1 心理咨询史:
true: 0.21 # 有
false: 0.09 # 无
出勤情况:
true: 0.74 # 高于平均
false: 0.67 # 低于平均
学业情况:
true: 0.59 # 有预警
false: 0.50 # 无预警

Binary file not shown.

@ -1,10 +0,0 @@
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

Binary file not shown.

Binary file not shown.

@ -1,3 +1,7 @@
"""
FastAPI 服务主模块
提供训练评估和推理的 HTTP 接口
"""
import os import os
import time import time
import datetime import datetime
@ -7,417 +11,345 @@ import uvicorn
import schedule import schedule
import threading import threading
import yaml import yaml
import numpy as np
from fastapi import FastAPI, Request, File, UploadFile from fastapi import FastAPI, Request, File, UploadFile
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from pydantic import BaseModel from pydantic import BaseModel
from typing import List from typing import List
import atexit import atexit
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from utils.feature_process import create_feature_df, apply_feature_weights, Features
from utils.common import MLModel
app = FastAPI()
# 控制是否打印的宏定义
PRINT_LOG = True
# 日志保留天数
DAYS = 1
# 清理文件夹
DIRS = ["train_api", "inference_api", "evaluate_api"]
# 初始化配置文件
config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "config/config.yaml"))
# 初始化日志配置
log_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "logfile.log"))
logging.basicConfig(filename=log_path, level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
def log_print(message): from utils.feature_processor import (
logging.info(message) Features, FeatureProcessor, FeatureWeightApplier, normalize_features
if PRINT_LOG: )
print(message) from utils.model_trainer import MLModel
# 保证日志写到文件
def flush_log():
for handler in logging.getLogger().handlers:
handler.flush()
# 定义fastapi返回类 inference # API 响应模型
class PredictionResult(BaseModel): class PredictionResult(BaseModel):
predictions: list """推理结果模型"""
predictions: List[int]
# 定义fastapi返回类
class ClassificationResult(BaseModel): class ClassificationResult(BaseModel):
precision: list """分类评估结果模型"""
recall: list precision: List[float]
f1: list recall: List[float]
f1: List[float]
wrong_percentage: float wrong_percentage: float
# 允许所有域名的跨域请求 class APIResponse(BaseModel):
"""API 通用响应模型"""
classification_result: ClassificationResult
data_file: dict
class APIConfig:
"""API 配置类"""
def __init__(self):
# 初始化配置文件路径
self.config_path = os.path.abspath(os.path.join(
os.path.dirname(__file__), "config/config.yaml"))
# 加载配置
with open(self.config_path, 'r') as f:
self.config = yaml.safe_load(f)
# 初始化日志
self.log_path = os.path.abspath(os.path.join(
os.path.dirname(__file__), "logfile.log"))
self._setup_logging()
# 初始化目录
self._setup_directories()
def _setup_logging(self):
"""配置日志"""
logging.basicConfig(
filename=self.log_path,
level=logging.INFO,
format='%(asctime)s %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
def _setup_directories(self):
"""创建必要的目录"""
for dir_name in self.config['system']['clean_dirs']:
dir_path = os.path.abspath(os.path.join(
os.path.dirname(__file__), dir_name))
os.makedirs(dir_path, exist_ok=True)
def update_log_handler(self, log_path: str):
"""更新日志处理器"""
logger = logging.getLogger()
for handler in logger.handlers[:]:
logger.removeHandler(handler)
file_handler = logging.FileHandler(log_path)
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
))
logger.addHandler(file_handler)
class FileCleanup:
"""文件清理类"""
@staticmethod
def clean_old_files(directory: str, days: int):
"""清理指定天数前的文件"""
now = time.time()
cutoff = now - (days * 86400)
for root, _, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
if os.path.getmtime(file_path) < cutoff:
os.remove(file_path)
logging.info(f"Removed old file: {file_path}")
@staticmethod
def schedule_cleanup(config: dict):
"""定期清理任务"""
for directory in config['system']['clean_dirs']:
abs_directory = os.path.abspath(os.path.join(
os.path.dirname(__file__), directory))
FileCleanup.clean_old_files(
abs_directory,
config['system']['log_retention_days']
)
# 初始化 FastAPI 应用
app = FastAPI()
api_config = APIConfig()
# 配置 CORS
app.add_middleware( app.add_middleware(
CORSMiddleware, CORSMiddleware,
allow_origins=["*"], allow_origins=["*"],
allow_credentials=True, allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"], allow_methods=["*"],
allow_headers=["*"], allow_headers=["*"],
) )
# 定义一个函数来动态更新日志处理器 # 挂载静态文件目录
def update_log_handler(log_path): for dir_name in api_config.config['system']['clean_dirs']:
logger = logging.getLogger() dir_path = os.path.abspath(os.path.join(os.path.dirname(__file__), dir_name))
# 移除所有现有的处理器 app.mount(f"/{dir_name}", StaticFiles(directory=dir_path), name=dir_name)
for handler in logger.handlers[:]:
logger.removeHandler(handler)
# 添加新的文件处理器
file_handler = logging.FileHandler(log_path)
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S'))
logger.addHandler(file_handler)
# 定义清理旧文件的函数
def clean_old_files(directory, days=DAYS):
now = time.time()
cutoff = now - (days * 86400) # 1天前的时间戳
for root, dirs, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
if os.path.getmtime(file_path) < cutoff:
os.remove(file_path)
print(f"Removed old file: {file_path}")
# 定期清理任务
def schedule_cleanup():
directories = DIRS
for directory in directories:
abs_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), directory))
clean_old_files(abs_directory)
# 启动定时任务
def start_scheduler():
schedule.every(1).hours.do(schedule_cleanup)
while True:
schedule.run_pending()
time.sleep(1)
# 定义训练接口
@app.post("/train/") @app.post("/train/")
async def train_model(request: Request, features_list: List[Features]): async def train_model(request: Request, features_list: List[Features]) -> APIResponse:
global config_path """训练模型接口"""
# 遍历每个特征对象,并将其添加到 all_features 中 # 创建特征处理器
all_features = create_feature_df(features_list) processor = FeatureProcessor(api_config.config)
all_features = processor.create_feature_df(features_list)
# 读取 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) feature_label_weighted = FeatureWeightApplier.apply_weights(
all_features,
start_time = time.time() # 记录开始时间 api_config.config['features']['feature_names'],
api_config.config['features']['feature_weights']
# 创建静态文件存放文件夹 )
static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "train_api")) # 设置模型文件和配置文件的存放目录和本py同级
os.makedirs(static_dir, exist_ok=True) # 特征归一化
feature_label_weighted = normalize_features(
# 训练前设置 feature_label_weighted,
api_config.config['features']['feature_names'],
is_train=True,
config=api_config.config
)
# 记录开始时间
start_time = time.time()
# 设置训练相关路径
now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
data_path = os.path.abspath(os.path.join(static_dir, f"train_feature_label_weighted_{now}.xlsx")) train_dir = os.path.abspath(os.path.join(
config['data_path'] = data_path os.path.dirname(__file__), "train_api"))
# 更新配置中的路径
api_config.config['paths']['model'].update({
'train_process': os.path.join(train_dir, f"train_process_{now}.png"),
'evaluate_result_path': os.path.join(train_dir, f"evaluate_result_{now}.png")
})
# 保存训练数据
data_path = os.path.join(train_dir, f"train_feature_label_weighted_{now}.xlsx")
feature_label_weighted.to_excel(data_path, index=False) feature_label_weighted.to_excel(data_path, index=False)
# 添加模型保存路径 # 更新配置
train_model_path = os.path.abspath(os.path.join(static_dir, f"train_model_{now}.pth")) api_config.config['data_path'] = data_path
config['train_model_path'] = train_model_path api_config.config['train_model_path'] = os.path.join(
train_dir, f"train_model_{now}.pth")
# 添加相关性矩阵图路径
api_config.config['correlation_matrix_path'] = os.path.join(
train_dir, f"correlation_matrix_{now}.png")
# 配置日志 # 配置日志
log_path = os.path.abspath(os.path.join(static_dir, f"train_log_{now}.log")) log_path = os.path.join(train_dir, f"train_log_{now}.log")
update_log_handler(log_path) api_config.update_log_handler(log_path)
# 配置训练和验证结果图片路径 # 训练模型
train_process_path = os.path.abspath(os.path.join(static_dir, f"train_progress_img_{now}.png")) ml_model = MLModel(api_config.config)
config['train_process_path'] = train_process_path avg_f1, wrong_percentage, precision, recall, f1 = ml_model.train_detect()
evaluate_result_path = os.path.abspath(os.path.join(static_dir, f"evaluate_result_img_{now}.png"))
config['evaluate_result_path'] = evaluate_result_path # 如果配置允许,复制最佳模型到指定位置
if api_config.config['training']['replace_model']:
log_print("config: " + str(config)) shutil.copyfile(
api_config.config['train_model_path'], # 不带序号的版本(最佳模型)
# 开始训练 api_config.config['paths']['model']['train'] # 复制到目标位置
# 初始化 MLModel 实例 )
ml_model = MLModel(config)
list_avg_f1 = [] # 记录结束时间
list_wrong_percentage = [] end_time = time.time()
list_precision = [] logging.info(f"训练耗时: {end_time - start_time}")
list_recall = []
list_f1 = [] # 构建响应
train_times = 1 if config['experimental_mode'] == False else config["experiments_count"] return APIResponse(
for _ in range(train_times): classification_result=ClassificationResult(
avg_f1, wrong_percentage, precision, recall, f1 = ml_model.train_detect()
list_avg_f1.append(avg_f1)
list_wrong_percentage.append(wrong_percentage)
list_precision.append(precision)
list_recall.append(recall)
list_f1.append(f1)
log_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}%")
log_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)}")
log_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)}")
log_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() # 记录结束时间
log_print("预测耗时: " + str(end_time - start_time) + "") # 打印执行时间
# 替换现有检测模型
if(config["replace_model"] == True):
# 如果模型路径不是绝对路径,则转换为绝对路径
if not os.path.isabs(config["model_path"]):
abs_model_path = os.path.abspath(os.path.join(os.path.dirname(__file__), config["model_path"]))
config["model_path"] = abs_model_path
shutil.copyfile(config["train_model_path"], config["model_path"])
log_print(f"Model file has been copied from {config['train_model_path']} to {config['model_path']}")
# 保证日志写到文件
atexit.register(flush_log)
# 返回分类结果和模型文件下载 URLstatic不是程序执行路径而是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"
train_process_img_url = f"{request.base_url}train_api/train_progress_img_{now}.png"
evaluate_result_img_url = f"{request.base_url}train_api/evaluate_result_img_{now}.png"
# 返回分类结果和模型文件
return {
"classification_result": ClassificationResult(
precision=precision, precision=precision,
recall=recall, recall=recall,
f1=f1, f1=f1,
wrong_percentage=wrong_percentage wrong_percentage=wrong_percentage
), ),
"data_file": { data_file={
"model_file_url": model_file_url, "model_file_url": f"{request.base_url}train_api/train_model_{now}.pth",
"log_file_url": log_file_url, "log_file_url": f"{request.base_url}train_api/train_log_{now}.log",
"data_file_url": data_file_url, "data_file_url": f"{request.base_url}train_api/train_feature_label_weighted_{now}.xlsx",
"train_process_img_url": train_process_img_url, "train_process_img_url": f"{request.base_url}train_api/train_model_{now}_training_process.png",
"evaluate_result_img_url": evaluate_result_img_url "evaluate_result_img_url": f"{request.base_url}train_api/train_model_{now}_evaluate_result.png"
} }
} )
# 定义验证接口
@app.post("/evaluate/") @app.post("/evaluate/")
async def evaluate_model(request: Request, features_list: List[Features]): async def evaluate_model(request: Request, features_list: List[Features]) -> APIResponse:
global config_path """评估模型接口"""
# 遍历每个特征对象,并将其添加到 all_features 中 # 特征处理
all_features = create_feature_df(features_list) processor = FeatureProcessor(api_config.config)
all_features = processor.create_feature_df(features_list)
# 读取 YAML 配置文件
with open(config_path, 'r') as f: feature_label_weighted = FeatureWeightApplier.apply_weights(
config = yaml.load(f, Loader=yaml.FullLoader) all_features,
feature_names = config['feature_names'] api_config.config['features']['feature_names'],
feature_weights = config['feature_weights'] api_config.config['features']['feature_weights']
)
# 应用特征权重
feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) feature_label_weighted = normalize_features(
feature_label_weighted,
start_time = time.time() # 记录开始时间 api_config.config['features']['feature_names'],
is_train=False,
# 创建静态文件存放文件夹 config=api_config.config
static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "evaluate_api")) # 设置模型文件和配置文件的存放目录和本py同级 )
os.makedirs(static_dir, exist_ok=True)
# 评估
# 训练前设置 start_time = time.time()
now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
data_path = os.path.abspath(os.path.join(static_dir, f"evaluate_feature_label_weighted_{now}.xlsx")) evaluate_dir = os.path.abspath(os.path.join(
config['data_path'] = data_path os.path.dirname(__file__), "evaluate_api"))
# 更新配置中的评估结果图路径
api_config.config['paths']['model']['evaluate_result_path'] = os.path.join(
evaluate_dir, f"evaluate_result_{now}.png")
data_path = os.path.join(
evaluate_dir, f"evaluate_feature_label_weighted_{now}.xlsx")
feature_label_weighted.to_excel(data_path, index=False) feature_label_weighted.to_excel(data_path, index=False)
# 配置验证结果图片路径 log_path = os.path.join(evaluate_dir, f"evaluate_log_{now}.log")
evaluate_result_path = os.path.abspath(os.path.join(static_dir, f"evaluate_result_img_{now}.png")) api_config.update_log_handler(log_path)
config['evaluate_result_path'] = evaluate_result_path
ml_model = MLModel(api_config.config)
# 如果模型路径不是绝对路径,则转换为绝对路径 avg_f1, wrong_percentage, precision, recall, f1 = ml_model.evaluate_model(
if not os.path.isabs(config["model_path"]): feature_label_weighted[api_config.config['features']['feature_names']].values,
abs_model_path = os.path.abspath(os.path.join(os.path.dirname(__file__), config["model_path"])) feature_label_weighted[api_config.config['features']['label_name']].values
config["model_path"] = abs_model_path )
# 检查模型文件是否存在,如果不存在则复制模型文件 end_time = time.time()
if not os.path.exists(config["model_path"]): logging.info(f"评估耗时: {end_time - start_time}")
if not os.path.isabs(config['default_model_path']):
config['default_model_path'] = os.path.join(os.path.dirname(os.path.abspath(__file__)), config['default_model_path']) return APIResponse(
os.makedirs(os.path.dirname(config["model_path"]), exist_ok=True) classification_result=ClassificationResult(
shutil.copyfile(config['default_model_path'], config["model_path"])
log_print(f"Model file not found. Copied default model from {config['default_model_path']} to {config['model_path']}")
# 配置日志
log_path = os.path.abspath(os.path.join(static_dir, f"evaluate_log_{now}.log"))
update_log_handler(log_path)
# 特征和标签
X = feature_label_weighted[config['feature_names']].values
y = feature_label_weighted[config['label_name']].values
# 初始化 MLModel 实例
ml_model = MLModel(config)
# 加载模型
ml_model.load_model()
avg_f1, wrong_percentage, precision, recall, f1 = ml_model.evaluate_model(X, y)
end_time = time.time() # 记录结束时间
log_print("预测耗时: " + str(end_time - start_time) + "") # 打印执行时间
# 保证日志写到文件
atexit.register(flush_log)
# 返回分类结果和模型文件下载 URLstatic不是程序执行路径而是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"
evaluate_result_img_url = f"{request.base_url}evaluate_api/evaluate_result_img_{now}.png"
# 返回分类结果和模型文件
return {
"classification_result": ClassificationResult(
precision=precision, precision=precision,
recall=recall, recall=recall,
f1=f1, f1=f1,
wrong_percentage=wrong_percentage wrong_percentage=wrong_percentage
), ),
"data_file": { data_file={
"log_file_url": log_file_url, "log_file_url": f"{request.base_url}evaluate_api/evaluate_log_{now}.log",
"data_file_url": data_file_url, "data_file_url": f"{request.base_url}evaluate_api/evaluate_feature_label_weighted_{now}.xlsx",
"evaluate_result_img_url": evaluate_result_img_url "evaluate_result_img_url": f"{request.base_url}evaluate_api/evaluate_model_{now}_evaluate_result.png"
} }
} )
# 定义推理接口
@app.post("/inference/") @app.post("/inference/")
async def inference_model(request: Request, features_list: List[Features]): async def inference_model(request: Request, features_list: List[Features]) -> PredictionResult:
global config_path """推理接口"""
# 遍历每个特征对象,并将其添加到 all_features 中 processor = FeatureProcessor(api_config.config)
all_features = create_feature_df(features_list) all_features = processor.create_feature_df(features_list)
# 读取 YAML 配置文件 feature_label_weighted = FeatureWeightApplier.apply_weights(
with open(config_path, 'r') as f: all_features,
config = yaml.load(f, Loader=yaml.FullLoader) api_config.config['features']['feature_names'],
feature_names = config['feature_names'] api_config.config['features']['feature_weights']
feature_weights = config['feature_weights'] )
# 应用特征权重 feature_label_weighted = normalize_features(
feature_label_weighted = apply_feature_weights(all_features, feature_names, feature_weights) feature_label_weighted,
api_config.config['features']['feature_names'],
start_time = time.time() # 记录开始时间 is_train=False,
config=api_config.config
# 创建静态文件存放文件夹 )
static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "inference_api")) # 设置模型文件和配置文件的存放目录和本py同级
os.makedirs(static_dir, exist_ok=True) start_time = time.time()
# 训练前设置
now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
data_path = os.path.abspath(os.path.join(static_dir, f"inference_feature_label_weighted_{now}.xlsx")) inference_dir = os.path.abspath(os.path.join(
config['data_path'] = data_path os.path.dirname(__file__), "inference_api"))
data_path = os.path.join(
inference_dir, f"inference_feature_label_weighted_{now}.xlsx")
feature_label_weighted.to_excel(data_path, index=False) feature_label_weighted.to_excel(data_path, index=False)
# 配置日志 log_path = os.path.join(inference_dir, f"inference_log_{now}.log")
log_path = os.path.abspath(os.path.join(static_dir, f"inference_log_{now}.log")) api_config.update_log_handler(log_path)
update_log_handler(log_path)
ml_model = MLModel(api_config.config)
# 如果模型路径不是绝对路径,则转换为绝对路径 predictions = ml_model.inference_model(
if not os.path.isabs(config["model_path"]): feature_label_weighted[api_config.config['features']['feature_names']].values
abs_model_path = os.path.abspath(os.path.join(os.path.dirname(__file__), config["model_path"])) )
config["model_path"] = abs_model_path
end_time = time.time()
# 检查模型文件是否存在,如果不存在则复制模型文件 logging.info(f"推理耗时: {end_time - start_time}")
if not os.path.exists(config["model_path"]):
if not os.path.isabs(config['default_model_path']):
config['default_model_path'] = os.path.join(os.path.dirname(os.path.abspath(__file__)), config['default_model_path'])
os.makedirs(os.path.dirname(config["model_path"]), exist_ok=True)
shutil.copyfile(config['default_model_path'], config["model_path"])
log_print(f"Model file not found. Copied default model from {config['default_model_path']} to {config['model_path']}")
# 特征和标签
X = feature_label_weighted[config['feature_names']].values
# 初始化 MLModel 实例
ml_model = MLModel(config)
# 加载模型
ml_model.load_model()
predictions = ml_model.inference_model(X)
end_time = time.time() # 记录结束时间
log_print("预测耗时: " + str(end_time - start_time) + "") # 打印执行时间
log_print("预测结果: " + str(predictions))
# 保证日志写到文件
atexit.register(flush_log)
# 返回预测结果
return PredictionResult(predictions=predictions) return PredictionResult(predictions=predictions)
# 定义模型上传接口
@app.post("/upload_model/") @app.post("/upload_model/")
async def upload_model(file: UploadFile = File(...)): async def upload_model(file: UploadFile = File(...)):
global config_path """上传模型接口"""
# 创建模型存放文件夹 models_dir = os.path.abspath(os.path.join(
models_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "models")) os.path.dirname(__file__), "models"))
os.makedirs(models_dir, exist_ok=True) os.makedirs(models_dir, exist_ok=True)
# 保存模型文件
file_path = os.path.join(models_dir, "psy.pth") file_path = os.path.join(models_dir, "psy.pth")
with open(file_path, "wb") as buffer: with open(file_path, "wb") as buffer:
buffer.write(await file.read()) buffer.write(await file.read())
return {"message": "模型上传成功", "file_path": file_path} return {"message": "模型上传成功", "file_path": file_path}
def start_scheduler():
"""启动定时任务"""
schedule.every(1).hours.do(
FileCleanup.schedule_cleanup,
config=api_config.config
)
while True:
schedule.run_pending()
time.sleep(1)
# 以下是fastapi启动配置
if __name__ == "__main__": if __name__ == "__main__":
# 获取当前时间并格式化为字符串 # 启动定时清理任务
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 打印程序启动时间
log_print(f"Program started at {current_time}")
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"))
static_dir_models = os.path.abspath(os.path.join(os.path.dirname(__file__), "models"))
os.makedirs(static_dir_train, exist_ok=True)
os.makedirs(static_dir_evaluate, exist_ok=True)
os.makedirs(static_dir_inference, exist_ok=True)
os.makedirs(static_dir_models, 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_inference), name="static_dir_inference")
app.mount("/models", StaticFiles(directory=static_dir_models), name="static_dir_models")
# 启动定时任务
scheduler_thread = threading.Thread(target=start_scheduler) scheduler_thread = threading.Thread(target=start_scheduler)
scheduler_thread.daemon = True scheduler_thread.daemon = True
scheduler_thread.start() scheduler_thread.start()
uvicorn.run(app, host="0.0.0.0", port=8088, reload=False) # 启动服务
uvicorn.run(
app,
host=api_config.config['system']['host'],
port=api_config.config['system']['port'],
reload=False
)

@ -1,318 +0,0 @@
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
from matplotlib.font_manager import FontProperties
# 控制是否打印的宏定义
PRINT_LOG = True
# 指定字体路径
font_path = os.path.join(os.path.dirname(__file__), '../fonts', 'simhei.ttf')
font_prop = FontProperties(fname=font_path)
def log_print(message):
logging.info(message)
if PRINT_LOG:
print(message)
class MLModel:
def __init__(self, model_config):
self.config = model_config
self.model = None
def create_model(self):
self.model = MLP(self.config).to(self.config['device'])
# self.model = TransformerModel(self.config).to(self.config['device'])
def load_model(self):
self.create_model()
self.model.load_state_dict(torch.load(self.config['model_path'], map_location=self.config['device']))
def load_and_split_data(self):
parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
file_path = os.path.join(parent_dir, self.config['data_path'])
data = pd.read_excel(file_path)
X = data[self.config['feature_names']].values
y = data[self.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(self, model_path):
torch.save(self.model.state_dict(), model_path)
def evaluate_model(self, X_infer, y_infer):
self.model.eval()
with torch.no_grad():
outputs = self.model(torch.from_numpy(X_infer).float().to(self.config['device']))
_, predictions = torch.max(outputs, 1)
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)
wrong_count = len(np.where(y_infer != predictions.cpu().numpy())[0])
total_count = len(y_infer)
wrong_percentage = (wrong_count / total_count) * 100
log_print("Evaluate Result: ")
log_print(f"Prediction errors: {wrong_count}")
log_print(f"Prediction error percentage: {wrong_percentage:.2f}%")
log_print(f"Total samples: {total_count}")
avg_precision = np.mean(precision)
avg_recall = np.mean(recall)
avg_f1 = np.mean(f1)
for i in range(len(precision)):
log_print(f"Class {i} Precision: {precision[i]:.4f}, Recall: {recall[i]:.4f}, F1: {f1[i]:.4f}")
log_print("精确率:" + str(precision))
log_print("召回率:" + str(recall))
log_print("F1得分:" + str(f1))
log_print("平均精确率:" + str(avg_precision))
log_print("平均召回率:" + str(avg_recall))
log_print("平均F1得分:" + str(avg_f1))
log_print("Evaluate Result End: ")
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(15, 5))
ax1.bar(np.arange(len(precision)), precision)
ax1.set_title('Precision(精确率)', fontproperties=font_prop)
ax2.bar(np.arange(len(recall)), recall)
ax2.set_title('Recall(召回率)', fontproperties=font_prop)
ax3.bar(np.arange(len(f1)), f1)
ax3.set_title('F1 Score(F1得分)', fontproperties=font_prop)
# 保存图片
parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
evaluate_result_path = os.path.join(parent_dir, self.config['evaluate_result_path'])
plt.savefig(evaluate_result_path)
return np.mean(f1), wrong_percentage, precision, recall, f1
def inference_model(self, X_infer):
self.model.eval()
with torch.no_grad():
outputs = self.model(torch.from_numpy(X_infer).float().to(self.config['device']))
_, predictions = torch.max(outputs, 1)
return predictions.cpu().numpy().tolist()
def train_model(self, train_loader, val_loader, criterion, optimizer, scheduler):
n_epochs = self.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 = self.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 = [[] for _ in range(7)]
plt.rcParams['figure.max_open_warning'] = 50
for epoch in range(n_epochs):
# Training phase
self.model.train()
train_loss, train_acc = 0, 0
for inputs, targets in train_loader:
optimizer.zero_grad()
outputs = self.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()
# Validation phase
val_loss, val_acc, all_preds, all_targets = 0, 0, [], []
self.model.eval()
with torch.no_grad():
for inputs, targets in val_loader:
outputs = self.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')
log_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(损失)', fontproperties=font_prop)
ax1.legend(prop=font_prop)
ax2.plot(train_acc_history, label='Train Accuracy(训练正确率)')
ax2.plot(val_acc_history, label='Validation Accuracy(验证正确率)')
ax2.set_title('Accuracy(正确率)', fontproperties=font_prop)
ax2.legend(prop=font_prop)
ax3.plot(val_f1_history, label='Validation F1(验证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)(宏平均)', fontproperties=font_prop)
ax3.legend(prop=font_prop)
# 保存图片
parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
train_process_path = os.path.join(parent_dir, self.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 = self.model.state_dict()
trigger_times = 0
else:
trigger_times += 1
if trigger_times >= patience:
log_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
def train_detect(self):
X, y, X_train_val, y_train_val, X_train, y_train, X_val, y_val, X_infer, y_infer = self.load_and_split_data()
if self.config['data_train'] == 'train_val':
train_dataset = TensorDataset(torch.from_numpy(X_train_val).float().to(self.config['device']), torch.from_numpy(y_train_val).long().to(self.config['device']))
val_dataset = TensorDataset(torch.from_numpy(X_infer).float().to(self.config['device']), torch.from_numpy(y_infer).long().to(self.config['device']))
class_weights = torch.tensor(compute_class_weight('balanced', classes=np.unique(y_train_val), y=y_train_val), dtype=torch.float32).to(self.config['device'])
elif self.config['data_train'] == 'train':
train_dataset = TensorDataset(torch.from_numpy(X_train).float().to(self.config['device']), torch.from_numpy(y_train).long().to(self.config['device']))
val_dataset = TensorDataset(torch.from_numpy(X_val).float().to(self.config['device']), torch.from_numpy(y_val).long().to(self.config['device']))
class_weights = torch.tensor(compute_class_weight('balanced', classes=np.unique(y_train), y=y_train), dtype=torch.float32).to(self.config['device'])
elif self.config['data_train'] == 'all':
train_dataset = TensorDataset(torch.from_numpy(X).float().to(self.config['device']), torch.from_numpy(y).long().to(self.config['device']))
val_dataset = TensorDataset(torch.from_numpy(X).float().to(self.config['device']), torch.from_numpy(y).long().to(self.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(self.config['device'])
else:
logging.error("Error: Set data_train first in yaml!")
raise ValueError("Error: Set data_train first in yaml!")
log_print(f"Class weights: {class_weights}")
train_loader = DataLoader(train_dataset, batch_size=self.config['batch_size'], shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=self.config['batch_size'])
self.create_model()
criterion = nn.CrossEntropyLoss(weight=class_weights)
optimizer = torch.optim.Adam(self.model.parameters(), lr=self.config['learning_rate'])
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, self.config['step_size'], self.config['gamma'])
best_val_f1, best_val_recall, best_val_precision, best_epoch, best_model = self.train_model(train_loader, val_loader, criterion, optimizer, scheduler)
# Save the best model
self.save_model(self.config['train_model_path'])
log_print(f"Best Validation F1 Score (Macro): {best_val_f1:.4f}")
log_print(f"Best Validation Recall (Macro): {best_val_recall:.4f}")
log_print(f"Best Validation Precision (Macro): {best_val_precision:.4f}")
log_print(f"Best Epoch: {best_epoch + 1}")
avg_f1, wrong_percentage, precision, recall, f1 = self.evaluate_model(X_infer, y_infer)
return avg_f1, wrong_percentage, precision, recall, f1
# 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)
# 20260605
class MLP(nn.Module):
def __init__(self, config):
super(MLP, self).__init__()
layers = []
input_dim = config['mlp']['input_dim']
for layer_cfg in config['mlp']['layers']:
layers.append(nn.Linear(input_dim, layer_cfg['output_dim']))
if layer_cfg.get('activation', None) == 'relu':
layers.append(nn.ReLU())
input_dim = layer_cfg['output_dim']
layers.append(nn.Linear(input_dim, config['mlp']['output_dim']))
self.model = nn.Sequential(*layers)
def forward(self, x):
return self.model(x)
class TransformerModel(nn.Module):
def __init__(self, config):
super(TransformerModel, self).__init__()
self.embedding = nn.Linear(config['transformer']['input_dim'], config['transformer']['d_model'])
self.transformer = nn.Transformer(
d_model=config['transformer']['d_model'],
nhead=config['transformer']['nhead'],
num_encoder_layers=config['transformer']['num_encoder_layers'],
num_decoder_layers=config['transformer']['num_decoder_layers'],
dim_feedforward=config['transformer']['dim_feedforward'],
dropout=config['transformer']['dropout']
)
self.fc = nn.Linear(config['transformer']['d_model'], config['transformer']['output_dim'])
def forward(self, x):
x = self.embedding(x).unsqueeze(1) # Add sequence dimension
transformer_output = self.transformer(x, x)
output = self.fc(transformer_output.squeeze(1)) # Remove sequence dimension
return output

@ -1,134 +0,0 @@
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 # 有10
# 日常行为特征量
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

@ -0,0 +1,274 @@
"""
特征处理模块
包含特征数据结构定义特征转换权重应用和归一化等功能
"""
from typing import List, Dict, Any, Union, Optional
import os
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
import pickle
from pydantic import BaseModel, Field
import logging
import shutil
class Features(BaseModel):
"""
单个样本的特征数据结构
Attributes:
somatization: 躯体化症状得分
obsessive_compulsive: 强迫症状得分
interpersonal_sensitivity: 人际关系敏感得分
depression: 抑郁症状得分
anxiety: 焦虑症状得分
hostility: 敌对症状得分
terror: 恐怖症状得分
paranoia: 偏执症状得分
psychoticism: 精神病性得分
other: 其他症状得分
father_parenting_style: 父亲教养方式 (1: 温暖与理解, 0: 其他)
mother_parenting_style: 母亲教养方式 (1: 温暖与理解, 0: 其他)
self_assessed_family_economic_condition: 家庭经济状况 (2: 贫困, 1: 较差, 0: 其他)
history_of_psychological_counseling: 心理咨询史 (True: , False: )
absenteeism_above_average: 出勤情况 (True: 高于平均, False: 低于平均)
academic_warning: 学业预警 (True: 有预警, False: 无预警)
label: 分类标签 (0-3)
"""
# SCL评测量范围0-4
somatization: float = Field(..., description="躯体化症状得分")
obsessive_compulsive: float = Field(..., description="强迫症状得分")
interpersonal_sensitivity: float = Field(..., description="人际关系敏感得分")
depression: float = Field(..., description="抑郁症状得分")
anxiety: float = Field(..., description="焦虑症状得分")
hostility: float = Field(..., description="敌对症状得分")
terror: float = Field(..., description="恐怖症状得分")
paranoia: float = Field(..., description="偏执症状得分")
psychoticism: float = Field(..., description="精神病性得分")
other: float = Field(..., description="其他症状得分")
# 基本信息特征
father_parenting_style: int = Field(..., description="父亲教养方式")
mother_parenting_style: int = Field(..., description="母亲教养方式")
self_assessed_family_economic_condition: int = Field(..., description="家庭经济状况")
history_of_psychological_counseling: bool = Field(..., description="心理咨询史")
# 日常行为特征
absenteeism_above_average: bool = Field(..., description="出勤情况")
academic_warning: bool = Field(..., description="学业预警")
# 标签
label: int = Field(..., description="分类标签")
class FeatureProcessor:
"""
特征处理类负责特征的转换和处理
Attributes:
config: 配置信息字典
feature_mapping: 特征映射规则
feature_names: 特征名称列表
"""
def __init__(self, config: Dict[str, Any]) -> None:
self.config = config
self.feature_mapping = config['features']['feature_mapping']
self.feature_names = config['features']['feature_names']
def _process_scl_features(self, features: Features) -> Dict[str, float]:
"""
处理SCL相关特征
Args:
features: 特征对象
Returns:
处理后的SCL特征字典
"""
return {
"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
}
def _calculate_multi_factor(self, scl_features: Dict[str, float]) -> float:
"""
计算多因子症状得分
Args:
scl_features: SCL特征字典
Returns:
多因子症状得分
"""
severe_symptoms_count = sum(1 for value in scl_features.values() if value > 3.0)
return severe_symptoms_count / len(scl_features)
def create_feature_df(self, features_list: List[Features]) -> pd.DataFrame:
"""
创建特征DataFrame
Args:
features_list: 特征对象列表
Returns:
处理后的特征DataFrame
"""
processed_features = []
for features in features_list:
scl_features = self._process_scl_features(features)
try:
feature_dict = {
'父亲教养方式数字化': self.feature_mapping['父亲教养方式'].get(
features.father_parenting_style,
self.feature_mapping['父亲教养方式'][0] # 默认值
),
'母亲教养方式数字化': self.feature_mapping['母亲教养方式'].get(
features.mother_parenting_style,
self.feature_mapping['母亲教养方式'][0] # 默认值
),
'自评家庭经济条件数字化': self.feature_mapping['家庭经济条件'].get(
features.self_assessed_family_economic_condition,
self.feature_mapping['家庭经济条件'][0] # 默认值
),
'有无心理治疗(咨询)史数字化': self.feature_mapping['心理咨询史'][features.history_of_psychological_counseling],
'强迫症状数字化': features.obsessive_compulsive / 4,
'人际关系敏感数字化': features.interpersonal_sensitivity / 4,
'抑郁数字化': features.depression / 4,
'多因子症状': self._calculate_multi_factor(scl_features),
'出勤情况数字化': self.feature_mapping['出勤情况'][features.absenteeism_above_average],
'学业情况数字化': self.feature_mapping['学业情况'][features.academic_warning],
self.config['features']['label_name']: features.label
}
processed_features.append(feature_dict)
except KeyError as e:
logging.error(f"Invalid feature value: {e}")
# 使用默认值继续处理
feature_dict = {
'父亲教养方式数字化': self.feature_mapping['父亲教养方式'][0],
'母亲教养方式数字化': self.feature_mapping['母亲教养方式'][0],
'自评家庭经济条件数字化': self.feature_mapping['家庭经济条件'][0],
'有无心理治疗(咨询)史数字化': self.feature_mapping['心理咨询史'][False],
'强迫症状数字化': features.obsessive_compulsive / 4,
'人际关系敏感数字化': features.interpersonal_sensitivity / 4,
'抑郁数字化': features.depression / 4,
'多因子症状': self._calculate_multi_factor(scl_features),
'出勤情况数字化': self.feature_mapping['出勤情况'][False],
'学业情况数字化': self.feature_mapping['学业情况'][False],
self.config['features']['label_name']: features.label
}
processed_features.append(feature_dict)
return pd.DataFrame(processed_features)
class FeatureWeightApplier:
"""特征权重应用类"""
@staticmethod
def apply_weights(df: pd.DataFrame, feature_names: List[str],
feature_weights: List[float]) -> pd.DataFrame:
"""应用特征权重"""
max_weight = max(feature_weights)
weights_scaled = [w / max_weight for w in feature_weights]
features_data = df[feature_names].values
labels = df['类别'].values
features_weighted = features_data * np.array(weights_scaled)
result_df = pd.DataFrame(features_weighted, columns=feature_names)
result_df['类别'] = labels
return result_df
class FeatureNormalizer:
"""特征归一化处理类"""
def __init__(self, config: Dict[str, Any]):
self.config = config
self.feature_groups = {}
self.scalers = {}
for group_name, features in config['features']['groups'].items():
indices = [config['features']['feature_names'].index(feature)
for feature in features]
self.feature_groups[group_name] = indices
def fit_transform(self, features_data: np.ndarray) -> np.ndarray:
"""训练时的归一化转换"""
features_scaled = features_data.copy()
for group_name, indices in self.feature_groups.items():
self.scalers[group_name] = StandardScaler()
features_scaled[:, indices] = self.scalers[group_name].fit_transform(features_data[:, indices])
return features_scaled
def transform(self, features_data: np.ndarray) -> np.ndarray:
"""预测时的归一化转换"""
features_scaled = features_data.copy()
for group_name, indices in self.feature_groups.items():
features_scaled[:, indices] = self.scalers[group_name].transform(features_data[:, indices])
return features_scaled
def save(self, path: str) -> None:
"""
保存归一化参数
Args:
path: 保存路径
"""
# 确保目录存在
os.makedirs(os.path.dirname(path), exist_ok=True)
with open(path, 'wb') as f:
pickle.dump(self.scalers, f)
def load(self, path: str) -> None:
"""
加载归一化参数
Args:
path: 加载路径
"""
# 如果主路径不存在,尝试从默认路径复制
if not os.path.exists(path):
default_path = os.path.join(
os.path.dirname(__file__),
'..',
self.config['paths']['normalizer']['default']
)
if os.path.exists(default_path):
# 确保目标目录存在
os.makedirs(os.path.dirname(path), exist_ok=True)
shutil.copyfile(default_path, path)
logging.info(f"Copied normalizer from default path: {default_path} to {path}")
else:
raise FileNotFoundError(f"No normalizer found in either path: {path} or {default_path}")
with open(path, 'rb') as f:
self.scalers = pickle.load(f)
def normalize_features(df: pd.DataFrame, feature_names: List[str],
is_train: bool, config: Dict[str, Any]) -> pd.DataFrame:
"""特征归一化处理入口函数"""
features_data = df[feature_names].values
labels = df[config['features']['label_name']].values
normalizer = FeatureNormalizer(config)
if is_train:
features_normalized = normalizer.fit_transform(features_data)
if config.get('paths', {}).get('normalizer', {}).get('train'):
normalizer.save(config['paths']['normalizer']['train'])
else:
normalizer.load(config['paths']['normalizer']['train'])
features_normalized = normalizer.transform(features_data)
result_df = pd.DataFrame(features_normalized, columns=feature_names)
result_df[config['features']['label_name']] = labels
return result_df

@ -0,0 +1,719 @@
"""
模型定义和训练模块
包含神经网络模型定义训练和评估功能
"""
import os
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
from matplotlib.font_manager import FontProperties
import seaborn as sns
import warnings
from typing import Dict, Any, Tuple, List
import pandas as pd
import datetime
import shutil
import copy
# 屏蔽警告
warnings.filterwarnings("ignore", category=UserWarning, module="matplotlib.font_manager")
warnings.filterwarnings("ignore", category=UserWarning, module="seaborn.utils")
class BaseModel(nn.Module):
"""神经网络基类"""
def get_l1_loss(self) -> torch.Tensor:
"""计算L1正则化损失"""
l1_loss = torch.tensor(0., device=next(self.parameters()).device)
for param in self.parameters():
l1_loss += torch.norm(param, p=1)
return l1_loss
def get_l2_loss(self) -> torch.Tensor:
"""计算L2正则化损失"""
l2_loss = torch.tensor(0., device=next(self.parameters()).device)
for param in self.parameters():
l2_loss += torch.norm(param, p=2)
return l2_loss
class MLP(BaseModel):
"""多层感知机模型"""
def __init__(self, config: Dict[str, Any]):
super(MLP, self).__init__()
layers = []
input_dim = config['model']['input_dim']
self.dropout = nn.Dropout(p=config['training']['dropout_rate'])
for layer_cfg in config['model']['mlp']['layers']:
linear = nn.Linear(input_dim, layer_cfg['output_dim'])
nn.init.xavier_normal_(linear.weight)
layers.append(linear)
if layer_cfg.get('activation') == 'relu':
layers.append(nn.ReLU())
layers.append(self.dropout)
input_dim = layer_cfg['output_dim']
self.output = nn.Linear(input_dim, config['model']['mlp']['output_dim'])
self.model = nn.Sequential(*layers)
def forward(self, x: torch.Tensor) -> torch.Tensor:
"""前向传播"""
x = self.model(x)
return self.output(x)
class MLModel:
"""模型训练和评估类"""
def __init__(self, config: Dict[str, Any]):
self.config = config
self.model = None
# 修改设备初始化
self.device = torch.device(
self.config['system']['device']
if torch.cuda.is_available() and self.config['system']['device'] == 'cuda'
else 'cpu'
)
logging.info(f"Using device: {self.device}") # 记录使用的设备
print(f"Using device: {self.device}") # 打印使用的设备
# 设置字体
font_path = os.path.join(os.path.dirname(__file__), '..',
config['paths']['fonts']['chinese'])
self.font_prop = FontProperties(fname=font_path)
def create_model(self) -> None:
"""创建模型实例"""
self.model = MLP(self.config).to(self.device)
def load_model(self) -> None:
"""加载已训练的模型"""
self.create_model()
model_path = self.config['paths']['model']['train']
# 如果主路径不存在,尝试从默认路径复制
if not os.path.exists(model_path):
default_model_path = os.path.join(
os.path.dirname(__file__),
'..',
self.config['paths']['model']['default']
)
if os.path.exists(default_model_path):
# 确保目标目录存在
os.makedirs(os.path.dirname(model_path), exist_ok=True)
shutil.copyfile(default_model_path, model_path)
logging.info(f"Copied model from default path: {default_model_path} to {model_path}")
else:
raise FileNotFoundError(f"No model found in either path: {model_path} or {default_model_path}")
self.model.load_state_dict(torch.load(model_path, map_location=self.device, weights_only=False))
def plot_correlation(self, X: np.ndarray, feature_names: List[str]) -> None:
"""绘制特征相关性矩阵"""
corr_matrix = np.corrcoef(X.T)
plt.figure(figsize=(12, 10))
sns.heatmap(corr_matrix,
annot=True,
cmap='coolwarm',
xticklabels=feature_names,
yticklabels=feature_names,
fmt='.2f')
plt.xticks(rotation=45, ha='right', fontproperties=self.font_prop)
plt.yticks(rotation=0, fontproperties=self.font_prop)
plt.title('特征相关性矩阵', fontproperties=self.font_prop)
plt.tight_layout()
plt.savefig(self.config['correlation_matrix_path'], bbox_inches='tight', dpi=300)
plt.close()
def train_model(self, train_loader: DataLoader, val_loader: DataLoader,
criterion: nn.Module, optimizer: torch.optim.Optimizer,
scheduler: torch.optim.lr_scheduler._LRScheduler) -> Tuple:
"""训练模型"""
n_epochs = self.config['training']['n_epochs']
best_val_f1 = 0.0
best_model = None
best_epoch = -1 # 记录最佳epoch
patience = self.config['training']['early_stop_patience']
trigger_times = 0
l1_lambda = float(self.config['training']['regularization']['l1_lambda'])
l2_lambda = float(self.config['training']['regularization']['l2_lambda'])
# 初始化指标记录字典
train_metrics = {'loss': [], 'acc': []}
val_metrics = {'loss': [], 'acc': [], 'f1': [], 'precision': [], 'recall': []}
for epoch in range(n_epochs):
# 训练阶段
self.model.train()
train_loss, train_acc = self._train_epoch(train_loader, criterion,
optimizer, l1_lambda, l2_lambda)
# 验证阶段
val_loss, val_acc, val_f1, val_precision, val_recall = self._validate_epoch(val_loader, criterion)
# 更新学习率
scheduler.step()
# 记录指标
train_metrics['loss'].append(train_loss)
train_metrics['acc'].append(train_acc)
val_metrics['loss'].append(val_loss)
val_metrics['acc'].append(val_acc)
val_metrics['f1'].append(val_f1)
val_metrics['precision'].append(val_precision)
val_metrics['recall'].append(val_recall)
# 打印训练信息
log_message = (
f'Epoch {epoch+1:03d} | '
f'Train Loss: {train_loss:.4f} | '
f'Train Acc: {train_acc:.4f} | '
f'Val Loss: {val_loss:.4f} | '
f'Val Acc: {val_acc:.4f} | '
f'Val F1: {val_f1:.4f} | '
f'Val Precision: {val_precision:.4f} | '
f'Val Recall: {val_recall:.4f}'
)
logging.info(log_message)
print(log_message)
# 更新最佳模型信息
if val_f1 > best_val_f1:
best_val_f1 = val_f1
# 创建模型状态的深拷贝
best_model = copy.deepcopy(self.model.state_dict())
best_epoch = epoch + 1
trigger_times = 0
else:
trigger_times += 1
if trigger_times >= patience:
log_message = (
f'Early stopping at epoch {epoch+1}\n'
f'Best model was saved at epoch {best_epoch} with F1: {best_val_f1:.4f}'
)
logging.info(log_message)
print(log_message)
break
# 绘制训练过程图
self._plot_training_process(train_metrics, val_metrics)
# 打印最佳模型信息
log_message = f'Training completed. Best model at epoch {best_epoch} with F1: {best_val_f1:.4f}'
logging.info(log_message)
print(log_message)
return best_val_f1, best_model, best_epoch
def _train_epoch(self, train_loader: DataLoader, criterion: nn.Module,
optimizer: torch.optim.Optimizer, l1_lambda: float,
l2_lambda: float) -> Tuple[float, float]:
"""训练一个epoch"""
train_loss = 0
train_acc = 0
for inputs, targets in train_loader:
optimizer.zero_grad()
outputs = self.model(inputs)
# 计算各种损失
ce_loss = criterion(outputs, targets)
l1_loss = self.model.get_l1_loss()
l2_loss = self.model.get_l2_loss()
# 转换正则化系数为tensor并移动到正确的设备
l1_lambda_tensor = torch.tensor(l1_lambda, device=ce_loss.device)
l2_lambda_tensor = torch.tensor(l2_lambda, device=ce_loss.device)
# 计算总损失
loss = ce_loss + l1_lambda_tensor * l1_loss + l2_lambda_tensor * l2_loss
loss.backward()
optimizer.step()
train_loss += loss.item() * inputs.size(0)
_, preds = torch.max(outputs, 1)
train_acc += torch.sum(preds == targets.data)
return train_loss / len(train_loader.dataset), train_acc.double() / len(train_loader.dataset)
def _validate_epoch(self, val_loader: DataLoader, criterion: nn.Module) -> Tuple[float, float, float, float, float]:
"""验证一个epoch"""
self.model.eval()
val_loss = 0
val_acc = 0
all_preds = []
all_targets = []
with torch.no_grad():
for inputs, targets in val_loader:
outputs = self.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_f1 = f1_score(all_targets, all_preds, average='macro')
val_precision = precision_score(all_targets, all_preds, average='macro')
val_recall = recall_score(all_targets, all_preds, average='macro')
return (val_loss / len(val_loader.dataset),
val_acc.double() / len(val_loader.dataset),
val_f1,
val_precision,
val_recall)
def evaluate_model(self, features_data: np.ndarray, labels: np.ndarray, is_training: bool = False) -> Tuple:
"""
评估模型
Args:
features_data: 输入特征数据
labels: 真实标签
is_training: 是否在训练过程中调用
Returns:
Tuple[float, float, List[float], List[float], List[float]]:
(平均F1值, 错误率, 精确率列表, 召回率列表, F1值列表)
"""
# 只有在非训练过程中才加载模型
if not is_training:
self.load_model()
self.model.eval()
with torch.no_grad():
outputs = self.model(torch.from_numpy(features_data).float().to(self.device))
_, predictions = torch.max(outputs, 1)
predictions = predictions.cpu().numpy()
precision = precision_score(labels, predictions, average=None)
recall = recall_score(labels, predictions, average=None)
f1 = f1_score(labels, predictions, average=None)
wrong_count = np.sum(labels != predictions)
wrong_percentage = (wrong_count / len(labels)) * 100
# 打印评估结果
log_message = (
f"\nEvaluation Results:\n"
f"Average F1: {np.mean(f1):.4f}\n"
f"Wrong Percentage: {wrong_percentage:.2f}%\n"
f"Precision: {precision.tolist()} | {np.mean(precision):.4f}\n"
f"Recall: {recall.tolist()} | {np.mean(recall):.4f}\n"
f"F1: {f1.tolist()} | {np.mean(f1):.4f}\n"
f"Total samples: {len(labels)}\n"
f"Wrong predictions: {wrong_count}"
)
logging.info(log_message)
print(log_message)
# 添加评估结果可视化
plt.figure(figsize=(15, 5))
# 设置类别标签
class_labels = [f'类别{i}' for i in range(len(precision))]
x = np.arange(len(class_labels))
width = 0.35 # 柱状图的宽度
# 精确率柱状图
plt.subplot(131)
plt.bar(x, precision, width)
plt.title('Precision(精确率)', fontproperties=self.font_prop)
plt.xticks(x, class_labels, fontproperties=self.font_prop)
plt.ylim(0, 1)
# 召回率柱状图
plt.subplot(132)
plt.bar(x, recall, width)
plt.title('Recall(召回率)', fontproperties=self.font_prop)
plt.xticks(x, class_labels, fontproperties=self.font_prop)
plt.ylim(0, 1)
# F1分数柱状图
plt.subplot(133)
plt.bar(x, f1, width)
plt.title('F1 Score(F1得分)', fontproperties=self.font_prop)
plt.xticks(x, class_labels, fontproperties=self.font_prop)
plt.ylim(0, 1)
plt.tight_layout()
if 'evaluate_result_path' in self.config['paths']['model']:
plt.savefig(self.config['paths']['model']['evaluate_result_path'])
plt.close()
return np.mean(f1), wrong_percentage, precision.tolist(), recall.tolist(), f1.tolist()
def inference_model(self, features_data: np.ndarray) -> List[int]:
"""
模型推理
Args:
features_data: 输入特征数据
Returns:
预测结果列表
"""
# 先加载模型
self.load_model()
self.model.eval()
with torch.no_grad():
outputs = self.model(torch.from_numpy(features_data).float().to(self.device))
_, predictions = torch.max(outputs, 1)
return predictions.cpu().numpy().tolist()
def save_model(self, path: str) -> None:
"""
保存模型
Args:
path: 保存路径
"""
# 确保目录存在
os.makedirs(os.path.dirname(path), exist_ok=True)
torch.save(self.model.state_dict(), path)
def _compute_class_weights(self, y_train: np.ndarray) -> torch.Tensor:
"""计算类别权重"""
weight_config = self.config['training'].get('class_weights', {})
balance_mode = weight_config.get('balance_mode', 'balanced')
normalize_mode = weight_config.get('weight_normalize', 'max')
# 计算基础平衡权重
if balance_mode != 'none':
balanced_weights = compute_class_weight(
balance_mode,
classes=np.unique(y_train),
y=y_train
)
else:
balanced_weights = np.ones(len(np.unique(y_train)))
# 获取召回率调节权重
recall_adjustment = np.array(
weight_config.get('recall_weights', [1.0] * len(np.unique(y_train)))
)
# 归一化调节权重
if normalize_mode == 'max':
normalized_adjustment = recall_adjustment / np.max(recall_adjustment)
elif normalize_mode == 'sum':
normalized_adjustment = recall_adjustment / np.sum(recall_adjustment) * len(recall_adjustment)
else:
normalized_adjustment = recall_adjustment
# 计算最终权重
final_weights = balanced_weights * normalized_adjustment
# 记录权重计算过程
log_message = (
f"\nClass weights calculation:\n"
f"Balance mode: {balance_mode}\n"
f"Normalize mode: {normalize_mode}\n"
f"Class distribution: {np.bincount(y_train)}\n"
f"Balanced weights: {balanced_weights}\n"
f"Recall adjustment: {recall_adjustment}\n"
f"Normalized adjustment: {normalized_adjustment}\n"
f"Final weights: {final_weights}"
)
logging.info(log_message)
print(log_message)
return torch.tensor(final_weights, dtype=torch.float32).to(self.device)
def train_detect(self) -> Tuple[float, float, List[float], List[float], List[float]]:
"""
训练和检测模型
Returns:
Tuple[float, float, List[float], List[float], List[float]]:
- average_f1: 平均F1分数
- wrong_percentage: 错误率
- precision_scores: 各类别精确率
- recall_scores: 各类别召回率
- f1_scores: 各类别F1分数
"""
# 从配置文件中读取数据路径
data = pd.read_excel(self.config['data_path'])
# 获取特征和标签
X = data[self.config['features']['feature_names']].values
y = data[self.config['features']['label_name']].values
# 显示特征相关性
self.plot_correlation(X, self.config['features']['feature_names'])
# 根据配置选择数据模式
if self.config['training']['data_mode'] == 'train_val':
# 使用 StratifiedKFold 进行划分
skf = StratifiedKFold(n_splits=5, shuffle=True)
train_idx, val_idx = next(skf.split(X, y))
X_train, X_val = X[train_idx], X[val_idx]
y_train, y_val = y[train_idx], y[val_idx]
else:
X_train, X_val = X, X
y_train, y_val = y, y
# 创建数据加载器
train_dataset = TensorDataset(
torch.from_numpy(X_train).float().to(self.device),
torch.from_numpy(y_train).long().to(self.device)
)
val_dataset = TensorDataset(
torch.from_numpy(X_val).float().to(self.device),
torch.from_numpy(y_val).long().to(self.device)
)
train_loader = DataLoader(
train_dataset,
batch_size=self.config['training']['batch_size'],
shuffle=True
)
val_loader = DataLoader(
val_dataset,
batch_size=self.config['training']['batch_size']
)
# 使用新的权重计算方法
class_weights = self._compute_class_weights(y_train)
if self.config['training']['experimental_mode']:
return self._run_experiments(X_train, y_train, X_val, y_val, class_weights)
else:
results = self._single_train_detect(X_train, y_train, X_val, y_val, class_weights)
# 只返回前5个值去掉 best_epoch
return results[:-1]
def _update_metrics(self, train_metrics: Dict, val_metrics: Dict,
train_loss: float, train_acc: float,
val_loss: float, val_acc: float,
val_f1: float, epoch: int) -> None:
"""更新训练和验证指标"""
train_metrics['loss'].append(train_loss)
train_metrics['acc'].append(train_acc)
val_metrics['loss'].append(val_loss)
val_metrics['acc'].append(val_acc)
val_metrics['f1'].append(val_f1)
# 同时记录到日志和打印到控制台
log_message = (
f'Epoch {epoch+1:03d} | ' # 添加 epoch 信息使用3位数字格式
f'Train Loss: {train_loss:.4f} | '
f'Train Acc: {train_acc:.4f} | '
f'Val Loss: {val_loss:.4f} | '
f'Val Acc: {val_acc:.4f} | '
f'Val F1: {val_f1:.4f}'
)
logging.info(log_message)
print(log_message) # 打印到控制台
def _run_experiments(self, X_train, y_train, X_val, y_val, class_weights):
"""运行多次实验"""
all_results = []
list_avg_f1 = []
list_wrong_percentage = []
list_precision = []
list_recall = []
list_f1 = []
best_experiment_f1 = 0
best_experiment_results = None
best_experiment_model = None
best_experiment_num = -1
best_experiment_epoch = -1
best_model_path = None
best_train_process_path = None
best_evaluate_result_path = None
base_model_path = self.config['train_model_path']
base_name = os.path.splitext(base_model_path)[0]
ext = os.path.splitext(base_model_path)[1]
for i in range(self.config['training']['experiments_count']):
exp_num = i + 1
logging.info(f"Starting experiment {exp_num}/{self.config['training']['experiments_count']}")
print(f"Starting experiment {exp_num}/{self.config['training']['experiments_count']}")
# 为每次实验创建模型和图片保存路径
exp_model_path = f"{base_name}_exp{exp_num}{ext}"
exp_train_process_path = exp_model_path.replace('.pth', '_training_process.png')
exp_evaluate_result_path = exp_model_path.replace('.pth', '_evaluate_result.png')
# 更新配置中的路径
self.config['paths']['model'].update({
'train_process': exp_train_process_path,
'evaluate_result_path': exp_evaluate_result_path
})
results = self._single_train_detect(X_train, y_train, X_val, y_val, class_weights, exp_model_path)
avg_f1, wrong_percentage, precision, recall, f1, best_epoch = results
# 记录每次实验的结果
list_avg_f1.append(avg_f1)
list_wrong_percentage.append(wrong_percentage)
list_precision.append(precision)
list_recall.append(recall)
list_f1.append(f1)
# 如果是最佳模型
if avg_f1 > best_experiment_f1:
best_experiment_f1 = avg_f1
best_experiment_results = results
best_experiment_model = self.model.state_dict()
best_experiment_num = exp_num
best_experiment_epoch = best_epoch
best_model_path = exp_model_path
best_train_process_path = exp_train_process_path
best_evaluate_result_path = exp_evaluate_result_path
# 复制最佳实验的文件到目标路径不带exp序号的版本
base_model_path = self.config['train_model_path']
base_train_process_path = base_model_path.replace('.pth', '_training_process.png')
base_evaluate_result_path = base_model_path.replace('.pth', '_evaluate_result.png')
shutil.copyfile(best_model_path, base_model_path)
shutil.copyfile(best_train_process_path, base_train_process_path)
shutil.copyfile(best_evaluate_result_path, base_evaluate_result_path)
# 更新配置中的路径为不带序号的版本
self.config['paths']['model'].update({
'train_process': base_train_process_path,
'evaluate_result_path': base_evaluate_result_path
})
if self.config['training']['replace_model']:
target_model_path = self.config['paths']['model']['train']
target_train_process_path = target_model_path.replace('.pth', '_training_process.png')
target_evaluate_result_path = target_model_path.replace('.pth', '_evaluate_result.png')
shutil.copyfile(best_model_path, target_model_path)
shutil.copyfile(best_train_process_path, target_train_process_path)
shutil.copyfile(best_evaluate_result_path, target_evaluate_result_path)
# 打印日志信息
log_message = (
f"\nExperiments Summary:\n"
f"Mean F1: {np.mean(list_avg_f1):.4f} "
f"Mean Wrong Percentage: {np.mean(list_wrong_percentage):.2f}%\n"
f"Mean Precision: {[np.mean([p[i] for p in list_precision]) for i in range(len(list_precision[0]))]} | {np.mean(list_precision)}\n"
f"Mean Recall: {[np.mean([r[i] for r in list_recall]) for i in range(len(list_recall[0]))]} | {np.mean(list_recall)}\n"
f"Mean F1: {[np.mean([f1[i] for f1 in list_f1]) for i in range(len(list_f1[0]))]} | {np.mean(list_f1)}\n"
f"\nBest Model Details:\n"
f"Best Model Path: {os.path.basename(best_model_path)}\n"
f"From Experiment: {best_experiment_num}/{self.config['training']['experiments_count']}\n"
f"Best Epoch: {best_experiment_epoch}\n"
f"Best F1: {best_experiment_f1:.4f} "
f"Wrong Percentage: {best_experiment_results[1]:.2f}%\n"
f"Precision: {best_experiment_results[2]} | {np.mean(best_experiment_results[2])}\n"
f"Recall: {best_experiment_results[3]} | {np.mean(best_experiment_results[3])}\n"
f"F1: {best_experiment_results[4]} | {np.mean(best_experiment_results[4])}"
)
logging.info(log_message)
print(log_message)
return (best_experiment_results[0], # average_f1
best_experiment_results[1], # wrong_percentage
best_experiment_results[2], # precision
best_experiment_results[3], # recall
best_experiment_results[4]) # f1
def _single_train_detect(self, X_train, y_train, X_val, y_val, class_weights, model_path=None):
"""单次训练过程"""
# 创建数据加载器
train_dataset = TensorDataset(
torch.from_numpy(X_train).float().to(self.device),
torch.from_numpy(y_train).long().to(self.device)
)
val_dataset = TensorDataset(
torch.from_numpy(X_val).float().to(self.device),
torch.from_numpy(y_val).long().to(self.device)
)
train_loader = DataLoader(train_dataset, batch_size=self.config['training']['batch_size'], shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=self.config['training']['batch_size'])
# 创建模型和优化器
self.create_model()
criterion = nn.CrossEntropyLoss(weight=class_weights)
optimizer = torch.optim.Adam(
self.model.parameters(),
lr=self.config['training']['learning_rate']
)
scheduler = torch.optim.lr_scheduler.StepLR(
optimizer,
self.config['training']['scheduler']['step_size'],
self.config['training']['scheduler']['gamma']
)
# 设置训练过程图的保存路径
if model_path:
train_process_path = model_path.replace('.pth', '_training_process.png')
self.config['paths']['model']['train_process'] = train_process_path
else:
train_process_path = self.config['train_model_path'].replace('.pth', '_training_process.png')
self.config['paths']['model']['train_process'] = train_process_path
# 训练模型
best_val_f1, best_model, best_epoch = self.train_model(
train_loader, val_loader, criterion, optimizer, scheduler
)
# 加载最佳模型
self.model.load_state_dict(best_model)
# 保存模型
if model_path:
self.save_model(model_path)
else:
# 如果是单次训练模式,直接保存到原始路径
self.save_model(self.config['train_model_path'])
# 使用最佳模型进行评估
eval_results = self.evaluate_model(X_val, y_val, is_training=True)
return eval_results + (best_epoch,)
def _plot_training_process(self, train_metrics: Dict, val_metrics: Dict) -> None:
"""绘制训练过程图"""
plt.figure(figsize=(15, 5))
# 损失曲线
plt.subplot(131)
plt.plot(train_metrics['loss'], label='Train Loss(训练损失)')
plt.plot(val_metrics['loss'], label='Val Loss(验证损失)')
plt.title('Loss(损失)', fontproperties=self.font_prop)
plt.legend(prop=self.font_prop)
# 准确率曲线
plt.subplot(132)
plt.plot(train_metrics['acc'], label='Train Accuracy(训练正确率)')
plt.plot(val_metrics['acc'], label='Val Accuracy(验证正确率)')
plt.title('Accuracy(正确率)', fontproperties=self.font_prop)
plt.legend(prop=self.font_prop)
# F1分数、精确率和召回率曲线
plt.subplot(133)
plt.plot(val_metrics['f1'], label='Validation F1(验证F1得分)')
plt.plot(val_metrics['precision'], label='Validation Precision(验证精确率)')
plt.plot(val_metrics['recall'], label='Validation Recall(验证召回率)')
plt.title('Metrics(评估指标)', fontproperties=self.font_prop)
plt.legend(prop=self.font_prop)
plt.tight_layout()
plt.savefig(self.config['paths']['model']['train_process'])
plt.close()
Loading…
Cancel
Save