David hace 3 meses
padre
commit
c8d27fc378

+ 41 - 7
models_processing/model_tf/tf_bp.py

@@ -5,8 +5,9 @@
 # @Author    :David
 # @Company: shenyang JY
 from tensorflow.keras.models import Sequential
-from tensorflow.keras.layers import Input, Dense, LSTM, concatenate, Conv1D, Conv2D, MaxPooling1D, Reshape, Flatten, Dropout
+from tensorflow.keras.layers import Input, Dense, LSTM, concatenate, Conv1D, Conv2D, MaxPooling1D, Reshape, Flatten, Dropout, BatchNormalization, LeakyReLU
 from tensorflow.keras.models import Model, load_model
+from tensorflow.keras.regularizers import l2
 from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping, TensorBoard, ReduceLROnPlateau
 from tensorflow.keras import optimizers, regularizers
 from models_processing.model_tf.losses import region_loss
@@ -35,18 +36,51 @@ class BPHandler(object):
         except Exception as e:
             self.logger.info("加载模型权重失败:{}".format(e.args))
 
+    # @staticmethod
+    # def get_keras_model(opt):
+    #     loss = region_loss(opt)
+    #     model = Sequential([
+    #         Dense(64, input_dim=opt.Model['input_size'], activation='relu'),  # 输入层和隐藏层,10个神经元
+    #         Dropout(0.2),
+    #         Dense(32, activation='relu'),  # 隐藏层,8个神经元
+    #         Dropout(0.3),
+    #         Dense(16, activation='relu'),  # 隐藏层,8个神经元
+    #         Dense(1, activation='linear')  # 输出层,1个神经元(用于回归任务)
+    #     ])
+    #     adam = optimizers.Adam(learning_rate=opt.Model['learning_rate'], beta_1=0.9, beta_2=0.999, epsilon=1e-7, amsgrad=True)
+    #     model.compile(loss=loss, optimizer=adam)
+    #     return model
+
     @staticmethod
     def get_keras_model(opt):
+        # 自定义损失函数(需确保正确性)
         loss = region_loss(opt)
+
+        # 网络结构
         model = Sequential([
-            Dense(64, input_dim=opt.Model['input_size'], activation='relu'),  # 输入层和隐藏层,10个神经元
-            Dropout(0.2),
-            Dense(32, activation='relu'),  # 隐藏层,8个神经元
+            Dense(128, input_dim=opt.Model['input_size'], kernel_regularizer=l2(0.001)),
+            LeakyReLU(alpha=0.1),
+            BatchNormalization(),
             Dropout(0.3),
-            Dense(16, activation='relu'),  # 隐藏层,8个神经元
-            Dense(1, activation='linear')  # 输出层,1个神经元(用于回归任务)
+
+            Dense(64, kernel_regularizer=l2(0.001)),
+            LeakyReLU(alpha=0.1),
+            BatchNormalization(),
+            Dropout(0.4),
+
+            Dense(32, kernel_regularizer=l2(0.001)),
+            LeakyReLU(alpha=0.1),
+            Dense(1, activation='linear')
         ])
-        adam = optimizers.Adam(learning_rate=opt.Model['learning_rate'], beta_1=0.9, beta_2=0.999, epsilon=1e-7, amsgrad=True)
+
+        # 优化器配置
+        adam = optimizers.Adam(
+            learning_rate=0.001,
+            beta_1=0.9,
+            beta_2=0.999,
+            epsilon=1e-6
+        )
+
         model.compile(loss=loss, optimizer=adam)
         return model
 

+ 2 - 2
models_processing/model_tf/tf_cnn_train.py

@@ -49,13 +49,13 @@ def model_training_bp():
     try:
         # ------------ 获取数据,预处理训练数据 ------------
         train_data = get_data_from_mongo(args)
-        train_x, valid_x, train_y, valid_y, scaled_train_bytes, scaled_target_bytes, scaled_cap = dh.train_data_handler(train_data)
+        train_x, train_y, valid_x, valid_y, scaled_train_bytes, scaled_target_bytes, scaled_cap = dh.train_data_handler(train_data)
         # ------------ 训练模型,保存模型 ------------
         cnn.opt.Model['input_size'] = train_x.shape[2]
         cnn.opt.cap = round(scaled_cap, 2)
         logger.info("---------cap归一化:{}".format(cnn.opt.cap))
 
-        bp_model = cnn.training([train_x, valid_x, train_y, valid_y])
+        bp_model = cnn.training([train_x, train_y, valid_x, valid_y])
 
         args['params'] = json.dumps(args)
         args['descr'] = '测试'

+ 2 - 2
models_processing/model_tf/tf_lstm_train.py

@@ -47,11 +47,11 @@ def model_training_bp():
     try:
         # ------------ 获取数据,预处理训练数据 ------------
         train_data = get_data_from_mongo(args)
-        train_x, valid_x, train_y, valid_y, scaled_train_bytes, scaled_target_bytes, scaled_cap = dh.train_data_handler(train_data)
+        train_x, train_y, valid_x, valid_y, scaled_train_bytes, scaled_target_bytes, scaled_cap = dh.train_data_handler(train_data)
         # ------------ 训练模型,保存模型 ------------
         ts.opt.Model['input_size'] = train_x.shape[2]
         ts.opt.cap = round(scaled_cap, 2)
-        ts_model = ts.training([train_x, valid_x, train_y, valid_y])
+        ts_model = ts.training([train_x, train_y, valid_x, valid_y])
 
         args['params'] = json.dumps(args)
         args['descr'] = '测试'