David 4 gün önce
ebeveyn
işleme
82f34d5abe

+ 2 - 2
app/common/data_handler.py

@@ -13,9 +13,9 @@ from sklearn.preprocessing import MinMaxScaler
 from app.common.data_cleaning import *
 
 class DataHandler(object):
-    def __init__(self, logger, args):
+    def __init__(self, logger, opt):
         self.logger = logger
-        self.opt = args.parse_args_and_yaml()
+        self.opt = opt
 
     def get_train_data(self, dfs, col_time, target):
         train_x, valid_x, train_y, valid_y = [], [], [], []

+ 2 - 2
app/common/tf_lstm.py

@@ -19,9 +19,9 @@ model_lock = Lock()
 
 
 class TSHandler(object):
-    def __init__(self, logger, args):
+    def __init__(self, logger, opt):
         self.logger = logger
-        self.opt = args.parse_args_and_yaml()
+        self.opt = opt
         self.model = None
         self.model_params = None
         self.mongoUtils = MongoUtils(logger)

+ 392 - 0
app/logs/2025-05-20/south-forecast.2025-05-20.0.log

@@ -217,3 +217,395 @@
 2025-05-20 14:20:59,302 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
  - _tfmw_add_deprecation_warning
 2025-05-20 14:20:59,512 - task_worker.py - ERROR - Station E:\compete\app\model\data\DQYC\qy\62\1002\2025-04-21\IN\1086 failed: 'capacities' - station_task
