17
17
from sklearn .utils import check_random_state
18
18
from paddlets .utils .utils import convert_and_remove_types
19
19
import numpy as np
20
+ from packaging import version
20
21
import paddle
21
22
22
23
# from paddlets.models.utils import format_labels
@@ -146,8 +147,7 @@ def _check_params(self):
146
147
if not self ._eval_metrics :
147
148
self ._eval_metrics = ["acc" ]
148
149
149
- def _check_tsdatasets (self ,
150
- tsdatasets : List [TSDataset ],
150
+ def _check_tsdatasets (self , tsdatasets : List [TSDataset ],
151
151
labels : np .ndarray ):
152
152
"""Ensure the robustness of input data (consistent feature order), at the same time,
153
153
check whether the data types are compatible. If not, the processing logic is as follows.
@@ -215,8 +215,7 @@ def _init_optimizer(self) -> Optimizer:
215
215
216
216
else :
217
217
return self ._optimizer_fn (
218
- ** self ._optimizer_params ,
219
- parameters = self ._network .parameters ())
218
+ ** self ._optimizer_params , parameters = self ._network .parameters ())
220
219
221
220
def _init_fit_dataloaders (
222
221
self ,
@@ -261,8 +260,8 @@ def _init_fit_dataloaders(
261
260
valid_tsdatasets , valid_labels ,
262
261
self ._fit_params ['input_lens' ])
263
262
else :
264
- valid_dataset = data_adapter .to_paddle_dataset (
265
- valid_tsdatasets , valid_labels )
263
+ valid_dataset = data_adapter .to_paddle_dataset (valid_tsdatasets ,
264
+ valid_labels )
266
265
valid_dataloader = data_adapter .to_paddle_dataloader (
267
266
valid_dataset , self ._batch_size , shuffle = False )
268
267
@@ -284,8 +283,8 @@ def _init_predict_dataloader(
284
283
tsdatasets = [tsdatasets ]
285
284
self ._check_tsdatasets (tsdatasets , labels )
286
285
data_adapter = ClassifyDataAdapter ()
287
- dataset = data_adapter .to_paddle_dataset (
288
- tsdatasets , labels , self ._fit_params ['input_lens' ])
286
+ dataset = data_adapter .to_paddle_dataset (tsdatasets , labels ,
287
+ self ._fit_params ['input_lens' ])
289
288
dataloader = data_adapter .to_paddle_dataloader (
290
289
dataset , self ._batch_size , shuffle = False )
291
290
return dataloader
@@ -350,9 +349,10 @@ def apply_to_static(self, model):
350
349
meta_data = self ._build_meta ()
351
350
spec = build_network_input_spec (meta_data )
352
351
model = paddle .jit .to_static (model , input_spec = spec )
353
- logger .info ("Successfully to apply @to_static with specs: {}" .format (spec ))
352
+ logger .info ("Successfully to apply @to_static with specs: {}" .format (
353
+ spec ))
354
354
return model
355
-
355
+
356
356
def fit (self ,
357
357
train_tsdatasets : List [TSDataset ],
358
358
train_labels : np .ndarray ,
@@ -394,17 +394,18 @@ def _fit(self,
394
394
self ._history , self ._callback_container = self ._init_callbacks ()
395
395
self ._network = self ._init_network ()
396
396
self ._optimizer = self ._init_optimizer ()
397
- if self .use_amp :
398
- logger .info ('use AMP to train. AMP level = {}' .format (self .amp_level ))
397
+ if self .use_amp :
398
+ logger .info ('use AMP to train. AMP level = {}' .format (
399
+ self .amp_level ))
399
400
self .scaler = paddle .amp .GradScaler (init_loss_scaling = 1024 )
400
401
if self .amp_level == 'O2' :
401
402
self ._network , self ._optimizer = paddle .amp .decorate (
402
- models = self ._network ,
403
- optimizers = self ._optimizer ,
404
- level = 'O2' )
403
+ models = self ._network ,
404
+ optimizers = self ._optimizer ,
405
+ level = 'O2' )
405
406
if to_static_train :
406
407
self ._network = self .apply_to_static (self ._network )
407
-
408
+
408
409
check_random_state (self ._seed )
409
410
410
411
# Call the `on_train_begin` method of each callback before the training starts.
@@ -447,8 +448,7 @@ def predict(
447
448
# np.save('probs',probs)
448
449
rng = check_random_state (self ._seed )
449
450
return np .array ([
450
- self ._classes_ [int (
451
- rng .choice (np .flatnonzero (prob == prob .max ())))]
451
+ self ._classes_ [int (rng .choice (np .flatnonzero (prob == prob .max ())))]
452
452
for prob in probs
453
453
])
454
454
@@ -548,7 +548,7 @@ def _train_batch(self, X: Dict[str, paddle.Tensor],
548
548
output = self ._network (X )
549
549
train_run_cost = time .time () - start_time
550
550
loss = self ._compute_loss (output , y )
551
- scaled_loss = self .scaler .scale (loss )
551
+ scaled_loss = self .scaler .scale (loss )
552
552
scaled_loss .backward ()
553
553
self .scaler .step (self ._optimizer ) # update parameters
554
554
self .scaler .update ()
@@ -559,7 +559,7 @@ def _train_batch(self, X: Dict[str, paddle.Tensor],
559
559
"loss" : loss .item (),
560
560
"train_run_cost" : train_run_cost
561
561
}
562
-
562
+
563
563
else :
564
564
output = self ._network (X )
565
565
train_run_cost = time .time () - start_time
@@ -769,10 +769,33 @@ def save(self,
769
769
if dygraph_to_static :
770
770
layer = paddle .jit .to_static (
771
771
self ._network , input_spec = input_spec )
772
- paddle .jit .save (
773
- layer ,
774
- os .path .join (abs_root_path ,
775
- internal_filename_map ["network_model" ]))
772
+ paddle_version = version .parse (paddle .__version__ )
773
+ if paddle_version >= version .parse (
774
+ '3.0.0b2' ) or paddle_version == version .parse (
775
+ '0.0.0' ):
776
+ for enable_pir in [True , False ]:
777
+ if not enable_pir :
778
+ layer .forward .rollback ()
779
+ with paddle .pir_utils .OldIrGuard ():
780
+ layer = paddle .jit .to_static (
781
+ self ._network , input_spec = input_spec )
782
+ paddle .jit .save (
783
+ layer ,
784
+ os .path .join (abs_root_path ,
785
+ internal_filename_map [
786
+ "network_model" ]))
787
+ else :
788
+ paddle .jit .save (
789
+ layer ,
790
+ os .path .join (
791
+ abs_root_path ,
792
+ internal_filename_map ["network_model" ]))
793
+ else :
794
+ paddle .jit .save (
795
+ layer ,
796
+ os .path .join (
797
+ abs_root_path ,
798
+ internal_filename_map ["network_model" ]))
776
799
else :
777
800
paddle .jit .save (
778
801
self ._network ,
0 commit comments