diff --git a/api_server.py b/api_server.py new file mode 100644 index 0000000..8c7f92f --- /dev/null +++ b/api_server.py @@ -0,0 +1,342 @@ +""" +FastAPI 服务主模块 +提供训练、评估和推理的 HTTP 接口 +""" +import os +import time +import datetime +import logging +import shutil +import uvicorn +import schedule +import threading +import yaml +from fastapi import FastAPI, Request, File, UploadFile +from fastapi.middleware.cors import CORSMiddleware +from fastapi.staticfiles import StaticFiles +from pydantic import BaseModel +from typing import List +import atexit + +from utils.feature_processor import ( + Features, FeatureProcessor, FeatureWeightApplier, normalize_features +) +from utils.model_trainer import MLModel + +# API 响应模型 +class PredictionResult(BaseModel): + """推理结果模型""" + predictions: List[int] + +class ClassificationResult(BaseModel): + """分类评估结果模型""" + precision: List[float] + recall: List[float] + f1: List[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( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +# 挂载静态文件目录 +for dir_name in api_config.config['system']['clean_dirs']: + 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) + +@app.post("/train/") +async def train_model(request: Request, features_list: List[Features]) -> APIResponse: + """训练模型接口""" + # 创建特征处理器 + processor = FeatureProcessor(api_config.config) + all_features = processor.create_feature_df(features_list) + + # 应用特征权重 + feature_label_weighted = FeatureWeightApplier.apply_weights( + all_features, + api_config.config['features']['feature_names'], + api_config.config['features']['feature_weights'] + ) + + # 特征归一化 + 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") + train_dir = os.path.abspath(os.path.join( + os.path.dirname(__file__), "train_api")) + + # 保存训练数据 + data_path = os.path.join(train_dir, f"train_feature_label_weighted_{now}.xlsx") + feature_label_weighted.to_excel(data_path, index=False) + + # 更新配置 + api_config.config['data_path'] = data_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.join(train_dir, f"train_log_{now}.log") + api_config.update_log_handler(log_path) + + # 训练模型 + ml_model = MLModel(api_config.config) + avg_f1, wrong_percentage, precision, recall, f1 = ml_model.train_detect() + + # 如果配置允许,复制最佳模型到指定位置 + if api_config.config['training']['replace_model']: + shutil.copyfile( + api_config.config['train_model_path'], # 不带序号的版本(最佳模型) + api_config.config['paths']['model']['train'] # 复制到目标位置 + ) + + # 记录结束时间 + end_time = time.time() + logging.info(f"训练耗时: {end_time - start_time} 秒") + + # 构建响应 + return APIResponse( + classification_result=ClassificationResult( + precision=precision, + recall=recall, + f1=f1, + wrong_percentage=wrong_percentage + ), + data_file={ + "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" + } + ) + +@app.post("/evaluate/") +async def evaluate_model(request: Request, features_list: List[Features]) -> APIResponse: + """评估模型接口""" + # 特征处理 + processor = FeatureProcessor(api_config.config) + all_features = processor.create_feature_df(features_list) + + feature_label_weighted = FeatureWeightApplier.apply_weights( + all_features, + api_config.config['features']['feature_names'], + api_config.config['features']['feature_weights'] + ) + + feature_label_weighted = normalize_features( + feature_label_weighted, + api_config.config['features']['feature_names'], + is_train=False, + config=api_config.config + ) + + # 评估 + start_time = time.time() + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + evaluate_dir = os.path.abspath(os.path.join( + os.path.dirname(__file__), "evaluate_api")) + + data_path = os.path.join( + evaluate_dir, f"evaluate_feature_label_weighted_{now}.xlsx") + feature_label_weighted.to_excel(data_path, index=False) + + log_path = os.path.join(evaluate_dir, f"evaluate_log_{now}.log") + api_config.update_log_handler(log_path) + + ml_model = MLModel(api_config.config) + avg_f1, wrong_percentage, precision, recall, f1 = ml_model.evaluate_model( + feature_label_weighted[api_config.config['features']['feature_names']].values, + feature_label_weighted[api_config.config['features']['label_name']].values + ) + + end_time = time.time() + logging.info(f"评估耗时: {end_time - start_time} 秒") + + return APIResponse( + classification_result=ClassificationResult( + precision=precision, + recall=recall, + f1=f1, + wrong_percentage=wrong_percentage + ), + data_file={ + "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" + } + ) + +@app.post("/inference/") +async def inference_model(request: Request, features_list: List[Features]) -> PredictionResult: + """推理接口""" + processor = FeatureProcessor(api_config.config) + all_features = processor.create_feature_df(features_list) + + feature_label_weighted = FeatureWeightApplier.apply_weights( + all_features, + api_config.config['features']['feature_names'], + api_config.config['features']['feature_weights'] + ) + + feature_label_weighted = normalize_features( + feature_label_weighted, + api_config.config['features']['feature_names'], + is_train=False, + config=api_config.config + ) + + start_time = time.time() + now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + inference_dir = os.path.abspath(os.path.join( + 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) + + log_path = os.path.join(inference_dir, f"inference_log_{now}.log") + api_config.update_log_handler(log_path) + + ml_model = MLModel(api_config.config) + predictions = ml_model.inference_model( + feature_label_weighted[api_config.config['features']['feature_names']].values + ) + + end_time = time.time() + logging.info(f"推理耗时: {end_time - start_time} 秒") + + return PredictionResult(predictions=predictions) + +@app.post("/upload_model/") +async def upload_model(file: UploadFile = File(...)): + """上传模型接口""" + models_dir = os.path.abspath(os.path.join( + os.path.dirname(__file__), "models")) + os.makedirs(models_dir, exist_ok=True) + + file_path = os.path.join(models_dir, "psy.pth") + with open(file_path, "wb") as buffer: + buffer.write(await file.read()) + + 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) + +if __name__ == "__main__": + # 启动定时清理任务 + scheduler_thread = threading.Thread(target=start_scheduler) + scheduler_thread.daemon = True + scheduler_thread.start() + + # 启动服务 + uvicorn.run( + app, + host=api_config.config['system']['host'], + port=api_config.config['system']['port'], + reload=False + ) \ No newline at end of file diff --git a/client/data.xlsx b/client/data.xlsx deleted file mode 100644 index dbccd8c..0000000 Binary files a/client/data.xlsx and /dev/null differ diff --git a/client/log.txt b/client/log.txt deleted file mode 100644 index 60e6d3b..0000000 --- a/client/log.txt +++ /dev/null @@ -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 diff --git a/client/model.pth b/client/model.pth deleted file mode 100644 index 0580501..0000000 Binary files a/client/model.pth and /dev/null differ diff --git a/config/config.yaml b/config/config.yaml index cd0444a..618cf18 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,127 +1,126 @@ -#---设备配置---# -device: cpu -# device: cuda +#---系统配置---# +system: + print_log: true + log_retention_days: 1 + clean_dirs: + - "train_api" + - "inference_api" + - "evaluate_api" + host: "0.0.0.0" + port: 8088 + device: "cuda" # 可选: "cpu", "cuda" -#---训练配置---# -n_epochs: 150 -batch_size: 16 -learning_rate: 0.001 -nc: 4 -#data_train: train_val # train: 只用train训练,val做验证, infer做测试;train_val: 用train和val做训练,infer做验证, infer做测试;all: 全部训练,全部验证,全部测试(数据先1/5作为infer,剩下的再1/5作为val,剩下的4/5作为训练) -data_train: train_val -early_stop_patience: 50 -gamma: 0.98 -step_size: 10 -experimental_mode: false -experiments_count: 50 -replace_model: true # 是否替换现有模型 - -#---检测和推理配置---# -# 检测和推理使用模型路径 -model_path: /data/model/psychology.pth -default_model_path: model/psychology.pth +#---路径配置---# +paths: + model: + train: "/data/model/psychology.pth" + default: "model/psychology.pth" + normalizer: + train: "/data/model/normalizer.pkl" + default: "model/normalizer.pkl" + fonts: + chinese: "fonts/simhei.ttf" -#---样本特征---# -# 标签名称 -label_name: 类别 -# 特征名称 -feature_names: - - "强迫症状数字化" - - "人际关系敏感数字化" - - "抑郁数字化" - - "多因子症状" - - "母亲教养方式数字化" - - "父亲教养方式数字化" - - "自评家庭经济条件数字化" - - "有无心理治疗(咨询)史数字化" - - "学业情况数字化" - - "出勤情况数字化" -# 定义特征权重列表 -feature_weights: - - 0.135 - - 0.085 - - 0.08 - - 0.2 - - 0.09 - - 0.09 - - 0.06 - - 0.06 - - 0.08 - - 0.12 - -#---网络结构---# -# 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 +#---训练配置---# +training: + n_epochs: 300 + # batch_size: 16 # CPU + # learning_rate: 0.001 # CPU + batch_size: 128 # GPU + learning_rate: 0.001 # GPU + early_stop_patience: 50 + scheduler: + gamma: 0.98 + step_size: 10 + regularization: + l1_lambda: 1e-5 + l2_lambda: 1e-4 + dropout_rate: 0.2 + experimental_mode: true + experiments_count: 50 + replace_model: true + data_mode: "train_val" # 可选: "train", "train_val", "all" -# Transformer configuration -transformer: - d_model: 32 # Reduced embedding dimension - nhead: 4 # Reduced number of attention heads - num_encoder_layers: 2 # Reduced number of encoder layers - num_decoder_layers: 2 # Reduced number of decoder layers - dim_feedforward: 128 # Reduced feedforward network dimension - dropout: 0.1 # Dropout probability - input_dim: 10 # Number of input features - output_dim: 4 # Number of classes +#---模型配置---# +model: + num_classes: 4 # nc + input_dim: 10 + architecture: "mlp" # 可选: "mlp", "transformer" + mlp: + layers: + - output_dim: 32 + activation: "relu" + - output_dim: 128 + activation: "relu" + - output_dim: 32 + activation: "relu" + output_dim: 4 -#---训练配置备份---# -# MLP good train param 1 -# #---训练配置---# -# n_epochs: 150 -# batch_size: 16 -# learning_rate: 0.001 -# nc: 4 -# #data_train: train_val # train: 只用train训练,val做验证, infer做测试;train_val: 用train和val做训练,infer做验证, infer做测试;all: 全部训练,全部验证,全部测试(数据先1/5作为infer,剩下的再1/5作为val,剩下的4/5作为训练) -# data_train: train_val -# early_stop_patience: 50 -# gamma: 0.98 -# step_size: 10 -# experiments_count: 1 +#---特征配置---# +features: + label_name: "类别" + correlation_threshold: 0.7 + groups: + 核心症状: + - "强迫症状数字化" + - "人际关系敏感数字化" + - "抑郁数字化" + 父亲教养: + - "父亲教养方式数字化" + 母亲教养: + - "母亲教养方式数字化" + 家庭经济: + - "自评家庭经济条件数字化" + 心理咨询: + - "有无心理治疗(咨询)史数字化" + 多因子: + - "多因子症状" + 出勤: + - "出勤情况数字化" + 学业: + - "学业情况数字化" -# MLP good train param 2 -# #---训练配置---# -# 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 + feature_names: + - "强迫症状数字化" + - "人际关系敏感数字化" + - "抑郁数字化" + - "多因子症状" + - "母亲教养方式数字化" + - "父亲教养方式数字化" + - "自评家庭经济条件数字化" + - "有无心理治疗(咨询)史数字化" + - "学业情况数字化" + - "出勤情况数字化" -# Transformer good train param 1 -# #---训练配置---# -# n_epochs: 150 -# batch_size: 64 -# 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 + feature_weights: + - 0.135 # 强迫症状 + - 0.085 # 人际关系敏感 + - 0.08 # 抑郁 + - 0.2 # 多因子症状 + - 0.09 # 母亲教养 + - 0.09 # 父亲教养 + - 0.06 # 家庭经济 + - 0.06 # 心理治疗史 + - 0.08 # 学业情况 + - 0.12 # 出勤情况 -# Transformer good train param 2 -# #---训练配置---# -# 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 \ No newline at end of file + feature_mapping: + 父亲教养方式: + 1: 0.59 # 温暖与理解 + 0: 0.46 # 其他 + 母亲教养方式: + 1: 0.69 # 温暖与理解 + 0: 0.56 # 其他 + 家庭经济条件: + 2: 0.54 # 贫困 + 1: 0.54 # 较差 + 0: 0.47 # 其他 + 心理咨询史: + true: 0.21 # 有 + false: 0.09 # 无 + 出勤情况: + true: 0.74 # 高于平均 + false: 0.67 # 低于平均 + 学业情况: + true: 0.59 # 有预警 + false: 0.50 # 无预警 \ No newline at end of file diff --git a/data.xlsx b/data.xlsx deleted file mode 100644 index b6f1688..0000000 Binary files a/data.xlsx and /dev/null differ diff --git a/log.txt b/log.txt deleted file mode 100644 index d873f0b..0000000 --- a/log.txt +++ /dev/null @@ -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 diff --git a/model/normalizer.pkl b/model/normalizer.pkl new file mode 100644 index 0000000..304017a Binary files /dev/null and b/model/normalizer.pkl differ diff --git a/model/psychology.pth b/model/psychology.pth index a589a4b..5ae217a 100644 Binary files a/model/psychology.pth and b/model/psychology.pth differ diff --git a/psy_api.py b/psy_api.py deleted file mode 100644 index 75508b9..0000000 --- a/psy_api.py +++ /dev/null @@ -1,423 +0,0 @@ -import os -import time -import datetime -import logging -import shutil -import uvicorn -import schedule -import threading -import yaml -import numpy as np -from fastapi import FastAPI, Request, File, UploadFile -from pydantic import BaseModel -from typing import List -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): - logging.info(message) - if PRINT_LOG: - print(message) - -# 保证日志写到文件 -def flush_log(): - for handler in logging.getLogger().handlers: - handler.flush() - -# 定义fastapi返回类 inference -class PredictionResult(BaseModel): - predictions: list - -# 定义fastapi返回类 -class ClassificationResult(BaseModel): - precision: list - recall: list - f1: list - wrong_percentage: float - -# 允许所有域名的跨域请求 -app.add_middleware( - CORSMiddleware, - allow_origins=["*"], - allow_credentials=True, - allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"], - allow_headers=["*"], -) - -# 定义一个函数来动态更新日志处理器 -def update_log_handler(log_path): - 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) - -# 定义清理旧文件的函数 -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/") -async def train_model(request: Request, features_list: List[Features]): - global config_path - # 遍历每个特征对象,并将其添加到 all_features 中 - all_features = 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) - - start_time = time.time() # 记录开始时间 - - # 创建静态文件存放文件夹 - static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "train_api")) # 设置模型文件和配置文件的存放目录,和本py同级 - os.makedirs(static_dir, exist_ok=True) - - # 训练前设置 - now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") - data_path = os.path.abspath(os.path.join(static_dir, f"train_feature_label_weighted_{now}.xlsx")) - config['data_path'] = data_path - 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")) - config['train_model_path'] = train_model_path - - # 配置日志 - log_path = os.path.abspath(os.path.join(static_dir, f"train_log_{now}.log")) - update_log_handler(log_path) - - # 配置训练和验证结果图片路径 - train_process_path = os.path.abspath(os.path.join(static_dir, f"train_progress_img_{now}.png")) - config['train_process_path'] = train_process_path - evaluate_result_path = os.path.abspath(os.path.join(static_dir, f"evaluate_result_img_{now}.png")) - config['evaluate_result_path'] = evaluate_result_path - - log_print("config: " + str(config)) - - # 开始训练 - # 初始化 MLModel 实例 - ml_model = MLModel(config) - list_avg_f1 = [] - list_wrong_percentage = [] - list_precision = [] - list_recall = [] - list_f1 = [] - train_times = 1 if config['experimental_mode'] == False else config["experiments_count"] - for _ in range(train_times): - 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) - - # 返回分类结果和模型文件下载 URL,static不是程序执行路径,而是app.mount的静态文件夹 - model_file_url = f"{request.base_url}train_api/train_model_{now}.pth" - log_file_url = f"{request.base_url}train_api/train_log_{now}.log" - data_file_url = f"{request.base_url}train_api/train_feature_label_weighted_{now}.xlsx" - 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, - recall=recall, - f1=f1, - wrong_percentage=wrong_percentage - ), - "data_file": { - "model_file_url": model_file_url, - "log_file_url": log_file_url, - "data_file_url": data_file_url, - "train_process_img_url": train_process_img_url, - "evaluate_result_img_url": evaluate_result_img_url - } - } - -# 定义验证接口 -@app.post("/evaluate/") -async def evaluate_model(request: Request, features_list: List[Features]): - global config_path - # 遍历每个特征对象,并将其添加到 all_features 中 - all_features = 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) - - start_time = time.time() # 记录开始时间 - - # 创建静态文件存放文件夹 - static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "evaluate_api")) # 设置模型文件和配置文件的存放目录,和本py同级 - os.makedirs(static_dir, exist_ok=True) - - # 训练前设置 - now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") - data_path = os.path.abspath(os.path.join(static_dir, f"evaluate_feature_label_weighted_{now}.xlsx")) - config['data_path'] = data_path - feature_label_weighted.to_excel(data_path, index=False) - - # 配置验证结果图片路径 - evaluate_result_path = os.path.abspath(os.path.join(static_dir, f"evaluate_result_img_{now}.png")) - config['evaluate_result_path'] = evaluate_result_path - - # 如果模型路径不是绝对路径,则转换为绝对路径 - 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 - - # 检查模型文件是否存在,如果不存在则复制模型文件 - 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']}") - - # 配置日志 - 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) - - # 返回分类结果和模型文件下载 URL,static不是程序执行路径,而是app.mount的静态文件夹 - log_file_url = f"{request.base_url}evaluate_api/evaluate_log_{now}.log" - data_file_url = f"{request.base_url}evaluate_api/evaluate_feature_label_weighted_{now}.xlsx" - evaluate_result_img_url = f"{request.base_url}evaluate_api/evaluate_result_img_{now}.png" - - # 返回分类结果和模型文件 - return { - "classification_result": ClassificationResult( - precision=precision, - recall=recall, - f1=f1, - wrong_percentage=wrong_percentage - ), - "data_file": { - "log_file_url": log_file_url, - "data_file_url": data_file_url, - "evaluate_result_img_url": evaluate_result_img_url - } - } - -# 定义推理接口 -@app.post("/inference/") -async def inference_model(request: Request, features_list: List[Features]): - global config_path - # 遍历每个特征对象,并将其添加到 all_features 中 - all_features = 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) - - start_time = time.time() # 记录开始时间 - - # 创建静态文件存放文件夹 - static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "inference_api")) # 设置模型文件和配置文件的存放目录,和本py同级 - os.makedirs(static_dir, exist_ok=True) - - # 训练前设置 - now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") - data_path = os.path.abspath(os.path.join(static_dir, f"inference_feature_label_weighted_{now}.xlsx")) - config['data_path'] = data_path - feature_label_weighted.to_excel(data_path, index=False) - - # 配置日志 - log_path = os.path.abspath(os.path.join(static_dir, f"inference_log_{now}.log")) - update_log_handler(log_path) - - # 如果模型路径不是绝对路径,则转换为绝对路径 - 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 - - # 检查模型文件是否存在,如果不存在则复制模型文件 - 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) - -# 定义模型上传接口 -@app.post("/upload_model/") -async def upload_model(file: UploadFile = File(...)): - global config_path - # 创建模型存放文件夹 - models_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "models")) - os.makedirs(models_dir, exist_ok=True) - - # 保存模型文件 - file_path = os.path.join(models_dir, "psy.pth") - with open(file_path, "wb") as buffer: - buffer.write(await file.read()) - - return {"message": "模型上传成功", "file_path": file_path} - - -# 以下是fastapi启动配置 -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.daemon = True - scheduler_thread.start() - - uvicorn.run(app, host="0.0.0.0", port=8088, reload=False) \ No newline at end of file diff --git a/utils/common.py b/utils/common.py deleted file mode 100644 index a4b6b81..0000000 --- a/utils/common.py +++ /dev/null @@ -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 diff --git a/utils/feature_process.py b/utils/feature_process.py deleted file mode 100644 index dbddf50..0000000 --- a/utils/feature_process.py +++ /dev/null @@ -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 # 有:1;无:0 - # 日常行为特征量 - absenteeism_above_average: bool # 大于平均次数:1;小于等于:0 - academic_warning: bool # 有预警:1;无预警:0 - # 标签 - label: int # 0-3 共4个类别 - -def process_features_list(features_list: List[dict]) -> List[Features]: - """ - 将包含字典的列表转换为包含 Features 实例的列表 - """ - return [Features(**features_dict) for features_dict in features_list] - -def create_feature_df(features_list): - """ - 根据features_list对象创建一个DataFrame。 - - 参数: - features_list (Features): 包含特征值的对象的数组 - - 返回: - pandas.DataFrame: 包含特征和标签的DataFrame - """ - - # 定义一个空的 DataFrame 用于存储所有样本特征 - all_features = pd.DataFrame() - - for features in features_list: - relevant_features = { - "somatization": features.somatization, - "obsessive_compulsive": features.obsessive_compulsive, - "interpersonal_sensitivity": features.interpersonal_sensitivity, - "depression": features.depression, - "anxiety": features.anxiety, - "hostility": features.hostility, - "terror": features.terror, - "paranoia": features.paranoia, - "psychoticism": features.psychoticism, - "other": features.other - } - df_feature = pd.DataFrame({ - # 数字化特征--基本信息 - '父亲教养方式数字化': [(lambda x: 0.59 if x == 1 else 0.46)(features.father_parenting_style)], - '母亲教养方式数字化': [(lambda x: 0.69 if x == 1 else 0.56)(features.mother_parenting_style)], - '自评家庭经济条件数字化': [(lambda x: 0.54 if x in [2, 1] else 0.47)(features.self_assessed_family_economic_condition)], - '有无心理治疗(咨询)史数字化': [(lambda x: 0.21 if x else 0.09)(features.history_of_psychological_counseling)], - # 数字化特征--症状因子 - '强迫症状数字化': [features.obsessive_compulsive / 4], - '人际关系敏感数字化': [features.interpersonal_sensitivity / 4], - '抑郁数字化': [features.depression / 4], - '多因子症状': [(lambda x: sum(1 for value in x.values() if value > 3.0) / 10)(relevant_features)], - # 数字化特征--日常行为 - '出勤情况数字化': [0.74 if features.absenteeism_above_average else 0.67], - '学业情况数字化': [0.59 if features.academic_warning else 0.50], - "类别": [features.label] - }) - all_features = pd.concat([all_features, df_feature], ignore_index=True) - - return all_features - -def apply_feature_weights(df, feature_names, feature_weights): - """ - 将特征权重应用到DataFrame中。 - - 参数: - df (pandas.DataFrame): 包含特征和标签的DataFrame - feature_names (list): 特征名称列表 - feature_weights (list): 特征权重列表 - - 返回: - pandas.DataFrame: 应用权重后的DataFrame - """ - # 找到最大值 - max_value = max(feature_weights) - - # 缩放权重 - feature_weights_scaled = [x / max_value for x in feature_weights] - - # 打印缩放后的特征权重 - # print("Scaled Feature Weights:", feature_weights_scaled) - - # 将特征和标签分开,并做归一化处理 - X = df[feature_names].values - y = df['类别'].values - - # 分别乘以权重,放在归一化后 - for i in range(len(feature_names)): - X[:, i] = X[:, i] * feature_weights_scaled[i] - - feature_label_weighted = pd.DataFrame(X, columns=feature_names) - feature_label_weighted['类别'] = y - - return feature_label_weighted \ No newline at end of file diff --git a/utils/feature_processor.py b/utils/feature_processor.py new file mode 100644 index 0000000..91dc623 --- /dev/null +++ b/utils/feature_processor.py @@ -0,0 +1,257 @@ +""" +特征处理模块 +包含特征数据结构定义、特征转换、权重应用和归一化等功能 +""" +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 + +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.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: 加载路径 + """ + 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 \ No newline at end of file diff --git a/utils/model_trainer.py b/utils/model_trainer.py new file mode 100644 index 0000000..c7a33ff --- /dev/null +++ b/utils/model_trainer.py @@ -0,0 +1,538 @@ +""" +模型定义和训练模块 +包含神经网络模型定义、训练和评估功能 +""" +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 + +# 屏蔽警告 +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() + self.model.load_state_dict(torch.load(self.config['paths']['model']['train'], + map_location=self.device)) + + 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 = self._validate_epoch(val_loader, criterion) + + # 更新学习率 + scheduler.step() + + # 记录指标 + self._update_metrics(train_metrics, val_metrics, train_loss, train_acc, + val_loss, val_acc, val_f1, epoch) + + # 更新最佳模型信息 + if val_f1 > best_val_f1: + best_val_f1 = val_f1 + best_model = self.model.state_dict() + best_epoch = epoch + 1 # 记录最佳epoch + 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 + + # 打印最佳模型信息 + 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 # 返回最佳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]: + """验证一个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') + return (val_loss / len(val_loader.dataset), + val_acc.double() / len(val_loader.dataset), + val_f1) + + 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) + + 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 train_detect(self) -> Tuple[float, float, List[float], List[float], List[float]]: + """训练和检测模型""" + # 从配置文件中读取数据路径 + 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 = torch.tensor( + compute_class_weight('balanced', + classes=np.unique(y_train), + y=y_train), + dtype=torch.float32 + ).to(self.device) + + if self.config['training']['experimental_mode']: + return self._run_experiments(X_train, y_train, X_val, y_val, class_weights) + else: + return self._single_train_detect(X_train, y_train, X_val, y_val, class_weights) + + 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 + + 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}" + + 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 + + # 直接复制最佳实验的模型文件到不带序号的版本和目标路径 + shutil.copyfile(best_model_path, base_model_path) + if self.config['training']['replace_model']: + shutil.copyfile(best_model_path, self.config['paths']['model']['train']) + + # 打印日志信息 + 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[:-1] + + 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'] + ) + + # 训练模型 + 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 Acc') + plt.plot(val_metrics['acc'], label='Val Acc') + plt.title('Accuracy', fontproperties=self.font_prop) + plt.legend(prop=self.font_prop) + + # F1分数曲线 + plt.subplot(133) + plt.plot(val_metrics['f1'], label='Val F1') + plt.title('F1 Score', fontproperties=self.font_prop) + plt.legend(prop=self.font_prop) + + plt.tight_layout() + plt.savefig(self.config['paths']['model']['train_process']) + plt.close()