+2025-05-20 14:25:38,880 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:25:38,992 - main.py - INFO - 输入文件目录: E:/compete/app/model/data/DQYC/qy/62/1002/2025-04-21/IN - main
+2025-05-20 14:25:41,516 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:25:44,383 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:25:44,385 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:25:44,594 - task_worker.py - ERROR - Station E:\compete\app\model\data\DQYC\qy\62\1002\2025-04-21\IN\2361 failed: 'ModelTrainer' object has no attribute 'logger' - station_task
+2025-05-20 14:25:44,594 - task_worker.py - ERROR - Station E:\compete\app\model\data\DQYC\qy\62\1002\2025-04-21\IN\1086 failed: 'ModelTrainer' object has no attribute 'logger' - station_task
+2025-05-20 14:26:31,069 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:26:31,184 - main.py - INFO - 输入文件目录: E:/compete/app/model/data/DQYC/qy/62/1002/2025-04-21/IN - main
+2025-05-20 14:26:33,737 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:26:36,603 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:26:36,607 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:26:36,828 - tf_model_train.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-20 14:26:36,828 - tf_model_train.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-20 14:26:36,846 - task_worker.py - ERROR - Station E:\compete\app\model\data\DQYC\qy\62\1002\2025-04-21\IN\2361 failed: list index out of range - station_task
+2025-05-20 14:26:36,846 - task_worker.py - ERROR - Station E:\compete\app\model\data\DQYC\qy\62\1002\2025-04-21\IN\1086 failed: list index out of range - station_task
+2025-05-20 14:30:21,709 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:30:21,824 - main.py - INFO - 输入文件目录: E:/compete/app/model/data/DQYC/qy/62/1002/2025-04-21/IN - main
+2025-05-20 14:30:24,356 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:30:27,240 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:30:27,245 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:30:27,453 - tf_model_train.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-20 14:30:27,459 - tf_model_train.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-20 14:30:27,471 - task_worker.py - ERROR - Station E:\compete\app\model\data\DQYC\qy\62\1002\2025-04-21\IN\1086 failed: list index out of range - station_task
+2025-05-20 14:30:27,476 - task_worker.py - ERROR - Station E:\compete\app\model\data\DQYC\qy\62\1002\2025-04-21\IN\2361 failed: list index out of range - station_task
+2025-05-20 14:39:34,488 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:39:34,614 - main.py - INFO - 输入文件目录: E:/compete/app/model/data/DQYC/qy/62/1002/2025-04-21/IN - main
+2025-05-20 14:39:37,274 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:39:40,302 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:39:40,303 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 14:39:40,511 - tf_model_train.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-20 14:39:40,512 - tf_model_train.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-20 14:39:40,551 - data_cleaning.py - INFO - 开始清洗:训练集…… - cleaning
+2025-05-20 14:39:40,552 - data_cleaning.py - INFO - 开始清洗:训练集…… - cleaning
+2025-05-20 14:39:40,559 - data_cleaning.py - INFO - 行清洗:清洗的行数有:68,缺失的列有: - key_field_row_cleaning
+2025-05-20 14:39:40,560 - data_cleaning.py - INFO - 行清洗:清洗的行数有:69,缺失的列有: - key_field_row_cleaning
+2025-05-20 14:39:40,597 - data_handler.py - INFO - 数据总数:2907, 时序缺失的间隔:0, 其中,较长的时间间隔:0 - missing_time_splite
+2025-05-20 14:39:40,597 - data_handler.py - INFO - 需要补值的总点数:0 - missing_time_splite
+2025-05-20 14:39:40,598 - data_handler.py - INFO - 再次测算,需要插值的总点数为:0.0 - fill_train_data
+2025-05-20 14:39:40,598 - data_handler.py - INFO - 数据总数:2908, 时序缺失的间隔:0, 其中,较长的时间间隔:0 - missing_time_splite
+2025-05-20 14:39:40,598 - data_handler.py - INFO - 需要补值的总点数:0 - missing_time_splite
+2025-05-20 14:39:40,599 - data_handler.py - INFO - 再次测算,需要插值的总点数为:0.0 - fill_train_data
+2025-05-20 14:39:41,579 - dbmg.py - INFO - ❌ 系统异常: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'} - get_keras_model_from_mongo
+2025-05-20 14:39:41,579 - tf_lstm.py - INFO - 加强训练加载模型权重失败:("Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'}",) - train_init
+2025-05-20 14:39:41,592 - dbmg.py - INFO - ❌ 系统异常: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'} - get_keras_model_from_mongo
+2025-05-20 14:39:41,592 - tf_lstm.py - INFO - 加强训练加载模型权重失败:("Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'}",) - train_init
+2025-05-20 14:39:54,426 - tf_lstm.py - INFO - -----模型训练经过100轮迭代----- - training
+2025-05-20 14:39:54,426 - tf_lstm.py - INFO - -----模型训练经过100轮迭代----- - training
+2025-05-20 14:39:54,426 - tf_lstm.py - INFO - 训练集损失函数为:[9.0531e-01 3.1888e-01 9.9910e-02 2.8170e-02 7.5200e-03 2.3400e-03
+ 1.1900e-03 9.6000e-04 9.2000e-04 9.1000e-04 9.0000e-04 9.0000e-04
+ 8.9000e-04 8.9000e-04 8.9000e-04 8.9000e-04 8.8000e-04 8.8000e-04
+ 8.8000e-04 8.8000e-04 8.8000e-04 8.7000e-04 8.7000e-04 8.7000e-04
+ 8.7000e-04 8.7000e-04 8.7000e-04 8.7000e-04 8.7000e-04 8.6000e-04
+ 8.6000e-04 8.6000e-04 8.6000e-04 8.6000e-04 8.6000e-04 8.6000e-04
+ 8.6000e-04 8.6000e-04 8.6000e-04 8.6000e-04 8.5000e-04 8.5000e-04
+ 8.5000e-04 8.5000e-04 8.5000e-04 8.5000e-04 8.5000e-04 8.5000e-04
+ 8.5000e-04 8.5000e-04 8.5000e-04 8.5000e-04 8.5000e-04 8.5000e-04
+ 8.5000e-04 8.5000e-04 8.5000e-04 8.4000e-04 8.4000e-04 8.4000e-04
+ 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04
+ 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04
+ 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04
+ 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04
+ 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04 8.4000e-04
+ 8.3000e-04 8.3000e-04 8.3000e-04 8.3000e-04 8.3000e-04 8.3000e-04
+ 8.3000e-04 8.3000e-04 8.3000e-04 8.3000e-04] - training
+2025-05-20 14:39:54,426 - tf_lstm.py - INFO - 训练集损失函数为:[8.9877e-01 3.1553e-01 9.8310e-02 2.7340e-02 7.0000e-03 1.9300e-03
+ 8.1000e-04 5.9000e-04 5.5000e-04 5.4000e-04 5.4000e-04 5.4000e-04
+ 5.4000e-04 5.4000e-04 5.4000e-04 5.4000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.3000e-04 5.3000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04] - training
+2025-05-20 14:39:54,426 - tf_lstm.py - INFO - 验证集损失函数为:[0.51434 0.16851 0.04969 0.01363 0.00409 0.00189 0.00142 0.00133 0.00131
+ 0.0013  0.00129 0.00128 0.00128 0.00127 0.00127 0.00126 0.00126 0.00126
+ 0.00125 0.00125 0.00125 0.00124 0.00124 0.00124 0.00124 0.00123 0.00123
+ 0.00123 0.00123 0.00123 0.00122 0.00122 0.00122 0.00122 0.00122 0.00122
+ 0.00122 0.00121 0.00121 0.00121 0.00121 0.00121 0.00121 0.00121 0.00121
+ 0.00121 0.0012  0.0012  0.0012  0.0012  0.0012  0.0012  0.0012  0.0012
+ 0.0012  0.0012  0.0012  0.00119 0.00119 0.00119 0.00119 0.00119 0.00119
+ 0.00119 0.00119 0.00119 0.00119 0.00119 0.00119 0.00119 0.00119 0.00119
+ 0.00119 0.00119 0.00119 0.00118 0.00118 0.00118 0.00118 0.00118 0.00118
+ 0.00118 0.00118 0.00118 0.00118 0.00118 0.00118 0.00118 0.00118 0.00118
+ 0.00118 0.00118 0.00118 0.00118 0.00118 0.00118 0.00118 0.00118 0.00118
+ 0.00118] - training
+2025-05-20 14:39:54,426 - tf_lstm.py - INFO - 验证集损失函数为:[0.50973 0.16624 0.04849 0.01296 0.0036  0.00145 0.00101 0.00092 0.0009
+ 0.00089 0.00089 0.00089 0.00088 0.00088 0.00088 0.00087 0.00087 0.00087
+ 0.00087 0.00086 0.00086 0.00086 0.00086 0.00086 0.00086 0.00085 0.00085
+ 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00084 0.00084
+ 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084
+ 0.00084 0.00084 0.00084 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083
+ 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083
+ 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082] - training
+2025-05-20 14:39:54,427 - tf_model_train.py - ERROR - Training failed: 'ModelTrainer' object has no attribute 'opt'
+Traceback (most recent call last):
+  File "E:\compete\app\model\tf_model_train.py", line 87, in train
+    self.opt.Model['features'] = ','.join(self.dh.opt.features)
+    ^^^^^^^^
+AttributeError: 'ModelTrainer' object has no attribute 'opt'
+ - _handle_error
+2025-05-20 14:39:54,432 - tf_model_train.py - ERROR - Training failed: 'ModelTrainer' object has no attribute 'opt'
+Traceback (most recent call last):
+  File "E:\compete\app\model\tf_model_train.py", line 87, in train
+    self.opt.Model['features'] = ','.join(self.dh.opt.features)
+    ^^^^^^^^
+AttributeError: 'ModelTrainer' object has no attribute 'opt'
+ - _handle_error
+2025-05-20 15:26:00,753 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 15:26:00,873 - main.py - INFO - 输入文件目录: E:/compete/app/model/data/DQYC/qy/62/1002/2025-04-21/IN - main
+2025-05-20 15:26:03,466 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 15:26:06,401 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 15:26:06,411 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 15:26:06,623 - tf_model_train.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-20 15:26:06,629 - tf_model_train.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-20 15:26:06,642 - data_cleaning.py - INFO - 开始清洗:训练集…… - cleaning
+2025-05-20 15:26:06,647 - data_cleaning.py - INFO - 开始清洗:训练集…… - cleaning
+2025-05-20 15:26:06,650 - data_cleaning.py - INFO - 行清洗:清洗的行数有:69,缺失的列有: - key_field_row_cleaning
+2025-05-20 15:26:06,656 - data_cleaning.py - INFO - 行清洗:清洗的行数有:68,缺失的列有: - key_field_row_cleaning
+2025-05-20 15:26:06,682 - data_handler.py - INFO - 数据总数:2907, 时序缺失的间隔:0, 其中,较长的时间间隔:0 - missing_time_splite
+2025-05-20 15:26:06,682 - data_handler.py - INFO - 需要补值的总点数:0 - missing_time_splite
+2025-05-20 15:26:06,683 - data_handler.py - INFO - 再次测算,需要插值的总点数为:0.0 - fill_train_data
+2025-05-20 15:26:06,687 - data_handler.py - INFO - 数据总数:2908, 时序缺失的间隔:0, 其中,较长的时间间隔:0 - missing_time_splite
+2025-05-20 15:26:06,687 - data_handler.py - INFO - 需要补值的总点数:0 - missing_time_splite
+2025-05-20 15:26:06,688 - data_handler.py - INFO - 再次测算,需要插值的总点数为:0.0 - fill_train_data
+2025-05-20 15:26:07,624 - dbmg.py - INFO - ❌ 系统异常: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'} - get_keras_model_from_mongo
+2025-05-20 15:26:07,624 - tf_lstm.py - INFO - 加强训练加载模型权重失败:("Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'}",) - train_init
+2025-05-20 15:26:07,633 - dbmg.py - INFO - ❌ 系统异常: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'} - get_keras_model_from_mongo
+2025-05-20 15:26:07,633 - tf_lstm.py - INFO - 加强训练加载模型权重失败:("Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'}",) - train_init
+2025-05-20 15:26:20,550 - tf_lstm.py - INFO - -----模型训练经过100轮迭代----- - training
+2025-05-20 15:26:20,550 - tf_lstm.py - INFO - -----模型训练经过100轮迭代----- - training
+2025-05-20 15:26:20,551 - tf_lstm.py - INFO - 训练集损失函数为:[9.0203e-01 3.1670e-01 9.8690e-02 2.7480e-02 7.0600e-03 1.9500e-03
+ 8.2000e-04 5.9000e-04 5.5000e-04 5.4000e-04 5.4000e-04 5.4000e-04
+ 5.4000e-04 5.4000e-04 5.4000e-04 5.3000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.1000e-04 5.1000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04] - training
+2025-05-20 15:26:20,551 - tf_lstm.py - INFO - 训练集损失函数为:[9.0353e-01 3.1775e-01 9.8940e-02 2.7240e-02 6.6300e-03 1.4600e-03
+ 3.3000e-04 1.0000e-04 6.0000e-05 6.0000e-05 6.0000e-05 6.0000e-05
+ 6.0000e-05 6.0000e-05 6.0000e-05 6.0000e-05 6.0000e-05 6.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05] - training
+2025-05-20 15:26:20,551 - tf_lstm.py - INFO - 验证集损失函数为:[0.51163 0.16686 0.04873 0.01304 0.00363 0.00146 0.00101 0.00092 0.0009
+ 0.00089 0.00089 0.00088 0.00088 0.00088 0.00088 0.00087 0.00087 0.00087
+ 0.00087 0.00086 0.00086 0.00086 0.00086 0.00086 0.00086 0.00086 0.00085
+ 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00084
+ 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084
+ 0.00084 0.00084 0.00084 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083
+ 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083
+ 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082] - training
+2025-05-20 15:26:20,551 - tf_lstm.py - INFO - 验证集损失函数为:[5.1261e-01 1.6711e-01 4.8310e-02 1.2300e-02 2.8100e-03 6.3000e-04
+ 1.8000e-04 1.0000e-04 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05] - training
+2025-05-20 15:26:20,573 - dbmg.py - INFO - ❌ 数据库操作 - 详细错误: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'} - insert_trained_model_into_mongo
+2025-05-20 15:26:20,573 - dbmg.py - INFO - ❌ 数据库操作 - 详细错误: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'} - insert_trained_model_into_mongo
+2025-05-20 15:26:20,677 - tf_model_train.py - ERROR - Training failed: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'}
+Traceback (most recent call last):
+  File "E:\compete\app\model\tf_model_train.py", line 95, in train
+    self.mgUtils.insert_trained_model_into_mongo(trained_model, self.config)
+  File "E:\compete\app\common\dbmg.py", line 77, in insert_trained_model_into_mongo
+    if collection.estimated_document_count() >= 50:
+       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\collection.py", line 1810, in estimated_document_count
+    return self._retryable_non_cursor_read(_cmd, None, operation=_Op.COUNT)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\collection.py", line 1910, in _retryable_non_cursor_read
+    return client._retryable_read(func, self._read_preference_for(s), s, operation)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\mongo_client.py", line 1534, in _retryable_read
+    return self._retry_internal(
+           ^^^^^^^^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\_csot.py", line 108, in csot_wrapper
+    return func(self, *args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\mongo_client.py", line 1501, in _retry_internal
+    ).run()
+      ^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\mongo_client.py", line 2347, in run
+    return self._read() if self._is_read else self._write()
+           ^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\mongo_client.py", line 2479, in _read
+    with self._client._conn_from_server(self._read_pref, self._server, self._session) as (
+  File "D:\anaconda3\envs\py312\Lib\contextlib.py", line 137, in __enter__
+    return next(self.gen)
+           ^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\mongo_client.py", line 1351, in _conn_from_server
+    with self._checkout(server, session) as conn:
+  File "D:\anaconda3\envs\py312\Lib\contextlib.py", line 137, in __enter__
+    return next(self.gen)
+           ^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\mongo_client.py", line 1260, in _checkout
+    with server.checkout(handler=err_handler) as conn:
+  File "D:\anaconda3\envs\py312\Lib\contextlib.py", line 137, in __enter__
+    return next(self.gen)
+           ^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\pool.py", line 1763, in checkout
+    conn = self._get_conn(checkout_started_time, handler=handler)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\pool.py", line 1921, in _get_conn
+    conn = self.connect(handler=handler)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\pool.py", line 1725, in connect
+    conn.authenticate()
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\pool.py", line 1098, in authenticate
+    auth.authenticate(creds, self, reauthenticate=reauthenticate)
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\auth.py", line 656, in authenticate
+    auth_func(credentials, conn)
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\auth.py", line 560, in _authenticate_default
+    return _authenticate_scram(credentials, conn, "SCRAM-SHA-1")
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\auth.py", line 299, in _authenticate_scram
+    res = conn.command(source, cmd)
+          ^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\helpers.py", line 342, in inner
+    return func(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\pool.py", line 988, in command
+    return command(
+           ^^^^^^^^
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\network.py", line 212, in command
+    helpers._check_command_response(
+  File "D:\anaconda3\envs\py312\Lib\site-packages\pymongo\helpers.py", line 248, in _check_command_response
+    raise OperationFailure(errmsg, code, response, max_wire_version)
+pymongo.errors.OperationFailure: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'}
+ - _handle_error
+2025-05-20 15:57:57,894 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 15:57:58,017 - main.py - INFO - 输入文件目录: E:/compete/app/model/data/DQYC/qy/62/1002/2025-04-21/IN - main
+2025-05-20 15:58:00,771 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 15:58:03,716 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 15:58:03,722 - module_wrapper.py - WARNING - From E:\compete\app\model\losses.py:10: The name tf.set_random_seed is deprecated. Please use tf.compat.v1.set_random_seed instead.
+ - _tfmw_add_deprecation_warning
+2025-05-20 15:58:03,933 - tf_model_train.py - INFO - GPU 2 allocated - _setup_resources
+2025-05-20 15:58:03,933 - tf_model_train.py - INFO - GPU 1 allocated - _setup_resources
+2025-05-20 15:58:03,952 - data_cleaning.py - INFO - 开始清洗:训练集…… - cleaning
+2025-05-20 15:58:03,952 - data_cleaning.py - INFO - 开始清洗:训练集…… - cleaning
+2025-05-20 15:58:03,960 - data_cleaning.py - INFO - 行清洗:清洗的行数有:68,缺失的列有: - key_field_row_cleaning
+2025-05-20 15:58:03,960 - data_cleaning.py - INFO - 行清洗:清洗的行数有:69,缺失的列有: - key_field_row_cleaning
+2025-05-20 15:58:03,987 - data_handler.py - INFO - 数据总数:2907, 时序缺失的间隔:0, 其中,较长的时间间隔:0 - missing_time_splite
+2025-05-20 15:58:03,987 - data_handler.py - INFO - 需要补值的总点数:0 - missing_time_splite
+2025-05-20 15:58:03,988 - data_handler.py - INFO - 数据总数:2908, 时序缺失的间隔:0, 其中,较长的时间间隔:0 - missing_time_splite
+2025-05-20 15:58:03,988 - data_handler.py - INFO - 需要补值的总点数:0 - missing_time_splite
+2025-05-20 15:58:03,988 - data_handler.py - INFO - 再次测算,需要插值的总点数为:0.0 - fill_train_data
+2025-05-20 15:58:03,988 - data_handler.py - INFO - 再次测算,需要插值的总点数为:0.0 - fill_train_data
+2025-05-20 15:58:04,931 - dbmg.py - INFO - ⚠️ 未找到模型 'lstm' 的有效记录 - get_keras_model_from_mongo
+2025-05-20 15:58:04,932 - tf_lstm.py - INFO - 加强训练加载模型权重失败:('cannot unpack non-iterable NoneType object',) - train_init
+2025-05-20 15:58:04,934 - dbmg.py - INFO - ⚠️ 未找到模型 'lstm' 的有效记录 - get_keras_model_from_mongo
+2025-05-20 15:58:04,934 - tf_lstm.py - INFO - 加强训练加载模型权重失败:('cannot unpack non-iterable NoneType object',) - train_init
+2025-05-20 15:58:18,001 - tf_lstm.py - INFO - -----模型训练经过100轮迭代----- - training
+2025-05-20 15:58:18,002 - tf_lstm.py - INFO - -----模型训练经过100轮迭代----- - training
+8340e-02 2.6920e-02 6.5200e-03 1.4300e-03
+ 3.2000e-04 1.0000e-04 6.0000e-05 6.0000e-05 6.0000e-05 6.0000e-05
+ 6.0000e-05 6.0000e-05 6.0000e-05 6.0000e-05 6.0000e-05 6.0000e-05
+ 6.0000e-05 6.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05
+ 5.0000e-05 5.0000e-05 5.0000e-05 5.0000e-05] - training
+2025-05-20 15:58:18,002 - tf_lstm.py - INFO - 验证集损失函数为:[5.1238e-01 1.6642e-01 4.7850e-02 1.2120e-02 2.7600e-03 6.1000e-04
+ 1.8000e-04 1.0000e-04 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05 8.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05
+ 7.0000e-05 7.0000e-05 7.0000e-05 7.0000e-05] - training
+2025-05-20 15:58:18,002 - tf_lstm.py - INFO - 训练集损失函数为:[9.0536e-01 3.1867e-01 9.9770e-02 2.7960e-02 7.2200e-03 1.9900e-03
+ 8.3000e-04 6.0000e-04 5.5000e-04 5.5000e-04 5.4000e-04 5.4000e-04
+ 5.4000e-04 5.4000e-04 5.4000e-04 5.4000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04 5.3000e-04
+ 5.3000e-04 5.3000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04
+ 5.2000e-04 5.2000e-04 5.2000e-04 5.2000e-04 5.1000e-04 5.1000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04
+ 5.1000e-04 5.1000e-04 5.1000e-04 5.1000e-04] - training
+2025-05-20 15:58:18,003 - tf_lstm.py - INFO - 验证集损失函数为:[0.51413 0.16832 0.04944 0.01332 0.00372 0.00148 0.00102 0.00092 0.0009
+ 0.0009  0.00089 0.00089 0.00088 0.00088 0.00088 0.00088 0.00087 0.00087
+ 0.00087 0.00087 0.00086 0.00086 0.00086 0.00086 0.00086 0.00086 0.00086
+ 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085 0.00085
+ 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084 0.00084
+ 0.00084 0.00084 0.00084 0.00084 0.00083 0.00083 0.00083 0.00083 0.00083
+ 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083
+ 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00083 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082 0.00082
+ 0.00082] - training
+2025-05-20 15:58:18,063 - dbmg.py - INFO - ✅ 模型 lstm 保存成功 | 文档ID: 682c361a3d53239c05a9f9c4 - insert_trained_model_into_mongo
+2025-05-20 15:58:18,080 - dbmg.py - INFO - ✅ 模型 lstm 保存成功 | 文档ID: 682c361a39772d853bd04505 - insert_trained_model_into_mongo
+2025-05-20 15:58:18,124 - dbmg.py - INFO - ✅ 缩放器 lstm 保存成功 | 文档ID: 682c361a3d53239c05a9f9c6 - insert_scaler_model_into_mongo
+2025-05-20 15:58:18,132 - dbmg.py - INFO - ✅ 缩放器 lstm 保存成功 | 文档ID: 682c361a39772d853bd04507 - insert_scaler_model_into_mongo

+ 2 - 0
app/model/data/DQYC/qy/62/1002/2025-04-21/OUT/STATUS.TXT

@@ -0,0 +1,2 @@
+1
+2

+ 4 - 4
app/model/main.py

@@ -11,7 +11,7 @@
 from tqdm import tqdm
 import pandas as pd
 from pathlib import Path
-from functools import partial
+from copy import deepcopy
 from concurrent.futures import ProcessPoolExecutor
 from app.common.config import parser, logger
 from app.model.resource_manager import ResourceController
@@ -59,11 +59,11 @@ def main():
             for sid in all_stations:
                 # 动态分配GPU
                 gpu_id = rc.get_gpu()
-                task_config = config.copy()
+                task_config = deepcopy(config)
                 task_config['gpu_assignment'] = gpu_id
-
+                task_config['station_id'] = sid
                 # 提交任务
-                future = executor.submit(station_task, sid, task_config)
+                future = executor.submit(station_task, task_config)
                 future.add_done_callback(
                     lambda _: rc.release_gpu(task_config['gpu_assignment']))
                 futures.append(future)

+ 4 - 2
app/model/task_worker.py

@@ -11,10 +11,11 @@ from app.model.tf_model_train import ModelTrainer
 from app.model.material import MaterialLoader
 
 
-def station_task(station_id, config):
+def station_task(config):
     """场站级训练任务"""
     try:
         print("111")
+        station_id = config['station_id']
         mate = MaterialLoader(base_path=config['input_file'])
         # 动态生成场站数据路径
         print("222")
@@ -25,7 +26,8 @@ def station_task(station_id, config):
         train_data = pd.merge(data_objects.nwp_v_h, data_objects.power, on=config['col_time'])
         print("444")
         # 模型训练
-        model = ModelTrainer(station_id, train_data, capacity=config['capacities'][station_id], gpu_id=config.get('gpu_assignment'))
+        # model = ModelTrainer(station_id, train_data, capacity=data_objects.cap, gpu_id=config.get('gpu_assignment'))
+        model = ModelTrainer(train_data, capacity=data_objects.cap, config=config)
         model.train()
         print("555")
         return {'status': 'success', 'station_id': station_id}

+ 20 - 18
app/model/tf_model_train.py

@@ -7,7 +7,7 @@
 
 import logging
 import os, json
-import time
+import time, argparse
 import traceback
 import pandas as pd
 from typing import Dict, Any
@@ -20,25 +20,22 @@ class ModelTrainer:
     """模型训练器封装类"""
 
     def __init__(self,
-                 input_file,
-                 args,
                  train_data: pd.DataFrame,
                  capacity: float,
-                 gpu_id: int = None,
                  config: Dict[str, Any] = None
                  ):
-
+        self.config = config
+        self.logger = logger
         self.train_data = train_data
         self.capacity = capacity
-        self.gpu_id = gpu_id
-        self.config = config or {}
+        self.gpu_id = config.get('gpu_assignment')
         self._setup_resources()
 
         # 初始化组件
-        self.input_file = input_file
-        self.args = parser.parse_args_and_yaml()  # 从原始配置导入
-        self.dh = DataHandler(logger, parser)
-        self.ts = TSHandler(logger, parser)
+        self.input_file = config.get("input_file")
+        self.opt = argparse.Namespace(**config)
+        self.dh = DataHandler(logger, self.opt)
+        self.ts = TSHandler(logger, self.opt)
         self.mgUtils = MongoUtils(logger)
 
     def _setup_resources(self):
@@ -53,6 +50,7 @@ class ModelTrainer:
         # 获取程序开始时间
         start_time = time.time()
         success = 0
+        print("aaa")
         farm_id = self.input_file.split('/')[-2]
         output_file = self.input_file.replace('IN', 'OUT')
         status_file = 'STATUS.TXT'
@@ -64,36 +62,40 @@ class ModelTrainer:
             # ------------ 训练模型,保存模型 ------------
             # 1. 如果是加强训练模式,先加载预训练模型特征参数,再预处理训练数据
             # 2. 如果是普通模式,先预处理训练数据,再根据训练数据特征加载模型
+            print("bbb")
             model = self.ts.train_init() if self.ts.opt.Model['add_train'] else self.ts.get_keras_model(self.ts.opt)
             if self.ts.opt.Model['add_train']:
                 if model:
                     feas = json.loads(self.ts.model_params).get('features', self.dh.opt.features)
                     if set(feas).issubset(set(self.dh.opt.features)):
                         self.dh.opt.features = list(feas)
-                        train_x, train_y, valid_x, valid_y, scaled_train_bytes, scaled_target_bytes, scaled_cap = self.dh.train_data_handler(train_data)
+                        train_x, train_y, valid_x, valid_y, scaled_train_bytes, scaled_target_bytes, scaled_cap = self.dh.train_data_handler(self.train_data)
                     else:
                         model = self.ts.get_keras_model(self.ts.opt)
                         self.logger.info("训练数据特征,不满足,加强训练模型特征")
                 else:
                     model = self.ts.get_keras_model(self.ts.opt)
+            print("ccc")
             # 执行训练
             trained_model = self.ts.training(model, [train_x, valid_x, train_y, valid_y])
             # 模型持久化
             success = 1
+            print('ddd')
             # 更新算法状态:1. 启动成功
             write_number_to_file(os.path.join(output_file, status_file), 1, 1, 'rewrite')
             # ------------ 组装模型数据 ------------
             self.opt.Model['features'] = ','.join(self.dh.opt.features)
-            self.args.update({
-                'params': json.dumps(local_params),
+            self.config.update({
+                'params': json.dumps(self.config['Model']),
                 'descr': f'南网竞赛-{farm_id}',
                 'gen_time': time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()),
-                'model_table': local_params['model_table'] + farm_id,
-                'scaler_table': local_params['scaler_table'] + farm_id
+                'model_table': self.config['model_table'] + farm_id,
+                'scaler_table': self.config['scaler_table'] + farm_id
             })
-            mgUtils.insert_trained_model_into_mongo(trained_model, local_params)
-            mgUtils.insert_scaler_model_into_mongo(scaled_train_bytes, scaled_target_bytes, local_params)
+            self.mgUtils.insert_trained_model_into_mongo(trained_model, self.config)
+            self.mgUtils.insert_scaler_model_into_mongo(scaled_train_bytes, scaled_target_bytes, self.config)
             # 更新算法状态:正常结束
+            print("eee")
             write_number_to_file(os.path.join(output_file, status_file), 2, 2)
             return True
         except Exception as e: