David 5 dní pred
rodič
commit
9e6050e657

+ 1 - 0
models_processing/model_tf/lstm.yaml

@@ -21,6 +21,7 @@ Model:
   train_data_fill: true
   use_cuda: false
   valid_data_rate: 0.15
+use_bidirectional: false
 region: south
 calculate: []
 cap: 153.0

+ 6 - 3
models_processing/model_tf/tf_bilstm.py

@@ -37,7 +37,7 @@ class TSHandler(object):
             self.logger.info("加载模型权重失败:{}".format(e.args))
 
     @staticmethod
-    def get_keras_model(opt, time_series=3):
+    def get_keras_model(opt, time_series=3, use_bidirectional=False):
         assert time_series >= 3
         loss = region_loss(opt)
         l2_reg = regularizers.l2(opt.Model['lambda_value_2'])
@@ -45,9 +45,12 @@ class TSHandler(object):
 
         con1 = Conv1D(filters=64, kernel_size=5, strides=1, padding='valid', activation='relu', kernel_regularizer=l2_reg)(nwp_input)
         con1_p = MaxPooling1D(pool_size=5, strides=1, padding='valid', data_format='channels_last')(con1)
-        nwp_bi_lstm = Bidirectional(LSTM(units=opt.Model['hidden_size'], return_sequences=False,  kernel_regularizer=l2_reg), merge_mode='concat')(con1_p) # 默认拼接双向输出(最终维度=2*hidden_size)
+        if use_bidirectional:
+            nwp_lstm = Bidirectional(LSTM(units=opt.Model['hidden_size'], return_sequences=False,  kernel_regularizer=l2_reg), merge_mode='concat')(con1_p) # 默认拼接双向输出(最终维度=2*hidden_size)
+        else:
+            nwp_lstm = LSTM(units=opt.Model['hidden_size'], return_sequences=False,  kernel_regularizer=l2_reg)(con1_p) # 默认拼接双向输出(最终维度=2*hidden_size)
 
-        output = Dense(opt.Model['time_step']*(time_series-2), name='cdq_output')(nwp_bi_lstm)
+        output = Dense(opt.Model['time_step']*(time_series-2), name='cdq_output')(nwp_lstm)
 
         model = Model(nwp_input, output)
         adam = optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-7, amsgrad=True)

+ 3 - 3
models_processing/model_tf/tf_lstm3_train.py

@@ -59,7 +59,7 @@ def model_training_lstm3():
         # ------------ 训练模型,保存模型 ------------
         # 1. 如果是加强训练模式,先加载预训练模型特征参数,再预处理训练数据
         # 2. 如果是普通模式,先预处理训练数据,再根据训练数据特征加载模型
-        model = ts.train_init() if ts.opt.Model['add_train'] else ts.get_keras_model(ts.opt, time_series=args['time_series'])
+        model = ts.train_init() if ts.opt.Model['add_train'] else ts.get_keras_model(ts.opt, time_series=args['time_series'], use_bidirectional=ts.opt.use_bidirectional)
         if ts.opt.Model['add_train']:
             if model:
                 feas = json.loads(ts.model_params)['features']
@@ -67,10 +67,10 @@ def model_training_lstm3():
                     dh.opt.features = list(feas)
                     train_x, train_y, valid_x, valid_y, scaled_train_bytes, scaled_target_bytes, scaled_cap = dh.train_data_handler(train_data, time_series=args['time_series'], lstm_type=3)
                 else:
-                    model = ts.get_keras_model(ts.opt, time_series=args['time_series'])
+                    model = ts.get_keras_model(ts.opt, time_series=args['time_series'], use_bidirectional=ts.opt.use_bidirectional)
                     logger.info("训练数据特征,不满足,加强训练模型特征")
             else:
-                model = ts.get_keras_model(ts.opt, time_series=args['time_series'])
+                model = ts.get_keras_model(ts.opt, time_series=args['time_series'], use_bidirectional=ts.opt.use_bidirectional)
         ts_model = ts.training(model, [train_x, train_y, valid_x, valid_y])
         args['Model']['features'] = ','.join(dh.opt.features)
         args['params'] = json.dumps(args)