From 7ef474169d63a08163f49c72905e3b2696c992e2 Mon Sep 17 00:00:00 2001
From: littletomatodonkey <2120160898@bit.edu.cn>
Date: Fri, 30 Oct 2020 00:20:48 +0800
Subject: [PATCH] polish api to Paddle2.0-rc (#346)

polish codes and docs to adapt Paddle2.0-rc
---
 README.md                                     |   2 +-
 README_cn.md                                  |   2 +-
 configs/RegNet/RegNetX_4GF.yaml               |  75 ++++
 configs/ResNeSt/ResNeSt50.yaml                |  78 ++++
 configs/ResNeSt/ResNeSt50_fast_1s1x64d.yaml   |  78 ++++
 .../ResNeXt101_wsl/ResNeXt101_32x8d_wsl.yaml  |  36 ++
 docs/en/models/ResNeSt_RegNet_en.md           |   2 +-
 docs/en/tutorials/getting_started_en.md       |  14 +-
 docs/zh_CN/models/ResNeSt_RegNet.md           |   2 +-
 docs/zh_CN/tutorials/getting_started.md       |  13 +-
 ppcls/modeling/architectures/__init__.py      |   2 +-
 ppcls/modeling/architectures/alexnet.py       |  12 +-
 ppcls/modeling/architectures/darknet.py       |  10 +-
 ppcls/modeling/architectures/densenet.py      |  14 +-
 ppcls/modeling/architectures/dpn.py           |  14 +-
 ppcls/modeling/architectures/efficientnet.py  |  12 +-
 ppcls/modeling/architectures/ghostnet.py      |  24 +-
 ppcls/modeling/architectures/googlenet.py     |  18 +-
 ppcls/modeling/architectures/hrnet.py         |  24 +-
 ppcls/modeling/architectures/inception_v4.py  |  20 +-
 ppcls/modeling/architectures/mobilenet_v1.py  |  14 +-
 ppcls/modeling/architectures/mobilenet_v2.py  |  10 +-
 ppcls/modeling/architectures/mobilenet_v3.py  |  35 +-
 ppcls/modeling/architectures/regnet.py        |  76 ++--
 ppcls/modeling/architectures/res2net.py       |  15 +-
 ppcls/modeling/architectures/res2net_vd.py    |  17 +-
 ppcls/modeling/architectures/resnest.py       |  54 +--
 ppcls/modeling/architectures/resnet.py        |  17 +-
 ppcls/modeling/architectures/resnet_acnet.py  | 332 ------------------
 ppcls/modeling/architectures/resnet_vc.py     |  17 +-
 ppcls/modeling/architectures/resnet_vd.py     |  21 +-
 ppcls/modeling/architectures/resnext.py       |  14 +-
 .../modeling/architectures/resnext101_wsl.py  |  14 +-
 ppcls/modeling/architectures/resnext_vd.py    |  16 +-
 ppcls/modeling/architectures/se_resnet_vd.py  |  20 +-
 ppcls/modeling/architectures/se_resnext.py    |  45 ++-
 ppcls/modeling/architectures/se_resnext_vd.py |  48 ++-
 ppcls/modeling/architectures/shufflenet_v2.py |  12 +-
 ppcls/modeling/architectures/squeezenet.py    |  18 +-
 ppcls/modeling/architectures/vgg.py           |  14 +-
 ppcls/modeling/architectures/xception.py      |  22 +-
 .../architectures/xception_deeplab.py         |  14 +-
 ppcls/modeling/loss.py                        |   5 +-
 ppcls/optimizer/learning_rate.py              |  18 +-
 ppcls/optimizer/optimizer.py                  |   2 +-
 ppcls/utils/check.py                          |   3 +-
 ppcls/utils/save_load.py                      |  11 +-
 tools/benchmark/benchmark_acc.py              |  21 +-
 tools/benchmark/benchmark_list.txt            |   2 +-
 tools/eval.py                                 |   8 +-
 tools/export_model.py                         |   4 +-
 tools/infer/infer.py                          |  15 +-
 tools/program.py                              |   4 +-
 tools/train.py                                |   9 +-
 54 files changed, 687 insertions(+), 712 deletions(-)
 create mode 100644 configs/RegNet/RegNetX_4GF.yaml
 create mode 100644 configs/ResNeSt/ResNeSt50.yaml
 create mode 100644 configs/ResNeSt/ResNeSt50_fast_1s1x64d.yaml
 create mode 100644 configs/ResNeXt101_wsl/ResNeXt101_32x8d_wsl.yaml
 delete mode 100644 ppcls/modeling/architectures/resnet_acnet.py

diff --git a/README.md b/README.md
index 355f15c99..d15599fcf 100644
--- a/README.md
+++ b/README.md
@@ -292,7 +292,7 @@ Accuracy and inference time metrics of ResNeSt and RegNet series models are show
 | Model                    | Top-1 Acc | Top-5 Acc | time(ms)<br>bs=1 | time(ms)<br>bs=4 | Flops(G) | Params(M) | Download Address                                                                                                 |
 |------------------------|-----------|-----------|------------------|------------------|----------|-----------|------------------------------------------------------------------------------------------------------|
 | ResNeSt50_<br>fast_1s1x64d | 0.8035    | 0.9528    | 3.45405                | 8.72680                | 8.68     | 26.3      | [Download link](https://paddle-imagenet-models-name.bj.bcebos.com/ResNeSt50_fast_1s1x64d_pretrained.pdparams) |
-| ResNeSt50              | 0.8102    | 0.9542    | 6.69042    | 8.01664                | 10.78    | 27.5      | [Download link](https://paddle-imagenet-models-name.bj.bcebos.com/ResNeSt50_pretrained.pdparams)              |
+| ResNeSt50              | 0.8083    | 0.9542    | 6.69042    | 8.01664                | 10.78    | 27.5      | [Download link](https://paddle-imagenet-models-name.bj.bcebos.com/ResNeSt50_pretrained.pdparams)              |
 | RegNetX_4GF            | 0.785     | 0.9416    |    6.46478              |      11.19862           | 8        | 22.1      | [Download link](https://paddle-imagenet-models-name.bj.bcebos.com/RegNetX_4GF_pretrained.pdparams)            |
 
 
diff --git a/README_cn.md b/README_cn.md
index 4f981f3f7..4c5ac02cf 100644
--- a/README_cn.md
+++ b/README_cn.md
@@ -295,7 +295,7 @@ ResNeSt与RegNet系列模型的精度、速度指标如下表所示,更多关
 | 模型                     | Top-1 Acc | Top-5 Acc | time(ms)<br>bs=1 | time(ms)<br>bs=4 | Flops(G) | Params(M) | 下载地址                                                                                                 |
 |------------------------|-----------|-----------|------------------|------------------|----------|-----------|------------------------------------------------------------------------------------------------------|
 | ResNeSt50_<br>fast_1s1x64d | 0.8035    | 0.9528    | 3.45405                | 8.72680                | 8.68     | 26.3      | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/ResNeSt50_fast_1s1x64d_pretrained.pdparams) |
-| ResNeSt50              | 0.8102    | 0.9542    | 6.69042    | 8.01664                | 10.78    | 27.5      | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/ResNeSt50_pretrained.pdparams)              |
+| ResNeSt50              | 0.8083    | 0.9542    | 6.69042    | 8.01664                | 10.78    | 27.5      | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/ResNeSt50_pretrained.pdparams)              |
 | RegNetX_4GF            | 0.785     | 0.9416    |    6.46478              |      11.19862           | 8        | 22.1      | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/RegNetX_4GF_pretrained.pdparams)            |
 
 
diff --git a/configs/RegNet/RegNetX_4GF.yaml b/configs/RegNet/RegNetX_4GF.yaml
new file mode 100644
index 000000000..21001b534
--- /dev/null
+++ b/configs/RegNet/RegNetX_4GF.yaml
@@ -0,0 +1,75 @@
+mode: 'train'
+ARCHITECTURE:
+    name: 'RegNetX_4GF'
+
+pretrained_model: ""
+model_save_dir: "./output/"
+classes_num: 1000
+total_images: 1281167
+save_interval: 1
+validate: True
+valid_interval: 1
+epochs: 100
+topk: 5
+image_shape: [3, 224, 224]
+
+use_mix: False
+ls_epsilon: -1
+
+LEARNING_RATE:
+    function: 'CosineWarmup'
+    params:
+        lr: 0.4
+        warmup_epoch: 5
+
+OPTIMIZER:
+    function: 'Momentum'
+    params:
+        momentum: 0.9
+    regularizer:
+        function: 'L2'
+        factor: 0.000050
+
+TRAIN:
+    batch_size: 512
+    num_workers: 4
+    file_list: "./dataset/ILSVRC2012/train_list.txt"
+    data_dir: "./dataset/ILSVRC2012/"
+    shuffle_seed: 0
+    transforms:
+        - DecodeImage:
+            to_rgb: True
+            to_np: False
+            channel_first: False
+        - RandCropImage:
+            size: 224
+        - RandFlipImage:
+            flip_code: 1
+        - NormalizeImage:
+            scale: 1./255.
+            mean: [0.485, 0.456, 0.406]
+            std: [0.229, 0.224, 0.225]
+            order: ''
+        - ToCHWImage:
+
+VALID:
+    batch_size: 256
+    num_workers: 4
+    file_list: "./dataset/ILSVRC2012/val_list.txt"
+    data_dir: "./dataset/ILSVRC2012/"
+    shuffle_seed: 0
+    transforms:
+        - DecodeImage:
+            to_rgb: True
+            to_np: False
+            channel_first: False
+        - ResizeImage:
+            resize_short: 256
+        - CropImage:
+            size: 224
+        - NormalizeImage:
+            scale: 1.0/255.0
+            mean: [0.485, 0.456, 0.406]
+            std: [0.229, 0.224, 0.225]
+            order: ''
+        - ToCHWImage:
diff --git a/configs/ResNeSt/ResNeSt50.yaml b/configs/ResNeSt/ResNeSt50.yaml
new file mode 100644
index 000000000..01e056da0
--- /dev/null
+++ b/configs/ResNeSt/ResNeSt50.yaml
@@ -0,0 +1,78 @@
+mode: 'train'
+ARCHITECTURE:
+    name: 'ResNeSt50'
+
+pretrained_model: ""
+model_save_dir: "./output/"
+classes_num: 1000
+total_images: 1281167
+save_interval: 1
+validate: True
+valid_interval: 1
+epochs: 300
+topk: 5
+image_shape: [3, 224, 224]
+
+use_mix: True
+ls_epsilon: 0.1
+
+LEARNING_RATE:
+    function: 'CosineWarmup'          
+    params:                   
+        lr: 0.1               
+
+OPTIMIZER:
+    function: 'Momentum'
+    params:
+        momentum: 0.9
+    regularizer:
+        function: 'L2'
+        factor: 0.000070
+
+TRAIN:
+    batch_size: 256
+    num_workers: 4
+    file_list: "./dataset/ILSVRC2012/train_list.txt"
+    data_dir: "./dataset/ILSVRC2012/"
+    shuffle_seed: 0
+    transforms:
+        - DecodeImage:
+            to_rgb: True
+            to_np: False
+            channel_first: False
+        - RandCropImage:
+            size: 224
+        - RandFlipImage:
+            flip_code: 1
+        - AutoAugment:
+        - NormalizeImage:
+            scale: 1./255.
+            mean: [0.485, 0.456, 0.406]
+            std: [0.229, 0.224, 0.225]
+            order: ''
+        - ToCHWImage:
+    mix:                       
+        - CutmixOperator:    
+            alpha: 0.2      
+
+VALID:
+    batch_size: 64
+    num_workers: 4
+    file_list: "./dataset/ILSVRC2012/val_list.txt"
+    data_dir: "./dataset/ILSVRC2012/"
+    shuffle_seed: 0
+    transforms:
+        - DecodeImage:
+            to_rgb: True
+            to_np: False
+            channel_first: False
+        - ResizeImage:
+            resize_short: 256
+        - CropImage:
+            size: 224
+        - NormalizeImage:
+            scale: 1.0/255.0
+            mean: [0.485, 0.456, 0.406]
+            std: [0.229, 0.224, 0.225]
+            order: ''
+        - ToCHWImage:
diff --git a/configs/ResNeSt/ResNeSt50_fast_1s1x64d.yaml b/configs/ResNeSt/ResNeSt50_fast_1s1x64d.yaml
new file mode 100644
index 000000000..99cb1137e
--- /dev/null
+++ b/configs/ResNeSt/ResNeSt50_fast_1s1x64d.yaml
@@ -0,0 +1,78 @@
+mode: 'train'
+ARCHITECTURE:
+    name: 'ResNeSt50_fast_1s1x64d'
+
+pretrained_model: ""
+model_save_dir: "./output/"
+classes_num: 1000
+total_images: 1281167
+save_interval: 1
+validate: True
+valid_interval: 1
+epochs: 300
+topk: 5
+image_shape: [3, 224, 224]
+
+use_mix: True
+ls_epsilon: 0.1
+
+LEARNING_RATE:
+    function: 'CosineWarmup'          
+    params:                   
+        lr: 0.1               
+
+OPTIMIZER:
+    function: 'Momentum'
+    params:
+        momentum: 0.9
+    regularizer:
+        function: 'L2'
+        factor: 0.000070
+
+TRAIN:
+    batch_size: 256
+    num_workers: 4
+    file_list: "./dataset/ILSVRC2012/train_list.txt"
+    data_dir: "./dataset/ILSVRC2012/"
+    shuffle_seed: 0
+    transforms:
+        - DecodeImage:
+            to_rgb: True
+            to_np: False
+            channel_first: False
+        - RandCropImage:
+            size: 224
+        - RandFlipImage:
+            flip_code: 1
+        - AutoAugment:
+        - NormalizeImage:
+            scale: 1./255.
+            mean: [0.485, 0.456, 0.406]
+            std: [0.229, 0.224, 0.225]
+            order: ''
+        - ToCHWImage:
+    mix:                       
+        - CutmixOperator:    
+            alpha: 0.2      
+
+VALID:
+    batch_size: 64
+    num_workers: 4
+    file_list: "./dataset/ILSVRC2012/val_list.txt"
+    data_dir: "./dataset/ILSVRC2012/"
+    shuffle_seed: 0
+    transforms:
+        - DecodeImage:
+            to_rgb: True
+            to_np: False
+            channel_first: False
+        - ResizeImage:
+            resize_short: 256
+        - CropImage:
+            size: 224
+        - NormalizeImage:
+            scale: 1.0/255.0
+            mean: [0.485, 0.456, 0.406]
+            std: [0.229, 0.224, 0.225]
+            order: ''
+        - ToCHWImage:
diff --git a/configs/ResNeXt101_wsl/ResNeXt101_32x8d_wsl.yaml b/configs/ResNeXt101_wsl/ResNeXt101_32x8d_wsl.yaml
new file mode 100644
index 000000000..dd35f19b9
--- /dev/null
+++ b/configs/ResNeXt101_wsl/ResNeXt101_32x8d_wsl.yaml
@@ -0,0 +1,36 @@
+mode: 'valid'
+ARCHITECTURE:
+    name: 'ResNeXt101_32x8d_wsl'
+
+pretrained_model: ""
+model_save_dir: "./output/"
+classes_num: 1000
+total_images: 1281167
+save_interval: 1
+validate: True
+valid_interval: 1
+epochs: 120
+topk: 5
+image_shape: [3, 224, 224]
+
+VALID:
+    batch_size: 64
+    num_workers: 4
+    file_list: "./dataset/ILSVRC2012/val_list.txt"
+    data_dir: "./dataset/ILSVRC2012/"
+    shuffle_seed: 0
+    transforms:
+        - DecodeImage:
+            to_rgb: True
+            to_np: False
+            channel_first: False
+        - ResizeImage:
+            resize_short: 224
+        - CropImage:
+            size: 224
+        - NormalizeImage:
+            scale: 1.0/255.0
+            mean: [0.485, 0.456, 0.406]
+            std: [0.229, 0.224, 0.225]
+            order: ''
+        - ToCHWImage:
diff --git a/docs/en/models/ResNeSt_RegNet_en.md b/docs/en/models/ResNeSt_RegNet_en.md
index 959597a82..a2203ad98 100644
--- a/docs/en/models/ResNeSt_RegNet_en.md
+++ b/docs/en/models/ResNeSt_RegNet_en.md
@@ -9,7 +9,7 @@ RegNet was proposed in 2020 by Facebook to deepen the concept of design space. B
 | Models           | Top1 | Top5 | Reference<br>top1 | Reference<br>top5 | FLOPS<br>(G) | Parameters<br>(M) |
 |:--:|:--:|:--:|:--:|:--:|:--:|:--:|
 | ResNeSt50_fast_1s1x64d        | 0.8035 | 0.9528|  0.8035 |            -| 8.68     | 26.3   |
-| ResNeSt50        | 0.8102 | 0.9542|  0.8113 |            -| 10.78     | 27.5   |
+| ResNeSt50        | 0.8083 | 0.9542|  0.8113 |            -| 10.78     | 27.5   |
 | RegNetX_4GF        | 0.7850 | 0.9416|  0.7860 |            -| 8.0     | 22.1   |
 
 
diff --git a/docs/en/tutorials/getting_started_en.md b/docs/en/tutorials/getting_started_en.md
index 00341cb71..7731707d8 100644
--- a/docs/en/tutorials/getting_started_en.md
+++ b/docs/en/tutorials/getting_started_en.md
@@ -221,12 +221,14 @@ Firstly, you should export inference model using `tools/export_model.py`.
 python tools/export_model.py \
     --model=MobileNetV3_large_x1_0 \
     --pretrained_model=./output/MobileNetV3_large_x1_0/best_model/ppcls \
-    --output_path=./exported_model
+    --output_path=./inference/cls_infer
 
 ```
-Among them, the `--model` parameter is used to specify the model name, `--pretrained_model` parameter is used to specify the model file path, the path does not need to include the model file suffix name, and `--output_path` is used to specify the storage path of the converted model .
+Among them, the `--model` parameter is used to specify the model name, `--pretrained_model` parameter is used to specify the model file path, the path does not need to include the model file suffix name, and `--output_path` is used to specify the storage path of the converted model.
 
-**Note**: In the file `export_model.py:line53`, the `shape` parameter is the shape of the model input image, the default is `224*224`. Please modify it according to the actual situation, as shown below:
+**Note**:
+1. File prefix must be assigned in `--output_path`. If `--output_path=./inference/cls_infer`, then three files will be generated in the folder `inference`, they are `cls_infer.pdiparams`, `cls_infer.pdmodel` and `cls_infer.pdiparams.info`.
+2. In the file `export_model.py:line53`, the `shape` parameter is the shape of the model input image, the default is `224*224`. Please modify it according to the actual situation, as shown below:
 
 ```python
 50 # Please modify the 'shape' according to actual needs
@@ -236,7 +238,7 @@ Among them, the `--model` parameter is used to specify the model name, `--pretra
 54 ])
 ```
 
-The above command will generate the model structure file (`__model__`) and the model weight file (`__variables__`), and then the inference engine can be used for inference:
+The above command will generate the model structure file (`cls_infer.pdmodel`) and the model weight file (`cls_infer.pdiparams`), and then the inference engine can be used for inference:
 
 ```bash
 python tools/infer/predict.py \
@@ -248,8 +250,8 @@ python tools/infer/predict.py \
 ```
 Among them:
 + `image_file`(i): The path of the image file to be predicted, such as `./test.jpeg`;
-+ `model_file`(m): Model file path, such as `./MobileNetV3_large_x1_0/__model__`;
-+ `params_file`(p): Weight file path, such as `./MobileNetV3_large_x1_0/__variables__`;
++ `model_file`(m): Model file path, such as `./MobileNetV3_large_x1_0/cls_infer.pdmodel`;
++ `params_file`(p): Weight file path, such as `./MobileNetV3_large_x1_0/cls_infer.pdiparams`;
 + `use_tensorrt`: Whether to use the TesorRT, default by `True`;
 + `use_gpu`: Whether to use the GPU, default by `True`.
 
diff --git a/docs/zh_CN/models/ResNeSt_RegNet.md b/docs/zh_CN/models/ResNeSt_RegNet.md
index a995347b0..3e7453549 100644
--- a/docs/zh_CN/models/ResNeSt_RegNet.md
+++ b/docs/zh_CN/models/ResNeSt_RegNet.md
@@ -12,7 +12,7 @@ RegNet是由facebook于2020年提出,旨在深化设计空间理念的概念
 | Models           | Top1 | Top5 | Reference<br>top1 | Reference<br>top5 | FLOPS<br>(G) | Parameters<br>(M) |
 |:--:|:--:|:--:|:--:|:--:|:--:|:--:|
 | ResNeSt50_fast_1s1x64d        | 0.8035 | 0.9528|  0.8035 |            -| 8.68     | 26.3   |
-| ResNeSt50        | 0.8102 | 0.9542|  0.8113 |            -| 10.78     | 27.5   |
+| ResNeSt50        | 0.8083 | 0.9542|  0.8113 |            -| 10.78     | 27.5   |
 | RegNetX_4GF        | 0.7850 | 0.9416|  0.7860 |            -| 8.0     | 22.1   |
 
 
diff --git a/docs/zh_CN/tutorials/getting_started.md b/docs/zh_CN/tutorials/getting_started.md
index 13bb0eccb..1991bccf3 100644
--- a/docs/zh_CN/tutorials/getting_started.md
+++ b/docs/zh_CN/tutorials/getting_started.md
@@ -235,12 +235,14 @@ python tools/infer/infer.py \
 python tools/export_model.py \
     --model=MobileNetV3_large_x1_0 \
     --pretrained_model=./output/MobileNetV3_large_x1_0/best_model/ppcls \
-    --output_path=./exported_model
+    --output_path=./inference/cls_infer
 ```
 
 其中,参数`--model`用于指定模型名称,`--pretrained_model`用于指定模型文件路径,该路径仍无需包含模型文件后缀名(如[1.3 模型恢复训练](#1.3)),`--output_path`用于指定转换后模型的存储路径。
 
-**注意**:文件`export_model.py:line53`中,`shape`参数为模型输入图像的`shape`,默认为`224*224`,请根据实际情况修改,如下所示:
+**注意**:
+1. `--output_path`中必须指定文件名的前缀,若`--output_path=./inference/cls_infer`,则会在`inference`文件夹下生成`cls_infer.pdiparams`、`cls_infer.pdmodel`和`cls_infer.pdiparams.info`文件。
+2. 文件`export_model.py:line53`中,`shape`参数为模型输入图像的`shape`,默认为`224*224`,请根据实际情况修改,如下所示:
 ```python
 50 # Please modify the 'shape' according to actual needs
 51 @to_static(input_spec=[
@@ -248,8 +250,9 @@ python tools/export_model.py \
 53         shape=[None, 3, 224, 224], dtype='float32')
 54 ])
 ```
+2.
 
-上述命令将生成模型结构文件(`__model__`)和模型权重文件(`__variables__`),然后可以使用预测引擎进行推理:
+上述命令将生成模型结构文件(`cls_infer.pdmodel`)和模型权重文件(`cls_infer.pdiparams`),然后可以使用预测引擎进行推理:
 
 ```bash
 python tools/infer/predict.py \
@@ -261,8 +264,8 @@ python tools/infer/predict.py \
 ```
 其中:
 + `image_file`(简写 i):待预测的图片文件路径,如 `./test.jpeg`
-+ `model_file`(简写 m):模型文件路径,如 `./MobileNetV3_large_x1_0/__model__`
-+ `params_file`(简写 p):权重文件路径,如 `./MobileNetV3_large_x1_0/__variables__`
++ `model_file`(简写 m):模型文件路径,如 `./MobileNetV3_large_x1_0/cls_infer.pdmodel`
++ `params_file`(简写 p):权重文件路径,如 `./MobileNetV3_large_x1_0/cls_infer.pdiparams`
 + `use_tensorrt`:是否使用 TesorRT 预测引擎,默认值:`True`
 + `use_gpu`:是否使用 GPU 预测,默认值:`True`。
 
diff --git a/ppcls/modeling/architectures/__init__.py b/ppcls/modeling/architectures/__init__.py
index 6fcc50e87..afd18de19 100644
--- a/ppcls/modeling/architectures/__init__.py
+++ b/ppcls/modeling/architectures/__init__.py
@@ -22,7 +22,7 @@ from .res2net_vd import Res2Net50_vd_48w_2s, Res2Net50_vd_26w_4s, Res2Net50_vd_1
 from .se_resnet_vd import SE_ResNet18_vd, SE_ResNet34_vd, SE_ResNet50_vd, SE_ResNet101_vd, SE_ResNet152_vd, SE_ResNet200_vd
 from .se_resnext_vd import SE_ResNeXt50_vd_32x4d, SE_ResNeXt50_vd_32x4d, SENet154_vd
 from .se_resnext import SE_ResNeXt50_32x4d, SE_ResNeXt101_32x4d, SE_ResNeXt152_64x4d
-from .dpn import DPN68
+from .dpn import DPN68, DPN92, DPN98, DPN107, DPN131
 from .densenet import DenseNet121
 from .hrnet import HRNet_W18_C, HRNet_W30_C, HRNet_W32_C, HRNet_W40_C, HRNet_W44_C, HRNet_W48_C, HRNet_W60_C, HRNet_W64_C, SE_HRNet_W18_C, SE_HRNet_W30_C, SE_HRNet_W32_C, SE_HRNet_W40_C, SE_HRNet_W44_C, SE_HRNet_W48_C, SE_HRNet_W60_C, SE_HRNet_W64_C
 from .efficientnet import EfficientNetB0, EfficientNetB1, EfficientNetB2, EfficientNetB3, EfficientNetB4, EfficientNetB5, EfficientNetB6, EfficientNetB7
diff --git a/ppcls/modeling/architectures/alexnet.py b/ppcls/modeling/architectures/alexnet.py
index 337a71137..a9155ca4a 100644
--- a/ppcls/modeling/architectures/alexnet.py
+++ b/ppcls/modeling/architectures/alexnet.py
@@ -2,8 +2,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout, ReLU
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout, ReLU
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 import math
 
@@ -25,7 +25,7 @@ class ConvPoolLayer(nn.Layer):
 
         self.relu = ReLU() if act == "relu" else None
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=input_channels,
             out_channels=output_channels,
             kernel_size=filter_size,
@@ -36,7 +36,7 @@ class ConvPoolLayer(nn.Layer):
                 name=name + "_weights", initializer=Uniform(-stdv, stdv)),
             bias_attr=ParamAttr(
                 name=name + "_offset", initializer=Uniform(-stdv, stdv)))
-        self._pool = MaxPool2d(kernel_size=3, stride=2, padding=0)
+        self._pool = MaxPool2D(kernel_size=3, stride=2, padding=0)
 
     def forward(self, inputs):
         x = self._conv(inputs)
@@ -57,7 +57,7 @@ class AlexNetDY(nn.Layer):
         self._conv2 = ConvPoolLayer(
             64, 192, 5, 1, 2, stdv, act="relu", name="conv2")
         stdv = 1.0 / math.sqrt(192 * 3 * 3)
-        self._conv3 = Conv2d(
+        self._conv3 = Conv2D(
             192,
             384,
             3,
@@ -68,7 +68,7 @@ class AlexNetDY(nn.Layer):
             bias_attr=ParamAttr(
                 name="conv3_offset", initializer=Uniform(-stdv, stdv)))
         stdv = 1.0 / math.sqrt(384 * 3 * 3)
-        self._conv4 = Conv2d(
+        self._conv4 = Conv2D(
             384,
             256,
             3,
diff --git a/ppcls/modeling/architectures/darknet.py b/ppcls/modeling/architectures/darknet.py
index e75e407e2..5aef16d7c 100644
--- a/ppcls/modeling/architectures/darknet.py
+++ b/ppcls/modeling/architectures/darknet.py
@@ -2,8 +2,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 import math
 
@@ -20,7 +20,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=input_channels,
             out_channels=output_channels,
             kernel_size=filter_size,
@@ -56,7 +56,7 @@ class BasicBlock(nn.Layer):
     def forward(self, inputs):
         x = self._conv1(inputs)
         x = self._conv2(x)
-        return paddle.elementwise_add(x=inputs, y=x)
+        return paddle.add(x=inputs, y=x)
 
 
 class DarkNet(nn.Layer):
@@ -104,7 +104,7 @@ class DarkNet(nn.Layer):
         self._basic_block_43 = BasicBlock(1024, 512, name="stage.4.2")
         self._basic_block_44 = BasicBlock(1024, 512, name="stage.4.3")
 
-        self._pool = AdaptiveAvgPool2d(1)
+        self._pool = AdaptiveAvgPool2D(1)
 
         stdv = 1.0 / math.sqrt(1024.0)
         self._out = Linear(
diff --git a/ppcls/modeling/architectures/densenet.py b/ppcls/modeling/architectures/densenet.py
index 7179073c5..cc7391554 100644
--- a/ppcls/modeling/architectures/densenet.py
+++ b/ppcls/modeling/architectures/densenet.py
@@ -20,8 +20,8 @@ import numpy as np
 import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -51,7 +51,7 @@ class BNACConvLayer(nn.Layer):
             moving_mean_name=name + '_bn_mean',
             moving_variance_name=name + '_bn_variance')
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -145,7 +145,7 @@ class TransitionLayer(nn.Layer):
             stride=1,
             name=name)
 
-        self.pool2d_avg = AvgPool2d(kernel_size=2, stride=2, padding=0)
+        self.pool2d_avg = AvgPool2D(kernel_size=2, stride=2, padding=0)
 
     def forward(self, input):
         y = self.conv_ac_func(input)
@@ -165,7 +165,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -214,7 +214,7 @@ class DenseNet(nn.Layer):
             act='relu',
             name="conv1")
 
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_config = block_config
 
@@ -256,7 +256,7 @@ class DenseNet(nn.Layer):
             moving_mean_name='conv5_blk_bn_mean',
             moving_variance_name='conv5_blk_bn_variance')
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         stdv = 1.0 / math.sqrt(num_features * 1.0)
 
diff --git a/ppcls/modeling/architectures/dpn.py b/ppcls/modeling/architectures/dpn.py
index af23789d3..cff0caffc 100644
--- a/ppcls/modeling/architectures/dpn.py
+++ b/ppcls/modeling/architectures/dpn.py
@@ -21,8 +21,8 @@ import sys
 import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
-from paddle.nn import Conv2d, BatchNorm, Linear
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -49,7 +49,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -93,7 +93,7 @@ class BNACConvLayer(nn.Layer):
             moving_mean_name=name + '_bn_mean',
             moving_variance_name=name + '_bn_variance')
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -202,7 +202,7 @@ class DualPathFactory(nn.Layer):
             c1x1_c, num_or_sections=[self.num_1x1_c, self.inc], axis=1)
 
         # OUTPUTS
-        summ = paddle.elementwise_add(x=data_o1, y=c1x1_c1)
+        summ = paddle.add(x=data_o1, y=c1x1_c1)
         dense = paddle.concat([data_o2, c1x1_c2], axis=1)
         # tensor, channels
         return [summ, dense]
@@ -236,7 +236,7 @@ class DPN(nn.Layer):
             act='relu',
             name="conv1")
 
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         num_channel_dpn = init_num_filter
 
@@ -301,7 +301,7 @@ class DPN(nn.Layer):
             moving_mean_name='final_concat_bn_mean',
             moving_variance_name='final_concat_bn_variance')
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         stdv = 0.01
 
diff --git a/ppcls/modeling/architectures/efficientnet.py b/ppcls/modeling/architectures/efficientnet.py
index 8b3c63df7..b0a299113 100644
--- a/ppcls/modeling/architectures/efficientnet.py
+++ b/ppcls/modeling/architectures/efficientnet.py
@@ -2,8 +2,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 import math
 import collections
 import re
@@ -300,7 +300,7 @@ class Conv2ds(nn.Layer):
             padding = padding_type
 
         groups = 1 if groups is None else groups
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             input_channels,
             output_channels,
             filter_size,
@@ -484,7 +484,7 @@ class SEBlock(nn.Layer):
                  cur_stage=None):
         super(SEBlock, self).__init__()
 
-        self._pool = AdaptiveAvgPool2d(1)
+        self._pool = AdaptiveAvgPool2D(1)
         self._conv1 = Conv2ds(
             input_channels,
             num_squeezed_channels,
@@ -582,7 +582,7 @@ class MbConvBlock(nn.Layer):
                 self.block_args.input_filters == self.block_args.output_filters:
             if self.drop_connect_rate:
                 x = _drop_connect(x, self.drop_connect_rate, not self.training)
-            x = paddle.elementwise_add(x, inputs)
+            x = paddle.add(x, inputs)
         return x
 
 
@@ -755,7 +755,7 @@ class EfficientNet(nn.Layer):
             bn_name="_bn1",
             model_name=self.name,
             cur_stage=7)
-        self._pool = AdaptiveAvgPool2d(1)
+        self._pool = AdaptiveAvgPool2D(1)
 
         if self._global_params.dropout_rate:
             self._drop = Dropout(
diff --git a/ppcls/modeling/architectures/ghostnet.py b/ppcls/modeling/architectures/ghostnet.py
index b37f2230f..090f0c445 100644
--- a/ppcls/modeling/architectures/ghostnet.py
+++ b/ppcls/modeling/architectures/ghostnet.py
@@ -17,9 +17,9 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, AdaptiveAvgPool2d, Linear
-from paddle.fluid.regularizer import L2DecayRegularizer
-from paddle.nn.initializer import Uniform
+from paddle.nn import Conv2D, BatchNorm, AdaptiveAvgPool2D, Linear
+from paddle.regularizer import L2Decay
+from paddle.nn.initializer import Uniform, KaimingNormal
 
 
 class ConvBNLayer(nn.Layer):
@@ -32,7 +32,7 @@ class ConvBNLayer(nn.Layer):
                  act="relu",
                  name=None):
         super(ConvBNLayer, self).__init__()
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=in_channels,
             out_channels=out_channels,
             kernel_size=kernel_size,
@@ -40,7 +40,7 @@ class ConvBNLayer(nn.Layer):
             padding=(kernel_size - 1) // 2,
             groups=groups,
             weight_attr=ParamAttr(
-                initializer=nn.initializer.MSRA(), name=name + "_weights"),
+                initializer=KaimingNormal(), name=name + "_weights"),
             bias_attr=False)
         bn_name = name + "_bn"
 
@@ -49,11 +49,9 @@ class ConvBNLayer(nn.Layer):
             num_channels=out_channels,
             act=act,
             param_attr=ParamAttr(
-                name=bn_name + "_scale",
-                regularizer=L2DecayRegularizer(regularization_coeff=0.0)),
+                name=bn_name + "_scale", regularizer=L2Decay(0.0)),
             bias_attr=ParamAttr(
-                name=bn_name + "_offset",
-                regularizer=L2DecayRegularizer(regularization_coeff=0.0)),
+                name=bn_name + "_offset", regularizer=L2Decay(0.0)),
             moving_mean_name=bn_name + "_mean",
             moving_variance_name=name +
             "_variance"  # wrong due to an old typo, will be fixed later.
@@ -68,7 +66,7 @@ class ConvBNLayer(nn.Layer):
 class SEBlock(nn.Layer):
     def __init__(self, num_channels, reduction_ratio=4, name=None):
         super(SEBlock, self).__init__()
-        self.pool2d_gap = AdaptiveAvgPool2d(1)
+        self.pool2d_gap = AdaptiveAvgPool2D(1)
         self._num_channels = num_channels
         stdv = 1.0 / math.sqrt(num_channels * 1.0)
         med_ch = num_channels // reduction_ratio
@@ -92,7 +90,7 @@ class SEBlock(nn.Layer):
         squeeze = self.squeeze(pool)
         squeeze = F.relu(squeeze)
         excitation = self.excitation(squeeze)
-        excitation = paddle.fluid.layers.clip(x=excitation, min=0, max=1)
+        excitation = paddle.clip(x=excitation, min=0, max=1)
         excitation = paddle.reshape(
             excitation, shape=[-1, self._num_channels, 1, 1])
         out = inputs * excitation
@@ -208,7 +206,7 @@ class GhostBottleneck(nn.Layer):
         else:
             shortcut = self.shortcut_depthwise(inputs)
             shortcut = self.shortcut_conv(shortcut)
-        return paddle.elementwise_add(x=x, y=shortcut, axis=-1)
+        return paddle.add(x=x, y=shortcut)
 
 
 class GhostNet(nn.Layer):
@@ -273,7 +271,7 @@ class GhostNet(nn.Layer):
             groups=1,
             act="relu",
             name="conv_last")
-        self.pool2d_gap = AdaptiveAvgPool2d(1)
+        self.pool2d_gap = AdaptiveAvgPool2D(1)
         in_channels = output_channels
         self._fc0_output_channels = 1280
         self.fc_0 = ConvBNLayer(
diff --git a/ppcls/modeling/architectures/googlenet.py b/ppcls/modeling/architectures/googlenet.py
index 2e990a7f0..e23f6cd52 100644
--- a/ppcls/modeling/architectures/googlenet.py
+++ b/ppcls/modeling/architectures/googlenet.py
@@ -2,8 +2,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -29,7 +29,7 @@ class ConvLayer(nn.Layer):
                  name=None):
         super(ConvLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -73,7 +73,7 @@ class Inception(nn.Layer):
             name="inception_" + name + "_5x5_reduce")
         self._conv5 = ConvLayer(
             filter5R, filter5, 5, name="inception_" + name + "_5x5")
-        self._pool = MaxPool2d(kernel_size=3, stride=1, padding=1)
+        self._pool = MaxPool2D(kernel_size=3, stride=1, padding=1)
 
         self._convprj = ConvLayer(
             input_channels, proj, 1, name="inception_" + name + "_3x3_proj")
@@ -99,7 +99,7 @@ class GoogleNetDY(nn.Layer):
     def __init__(self, class_dim=1000):
         super(GoogleNetDY, self).__init__()
         self._conv = ConvLayer(3, 64, 7, 2, name="conv1")
-        self._pool = MaxPool2d(kernel_size=3, stride=2)
+        self._pool = MaxPool2D(kernel_size=3, stride=2)
         self._conv_1 = ConvLayer(64, 64, 1, name="conv2_1x1")
         self._conv_2 = ConvLayer(64, 192, 3, name="conv2_3x3")
 
@@ -124,7 +124,7 @@ class GoogleNetDY(nn.Layer):
         self._ince5b = Inception(
             832, 832, 384, 192, 384, 48, 128, 128, name="ince5b")
 
-        self._pool_5 = AvgPool2d(kernel_size=7, stride=7)
+        self._pool_5 = AvgPool2D(kernel_size=7, stride=7)
 
         self._drop = Dropout(p=0.4, mode="downscale_in_infer")
         self._fc_out = Linear(
@@ -132,7 +132,7 @@ class GoogleNetDY(nn.Layer):
             class_dim,
             weight_attr=xavier(1024, 1, "out"),
             bias_attr=ParamAttr(name="out_offset"))
-        self._pool_o1 = AvgPool2d(kernel_size=5, stride=3)
+        self._pool_o1 = AvgPool2D(kernel_size=5, stride=3)
         self._conv_o1 = ConvLayer(512, 128, 1, name="conv_o1")
         self._fc_o1 = Linear(
             1152,
@@ -145,7 +145,7 @@ class GoogleNetDY(nn.Layer):
             class_dim,
             weight_attr=xavier(1024, 1, "out1"),
             bias_attr=ParamAttr(name="out1_offset"))
-        self._pool_o2 = AvgPool2d(kernel_size=5, stride=3)
+        self._pool_o2 = AvgPool2D(kernel_size=5, stride=3)
         self._conv_o2 = ConvLayer(528, 128, 1, name="conv_o2")
         self._fc_o2 = Linear(
             1152,
@@ -184,7 +184,6 @@ class GoogleNetDY(nn.Layer):
         x = self._drop(x)
         x = paddle.squeeze(x, axis=[2, 3])
         out = self._fc_out(x)
-        out = F.softmax(out)
 
         x = self._pool_o1(ince4a)
         x = self._conv_o1(x)
@@ -193,7 +192,6 @@ class GoogleNetDY(nn.Layer):
         x = F.relu(x)
         x = self._drop_o1(x)
         out1 = self._out1(x)
-        out1 = F.softmax(out1)
 
         x = self._pool_o2(ince4d)
         x = self._conv_o2(x)
diff --git a/ppcls/modeling/architectures/hrnet.py b/ppcls/modeling/architectures/hrnet.py
index 1bd976572..697441f91 100644
--- a/ppcls/modeling/architectures/hrnet.py
+++ b/ppcls/modeling/architectures/hrnet.py
@@ -21,8 +21,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -58,7 +58,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -245,7 +245,8 @@ class BottleneckBlock(nn.Layer):
         if self.has_se:
             conv3 = self.se(conv3)
 
-        y = paddle.elementwise_add(x=conv3, y=residual, act="relu")
+        y = paddle.add(x=conv3, y=residual)
+        y = F.relu(y)
         return y
 
 
@@ -303,7 +304,8 @@ class BasicBlock(nn.Layer):
         if self.has_se:
             conv2 = self.se(conv2)
 
-        y = paddle.elementwise_add(x=conv2, y=residual, act="relu")
+        y = paddle.add(x=conv2, y=residual)
+        y = F.relu(y)
         return y
 
 
@@ -311,7 +313,7 @@ class SELayer(nn.Layer):
     def __init__(self, num_channels, num_filters, reduction_ratio, name=None):
         super(SELayer, self).__init__()
 
-        self.pool2d_gap = AdaptiveAvgPool2d(1)
+        self.pool2d_gap = AdaptiveAvgPool2D(1)
 
         self._num_channels = num_channels
 
@@ -482,17 +484,15 @@ class FuseLayers(nn.Layer):
                     y = self.residual_func_list[residual_func_idx](input[j])
                     residual_func_idx += 1
 
-                    y = F.resize_nearest(input=y, scale=2**(j - i))
-                    residual = paddle.elementwise_add(
-                        x=residual, y=y, act=None)
+                    y = F.upsample(y, scale_factor=2**(j - i), mode="nearest")
+                    residual = paddle.add(x=residual, y=y)
                 elif j < i:
                     y = input[j]
                     for k in range(i - j):
                         y = self.residual_func_list[residual_func_idx](y)
                         residual_func_idx += 1
 
-                    residual = paddle.elementwise_add(
-                        x=residual, y=y, act=None)
+                    residual = paddle.add(x=residual, y=y)
 
             residual = F.relu(residual)
             outs.append(residual)
@@ -623,7 +623,7 @@ class HRNet(nn.Layer):
             stride=1,
             name="cls_head_last_conv")
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         stdv = 1.0 / math.sqrt(2048 * 1.0)
 
diff --git a/ppcls/modeling/architectures/inception_v4.py b/ppcls/modeling/architectures/inception_v4.py
index 5d23d3650..b8ba09849 100644
--- a/ppcls/modeling/architectures/inception_v4.py
+++ b/ppcls/modeling/architectures/inception_v4.py
@@ -16,8 +16,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 import math
 
@@ -36,7 +36,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -68,7 +68,7 @@ class InceptionStem(nn.Layer):
         self._conv_2 = ConvBNLayer(32, 32, 3, act="relu", name="conv2_3x3_s1")
         self._conv_3 = ConvBNLayer(
             32, 64, 3, padding=1, act="relu", name="conv3_3x3_s1")
-        self._pool = MaxPool2d(kernel_size=3, stride=2, padding=0)
+        self._pool = MaxPool2D(kernel_size=3, stride=2, padding=0)
         self._conv2 = ConvBNLayer(
             64, 96, 3, stride=2, act="relu", name="inception_stem1_3x3_s2")
         self._conv1_1 = ConvBNLayer(
@@ -123,7 +123,7 @@ class InceptionStem(nn.Layer):
 class InceptionA(nn.Layer):
     def __init__(self, name):
         super(InceptionA, self).__init__()
-        self._pool = AvgPool2d(kernel_size=3, stride=1, padding=1)
+        self._pool = AvgPool2D(kernel_size=3, stride=1, padding=1)
         self._conv1 = ConvBNLayer(
             384, 96, 1, act="relu", name="inception_a" + name + "_1x1")
         self._conv2 = ConvBNLayer(
@@ -178,7 +178,7 @@ class InceptionA(nn.Layer):
 class ReductionA(nn.Layer):
     def __init__(self):
         super(ReductionA, self).__init__()
-        self._pool = MaxPool2d(kernel_size=3, stride=2, padding=0)
+        self._pool = MaxPool2D(kernel_size=3, stride=2, padding=0)
         self._conv2 = ConvBNLayer(
             384, 384, 3, stride=2, act="relu", name="reduction_a_3x3")
         self._conv3_1 = ConvBNLayer(
@@ -201,7 +201,7 @@ class ReductionA(nn.Layer):
 class InceptionB(nn.Layer):
     def __init__(self, name=None):
         super(InceptionB, self).__init__()
-        self._pool = AvgPool2d(kernel_size=3, stride=1, padding=1)
+        self._pool = AvgPool2D(kernel_size=3, stride=1, padding=1)
         self._conv1 = ConvBNLayer(
             1024, 128, 1, act="relu", name="inception_b" + name + "_1x1")
         self._conv2 = ConvBNLayer(
@@ -278,7 +278,7 @@ class InceptionB(nn.Layer):
 class ReductionB(nn.Layer):
     def __init__(self):
         super(ReductionB, self).__init__()
-        self._pool = MaxPool2d(kernel_size=3, stride=2, padding=0)
+        self._pool = MaxPool2D(kernel_size=3, stride=2, padding=0)
         self._conv2_1 = ConvBNLayer(
             1024, 192, 1, act="relu", name="reduction_b_3x3_reduce")
         self._conv2_2 = ConvBNLayer(
@@ -319,7 +319,7 @@ class ReductionB(nn.Layer):
 class InceptionC(nn.Layer):
     def __init__(self, name=None):
         super(InceptionC, self).__init__()
-        self._pool = AvgPool2d(kernel_size=3, stride=1, padding=1)
+        self._pool = AvgPool2D(kernel_size=3, stride=1, padding=1)
         self._conv1 = ConvBNLayer(
             1536, 256, 1, act="relu", name="inception_c" + name + "_1x1")
         self._conv2 = ConvBNLayer(
@@ -411,7 +411,7 @@ class InceptionV4DY(nn.Layer):
         self._inceptionC_2 = InceptionC(name="2")
         self._inceptionC_3 = InceptionC(name="3")
 
-        self.avg_pool = AdaptiveAvgPool2d(1)
+        self.avg_pool = AdaptiveAvgPool2D(1)
         self._drop = Dropout(p=0.2, mode="downscale_in_infer")
         stdv = 1.0 / math.sqrt(1536 * 1.0)
         self.out = Linear(
diff --git a/ppcls/modeling/architectures/mobilenet_v1.py b/ppcls/modeling/architectures/mobilenet_v1.py
index ee66f2967..5b4bc5f82 100644
--- a/ppcls/modeling/architectures/mobilenet_v1.py
+++ b/ppcls/modeling/architectures/mobilenet_v1.py
@@ -21,9 +21,9 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
-from paddle.nn.initializer import MSRA
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
+from paddle.nn.initializer import KaimingNormal
 import math
 
 __all__ = [
@@ -44,7 +44,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -52,7 +52,7 @@ class ConvBNLayer(nn.Layer):
             padding=padding,
             groups=num_groups,
             weight_attr=ParamAttr(
-                initializer=MSRA(), name=name + "_weights"),
+                initializer=KaimingNormal(), name=name + "_weights"),
             bias_attr=False)
 
         self._batch_norm = BatchNorm(
@@ -227,13 +227,13 @@ class MobileNet(nn.Layer):
                 name="conv6"))
         self.block_list.append(conv6)
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.out = Linear(
             int(1024 * scale),
             class_dim,
             weight_attr=ParamAttr(
-                initializer=MSRA(), name="fc7_weights"),
+                initializer=KaimingNormal(), name="fc7_weights"),
             bias_attr=ParamAttr(name="fc7_offset"))
 
     def forward(self, inputs):
diff --git a/ppcls/modeling/architectures/mobilenet_v2.py b/ppcls/modeling/architectures/mobilenet_v2.py
index 2aa8a7576..7f041f5cf 100644
--- a/ppcls/modeling/architectures/mobilenet_v2.py
+++ b/ppcls/modeling/architectures/mobilenet_v2.py
@@ -21,8 +21,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 
 import math
 
@@ -45,7 +45,7 @@ class ConvBNLayer(nn.Layer):
                  use_cudnn=True):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -108,7 +108,7 @@ class InvertedResidualUnit(nn.Layer):
         y = self._bottleneck_conv(y, if_act=True)
         y = self._linear_conv(y, if_act=False)
         if ifshortcut:
-            y = paddle.elementwise_add(inputs, y)
+            y = paddle.add(inputs, y)
         return y
 
 
@@ -199,7 +199,7 @@ class MobileNet(nn.Layer):
             padding=0,
             name="conv9")
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.out = Linear(
             self.out_c,
diff --git a/ppcls/modeling/architectures/mobilenet_v3.py b/ppcls/modeling/architectures/mobilenet_v3.py
index 9666c9b82..f25782d14 100644
--- a/ppcls/modeling/architectures/mobilenet_v3.py
+++ b/ppcls/modeling/architectures/mobilenet_v3.py
@@ -21,9 +21,10 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
-from paddle.fluid.regularizer import L2Decay
+from paddle.nn.functional.activation import hard_sigmoid, hard_swish
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
+from paddle.regularizer import L2Decay
 
 import math
 
@@ -111,7 +112,8 @@ class MobileNetV3(nn.Layer):
         i = 0
         inplanes = make_divisible(inplanes * scale)
         for (k, exp, c, se, nl, s) in self.cfg:
-            self.block_list.append(
+            block = self.add_sublayer(
+                "conv" + str(i + 2),
                 ResidualUnit(
                     in_c=inplanes,
                     mid_c=make_divisible(scale * exp),
@@ -121,8 +123,7 @@ class MobileNetV3(nn.Layer):
                     use_se=se,
                     act=nl,
                     name="conv" + str(i + 2)))
-            self.add_sublayer(
-                sublayer=self.block_list[-1], name="conv" + str(i + 2))
+            self.block_list.append(block)
             inplanes = make_divisible(scale * c)
             i += 1
 
@@ -137,9 +138,9 @@ class MobileNetV3(nn.Layer):
             act="hard_swish",
             name="conv_last")
 
-        self.pool = AdaptiveAvgPool2d(1)
+        self.pool = AdaptiveAvgPool2D(1)
 
-        self.last_conv = Conv2d(
+        self.last_conv = Conv2D(
             in_channels=make_divisible(scale * self.cls_ch_squeeze),
             out_channels=self.cls_ch_expand,
             kernel_size=1,
@@ -158,6 +159,7 @@ class MobileNetV3(nn.Layer):
 
     def forward(self, inputs, label=None):
         x = self.conv1(inputs)
+
         for block in self.block_list:
             x = block(x)
 
@@ -165,10 +167,11 @@ class MobileNetV3(nn.Layer):
         x = self.pool(x)
 
         x = self.last_conv(x)
-        x = F.hard_swish(x)
+        x = hard_swish(x)
         x = self.dropout(x)
         x = paddle.reshape(x, shape=[x.shape[0], x.shape[1]])
         x = self.out(x)
+
         return x
 
 
@@ -187,7 +190,7 @@ class ConvBNLayer(nn.Layer):
         super(ConvBNLayer, self).__init__()
         self.if_act = if_act
         self.act = act
-        self.conv = Conv2d(
+        self.conv = Conv2D(
             in_channels=in_c,
             out_channels=out_c,
             kernel_size=filter_size,
@@ -213,7 +216,7 @@ class ConvBNLayer(nn.Layer):
             if self.act == "relu":
                 x = F.relu(x)
             elif self.act == "hard_swish":
-                x = F.hard_swish(x)
+                x = hard_swish(x)
             else:
                 print("The activation function is selected incorrectly.")
                 exit()
@@ -272,15 +275,15 @@ class ResidualUnit(nn.Layer):
             x = self.mid_se(x)
         x = self.linear_conv(x)
         if self.if_shortcut:
-            x = paddle.elementwise_add(inputs, x)
+            x = paddle.add(inputs, x)
         return x
 
 
 class SEModule(nn.Layer):
     def __init__(self, channel, reduction=4, name=""):
         super(SEModule, self).__init__()
-        self.avg_pool = AdaptiveAvgPool2d(1)
-        self.conv1 = Conv2d(
+        self.avg_pool = AdaptiveAvgPool2D(1)
+        self.conv1 = Conv2D(
             in_channels=channel,
             out_channels=channel // reduction,
             kernel_size=1,
@@ -288,7 +291,7 @@ class SEModule(nn.Layer):
             padding=0,
             weight_attr=ParamAttr(name=name + "_1_weights"),
             bias_attr=ParamAttr(name=name + "_1_offset"))
-        self.conv2 = Conv2d(
+        self.conv2 = Conv2D(
             in_channels=channel // reduction,
             out_channels=channel,
             kernel_size=1,
@@ -302,7 +305,7 @@ class SEModule(nn.Layer):
         outputs = self.conv1(outputs)
         outputs = F.relu(outputs)
         outputs = self.conv2(outputs)
-        outputs = F.hard_sigmoid(outputs)
+        outputs = hard_sigmoid(outputs)
         return paddle.multiply(x=inputs, y=outputs, axis=0)
 
 
diff --git a/ppcls/modeling/architectures/regnet.py b/ppcls/modeling/architectures/regnet.py
index 464fd62b2..8c2ec57e8 100644
--- a/ppcls/modeling/architectures/regnet.py
+++ b/ppcls/modeling/architectures/regnet.py
@@ -20,8 +20,9 @@ import numpy as np
 import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+import paddle.nn.functional as F
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 import math
 
@@ -30,6 +31,7 @@ __all__ = [
     "RegNetY_4GF", "RegNetY_32GF"
 ]
 
+
 def quantize_float(f, q):
     """Converts a float to closest non-zero int divisible by q."""
     return int(round(f / q) * q)
@@ -39,9 +41,7 @@ def adjust_ws_gs_comp(ws, bms, gs):
     """Adjusts the compatibility of widths and groups."""
     ws_bot = [int(w * b) for w, b in zip(ws, bms)]
     gs = [min(g, w_bot) for g, w_bot in zip(gs, ws_bot)]
-    ws_bot = [
-        quantize_float(w_bot, g) for w_bot, g in zip(ws_bot, gs)
-    ]
+    ws_bot = [quantize_float(w_bot, g) for w_bot, g in zip(ws_bot, gs)]
     ws = [int(w_bot / b) for w_bot, b in zip(ws_bot, bms)]
     return ws, gs
 
@@ -81,7 +81,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -98,21 +98,22 @@ class ConvBNLayer(nn.Layer):
             bias_attr=ParamAttr(bn_name + ".output.1.b_0"),
             moving_mean_name=bn_name + "_mean",
             moving_variance_name=bn_name + "_variance")
+
     def forward(self, inputs):
         y = self._conv(inputs)
         y = self._batch_norm(y)
         return y
-    
-    
+
+
 class BottleneckBlock(nn.Layer):
     def __init__(self,
                  num_channels,
                  num_filters,
                  stride,
-                 bm, 
-                 gw, 
+                 bm,
+                 gw,
                  se_on,
-                 se_r, 
+                 se_r,
                  shortcut=True,
                  name=None):
         super(BottleneckBlock, self).__init__()
@@ -121,7 +122,7 @@ class BottleneckBlock(nn.Layer):
         w_b = int(round(num_filters * bm))
         # Compute the number of groups
         num_gs = w_b // gw
-        self.se_on = se_on 
+        self.se_on = se_on
         self.conv0 = ConvBNLayer(
             num_channels=num_channels,
             num_filters=w_b,
@@ -174,15 +175,16 @@ class BottleneckBlock(nn.Layer):
         else:
             short = self.short(inputs)
 
-        y = paddle.elementwise_add(x=short, y=conv2, act="relu")
+        y = paddle.add(x=short, y=conv2)
+        y = F.relu(y)
         return y
 
-    
+
 class SELayer(nn.Layer):
     def __init__(self, num_channels, num_filters, reduction_ratio, name=None):
         super(SELayer, self).__init__()
 
-        self.pool2d_gap = AdaptiveAvgPool2d(1)
+        self.pool2d_gap = AdaptiveAvgPool2D(1)
 
         self._num_channels = num_channels
 
@@ -214,15 +216,23 @@ class SELayer(nn.Layer):
             excitation, shape=[-1, self._num_channels, 1, 1])
         out = input * excitation
         return out
-    
+
 
 class RegNet(nn.Layer):
-    def __init__(self, w_a, w_0, w_m, d, group_w, bot_mul, q=8, se_on=False, class_dim=1000):
+    def __init__(self,
+                 w_a,
+                 w_0,
+                 w_m,
+                 d,
+                 group_w,
+                 bot_mul,
+                 q=8,
+                 se_on=False,
+                 class_dim=1000):
         super(RegNet, self).__init__()
-        
+
         # Generate RegNet ws per block
-        b_ws, num_s, max_s, ws_cont = generate_regnet(
-            w_a, w_0, w_m, d, q)
+        b_ws, num_s, max_s, ws_cont = generate_regnet(w_a, w_0, w_m, d, q)
         # Convert to per stage format
         ws, ds = get_stages_from_blocks(b_ws, b_ws)
         # Generate group widths and bot muls
@@ -258,7 +268,8 @@ class RegNet(nn.Layer):
                 num_channels = stem_w if block == i == 0 else in_channels
                 # Stride apply to the first block of the stage
                 b_stride = stride if i == 0 else 1
-                conv_name = "s" + str(block + 1) + "_b" + str(i + 1)  # chr(97 + i)
+                conv_name = "s" + str(block + 1) + "_b" + str(i +
+                                                              1)  # chr(97 + i)
                 bottleneck_block = self.add_sublayer(
                     conv_name,
                     BottleneckBlock(
@@ -275,7 +286,7 @@ class RegNet(nn.Layer):
                 self.block_list.append(bottleneck_block)
                 shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = w_out
 
@@ -297,7 +308,7 @@ class RegNet(nn.Layer):
         y = self.out(y)
         return y
 
-    
+
 def RegNetX_200MF(**args):
     model = RegNet(
         w_a=36.44, w_0=24, w_m=2.49, d=13, group_w=8, bot_mul=1.0, q=8, **args)
@@ -306,13 +317,27 @@ def RegNetX_200MF(**args):
 
 def RegNetX_4GF(**args):
     model = RegNet(
-        w_a=38.65, w_0=96, w_m=2.43, d=23, group_w=40, bot_mul=1.0, q=8, **args)
+        w_a=38.65,
+        w_0=96,
+        w_m=2.43,
+        d=23,
+        group_w=40,
+        bot_mul=1.0,
+        q=8,
+        **args)
     return model
 
 
 def RegNetX_32GF(**args):
     model = RegNet(
-        w_a=69.86, w_0=320, w_m=2.0, d=23, group_w=168, bot_mul=1.0, q=8, **args)
+        w_a=69.86,
+        w_0=320,
+        w_m=2.0,
+        d=23,
+        group_w=168,
+        bot_mul=1.0,
+        q=8,
+        **args)
     return model
 
 
@@ -356,4 +381,3 @@ def RegNetY_32GF(**args):
         se_on=True,
         **args)
     return model
-
diff --git a/ppcls/modeling/architectures/res2net.py b/ppcls/modeling/architectures/res2net.py
index 4253519e0..1949262af 100644
--- a/ppcls/modeling/architectures/res2net.py
+++ b/ppcls/modeling/architectures/res2net.py
@@ -21,8 +21,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -46,7 +46,7 @@ class ConvBNLayer(nn.Layer):
             name=None, ):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -104,7 +104,7 @@ class BottleneckBlock(nn.Layer):
                     act='relu',
                     name=name + '_branch2b_' + str(s + 1)))
             self.conv1_list.append(conv1)
-        self.pool2d_avg = AvgPool2d(kernel_size=3, stride=stride, padding=1)
+        self.pool2d_avg = AvgPool2D(kernel_size=3, stride=stride, padding=1)
 
         self.conv2 = ConvBNLayer(
             num_channels=num_filters,
@@ -143,7 +143,8 @@ class BottleneckBlock(nn.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = paddle.elementwise_add(x=short, y=conv2, act='relu')
+        y = paddle.add(x=short, y=conv2)
+        y = F.relu(y)
         return y
 
 
@@ -179,7 +180,7 @@ class Res2Net(nn.Layer):
             stride=2,
             act='relu',
             name="conv1")
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_list = []
         for block in range(len(depth)):
@@ -207,7 +208,7 @@ class Res2Net(nn.Layer):
                 self.block_list.append(bottleneck_block)
                 shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = num_channels[-1] * 2
 
diff --git a/ppcls/modeling/architectures/res2net_vd.py b/ppcls/modeling/architectures/res2net_vd.py
index 60232d692..e4ffb7735 100644
--- a/ppcls/modeling/architectures/res2net_vd.py
+++ b/ppcls/modeling/architectures/res2net_vd.py
@@ -21,8 +21,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -48,9 +48,9 @@ class ConvBNLayer(nn.Layer):
         super(ConvBNLayer, self).__init__()
 
         self.is_vd_mode = is_vd_mode
-        self._pool2d_avg = AvgPool2d(
+        self._pool2d_avg = AvgPool2D(
             kernel_size=2, stride=2, padding=0, ceil_mode=True)
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -110,7 +110,7 @@ class BottleneckBlock(nn.Layer):
                     act='relu',
                     name=name + '_branch2b_' + str(s + 1)))
             self.conv1_list.append(conv1)
-        self.pool2d_avg = AvgPool2d(kernel_size=3, stride=stride, padding=1)
+        self.pool2d_avg = AvgPool2D(kernel_size=3, stride=stride, padding=1)
 
         self.conv2 = ConvBNLayer(
             num_channels=num_filters,
@@ -150,7 +150,8 @@ class BottleneckBlock(nn.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = paddle.elementwise_add(x=short, y=conv2, act='relu')
+        y = paddle.add(x=short, y=conv2)
+        y = F.relu(y)
         return y
 
 
@@ -200,7 +201,7 @@ class Res2Net_vd(nn.Layer):
             stride=1,
             act='relu',
             name="conv1_3")
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_list = []
         for block in range(len(depth)):
@@ -228,7 +229,7 @@ class Res2Net_vd(nn.Layer):
                 self.block_list.append(bottleneck_block)
                 shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = num_channels[-1] * 2
 
diff --git a/ppcls/modeling/architectures/resnest.py b/ppcls/modeling/architectures/resnest.py
index 20ac4ddfd..88465d521 100644
--- a/ppcls/modeling/architectures/resnest.py
+++ b/ppcls/modeling/architectures/resnest.py
@@ -20,11 +20,12 @@ import numpy as np
 import paddle
 import math
 import paddle.nn as nn
+import paddle.nn.functional as F
 from paddle import ParamAttr
-from paddle.nn.initializer import MSRA
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
-from paddle.fluid.regularizer import L2Decay
+from paddle.nn.initializer import KaimingNormal
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
+from paddle.regularizer import L2Decay
 
 __all__ = ["ResNeSt50_fast_1s1x64d", "ResNeSt50"]
 
@@ -43,7 +44,7 @@ class ConvBNLayer(nn.Layer):
 
         bn_decay = 0.0
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -121,7 +122,7 @@ class SplatConv(nn.Layer):
             act="relu",
             name=name + "_splat1")
 
-        self.avg_pool2d = AdaptiveAvgPool2d(1)
+        self.avg_pool2d = AdaptiveAvgPool2D(1)
 
         inter_channels = int(max(in_channels * radix // reduction_factor, 32))
 
@@ -136,7 +137,7 @@ class SplatConv(nn.Layer):
             name=name + "_splat2")
 
         # to calc atten
-        self.conv3 = Conv2d(
+        self.conv3 = Conv2D(
             in_channels=inter_channels,
             out_channels=channels * radix,
             kernel_size=1,
@@ -144,7 +145,7 @@ class SplatConv(nn.Layer):
             padding=0,
             groups=groups,
             weight_attr=ParamAttr(
-                name=name + "_splat_weights", initializer=MSRA()),
+                name=name + "_splat_weights", initializer=KaimingNormal()),
             bias_attr=False)
 
         self.rsoftmax = rSoftmax(radix=radix, cardinality=groups)
@@ -154,7 +155,7 @@ class SplatConv(nn.Layer):
 
         if self.radix > 1:
             splited = paddle.split(x, num_or_sections=self.radix, axis=1)
-            gap = paddle.sums(splited)
+            gap = paddle.add_n(splited)
         else:
             gap = x
 
@@ -167,10 +168,10 @@ class SplatConv(nn.Layer):
 
         if self.radix > 1:
             attens = paddle.split(atten, num_or_sections=self.radix, axis=1)
-            y = paddle.sums(
-                [att * split for (att, split) in zip(attens, splited)])
+            y = paddle.add_n(
+                [split * att for (att, split) in zip(attens, splited)])
         else:
-            y = atten * x
+            y = x * atten
 
         return y
 
@@ -217,7 +218,7 @@ class BottleneckBlock(nn.Layer):
             name=name + "_conv1")
 
         if avd and avd_first and (stride > 1 or is_first):
-            self.avg_pool2d_1 = AvgPool2d(
+            self.avg_pool2d_1 = AvgPool2D(
                 kernel_size=3, stride=stride, padding=1)
 
         if radix >= 1:
@@ -245,7 +246,7 @@ class BottleneckBlock(nn.Layer):
                 name=name + "_conv2")
 
         if avd and avd_first == False and (stride > 1 or is_first):
-            self.avg_pool2d_2 = AvgPool2d(
+            self.avg_pool2d_2 = AvgPool2D(
                 kernel_size=3, stride=stride, padding=1)
 
         self.conv3 = ConvBNLayer(
@@ -260,13 +261,13 @@ class BottleneckBlock(nn.Layer):
         if stride != 1 or self.inplanes != self.planes * 4:
             if avg_down:
                 if dilation == 1:
-                    self.avg_pool2d_3 = AvgPool2d(
+                    self.avg_pool2d_3 = AvgPool2D(
                         kernel_size=stride, stride=stride, padding=0)
                 else:
-                    self.avg_pool2d_3 = AvgPool2d(
+                    self.avg_pool2d_3 = AvgPool2D(
                         kernel_size=1, stride=1, padding=0, ceil_mode=True)
 
-                self.conv4 = Conv2d(
+                self.conv4 = Conv2D(
                     in_channels=self.inplanes,
                     out_channels=planes * 4,
                     kernel_size=1,
@@ -274,10 +275,10 @@ class BottleneckBlock(nn.Layer):
                     padding=0,
                     groups=1,
                     weight_attr=ParamAttr(
-                        name=name + "_weights", initializer=MSRA()),
+                        name=name + "_weights", initializer=KaimingNormal()),
                     bias_attr=False)
             else:
-                self.conv4 = Conv2d(
+                self.conv4 = Conv2D(
                     in_channels=self.inplanes,
                     out_channels=planes * 4,
                     kernel_size=1,
@@ -285,7 +286,8 @@ class BottleneckBlock(nn.Layer):
                     padding=0,
                     groups=1,
                     weight_attr=ParamAttr(
-                        name=name + "_shortcut_weights", initializer=MSRA()),
+                        name=name + "_shortcut_weights",
+                        initializer=KaimingNormal()),
                     bias_attr=False)
 
             bn_decay = 0.0
@@ -294,10 +296,9 @@ class BottleneckBlock(nn.Layer):
                 act=None,
                 param_attr=ParamAttr(
                     name=name + "_shortcut_scale",
-                    regularizer=L2Decay(regularization_coeff=bn_decay)),
+                    regularizer=L2Decay(bn_decay)),
                 bias_attr=ParamAttr(
-                    name + "_shortcut_offset",
-                    regularizer=L2Decay(regularization_coeff=bn_decay)),
+                    name + "_shortcut_offset", regularizer=L2Decay(bn_decay)),
                 moving_mean_name=name + "_shortcut_mean",
                 moving_variance_name=name + "_shortcut_variance")
 
@@ -324,7 +325,8 @@ class BottleneckBlock(nn.Layer):
 
             short = self._batch_norm(short)
 
-        y = paddle.elementwise_add(x=short, y=x, act="relu")
+        y = paddle.add(x=short, y=x)
+        y = F.relu(y)
         return y
 
 
@@ -495,7 +497,7 @@ class ResNeSt(nn.Layer):
                 act="relu",
                 name="conv1")
 
-        self.max_pool2d = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.max_pool2d = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.layer1 = ResNeStLayer(
             inplanes=self.stem_width * 2
@@ -624,7 +626,7 @@ class ResNeSt(nn.Layer):
                 stride=2,
                 name="layer4")
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.out_channels = 2048
 
diff --git a/ppcls/modeling/architectures/resnet.py b/ppcls/modeling/architectures/resnet.py
index f86597917..4ed449749 100644
--- a/ppcls/modeling/architectures/resnet.py
+++ b/ppcls/modeling/architectures/resnet.py
@@ -20,8 +20,9 @@ import numpy as np
 import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+import paddle.nn.functional as F
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -40,7 +41,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -118,7 +119,8 @@ class BottleneckBlock(nn.Layer):
         else:
             short = self.short(inputs)
 
-        y = paddle.elementwise_add(x=short, y=conv2, act="relu")
+        y = paddle.add(x=short, y=conv2)
+        y = F.relu(y)
         return y
 
 
@@ -163,7 +165,8 @@ class BasicBlock(nn.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = paddle.elementwise_add(x=short, y=conv1, act="relu")
+        y = paddle.add(x=short, y=conv1)
+        y = F.relu(y)
         return y
 
 
@@ -196,7 +199,7 @@ class ResNet(nn.Layer):
             stride=2,
             act="relu",
             name="conv1")
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_list = []
         if layers >= 50:
@@ -238,7 +241,7 @@ class ResNet(nn.Layer):
                     self.block_list.append(basic_block)
                     shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = num_channels[-1] * 2
 
diff --git a/ppcls/modeling/architectures/resnet_acnet.py b/ppcls/modeling/architectures/resnet_acnet.py
deleted file mode 100644
index 45638a0c8..000000000
--- a/ppcls/modeling/architectures/resnet_acnet.py
+++ /dev/null
@@ -1,332 +0,0 @@
-# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-
-import math
-
-import paddle.fluid as fluid
-from paddle.fluid.param_attr import ParamAttr
-
-__all__ = [
-    "ResNet18_ACNet", "ResNet34_ACNet", "ResNet50_ACNet", "ResNet101_ACNet",
-    "ResNet152_ACNet"
-]
-
-
-class ResNetACNet(object):
-    """ ACNet """
-
-    def __init__(self, layers=50, deploy=False):
-        """init"""
-        self.layers = layers
-        self.deploy = deploy
-
-    def net(self, input, class_dim=1000):
-        """model"""
-        layers = self.layers
-        supported_layers = [18, 34, 50, 101, 152]
-        assert layers in supported_layers, \
-            "supported layers are {} but input layer is {}".format(
-                supported_layers, layers)
-
-        if layers == 18:
-            depth = [2, 2, 2, 2]
-        elif layers == 34 or layers == 50:
-            depth = [3, 4, 6, 3]
-        elif layers == 101:
-            depth = [3, 4, 23, 3]
-        elif layers == 152:
-            depth = [3, 8, 36, 3]
-        num_filters = [64, 128, 256, 512]
-
-        conv = self.conv_bn_layer(
-            input=input,
-            num_filters=64,
-            filter_size=7,
-            stride=2,
-            act='relu',
-            name="conv1")
-        conv = fluid.layers.pool2d(
-            input=conv,
-            pool_size=3,
-            pool_stride=2,
-            pool_padding=1,
-            pool_type='max')
-        if layers >= 50:
-            for block in range(len(depth)):
-                for i in range(depth[block]):
-                    if layers in [101, 152] and block == 2:
-                        if i == 0:
-                            conv_name = "res" + str(block + 2) + "a"
-                        else:
-                            conv_name = "res" + str(block + 2) + "b" + str(i)
-                    else:
-                        conv_name = "res" + str(block + 2) + chr(97 + i)
-                    conv = self.bottleneck_block(
-                        input=conv,
-                        num_filters=num_filters[block],
-                        stride=2 if i == 0 and block != 0 else 1,
-                        name=conv_name)
-        else:
-            for block in range(len(depth)):
-                for i in range(depth[block]):
-                    conv_name = "res" + str(block + 2) + chr(97 + i)
-                    conv = self.basic_block(
-                        input=conv,
-                        num_filters=num_filters[block],
-                        stride=2 if i == 0 and block != 0 else 1,
-                        is_first=block == i == 0,
-                        name=conv_name)
-
-        pool = fluid.layers.pool2d(
-            input=conv, pool_size=7, pool_type='avg', global_pooling=True)
-
-        stdv = 1.0 / math.sqrt(pool.shape[1] * 1.0)
-        out = fluid.layers.fc(
-            input=pool,
-            size=class_dim,
-            param_attr=fluid.param_attr.ParamAttr(
-                initializer=fluid.initializer.Uniform(-stdv, stdv)))
-        return out
-
-    def conv_bn_layer(self, **kwargs):
-        """
-        conv_bn_layer
-        """
-        if kwargs['filter_size'] == 1:
-            return self.conv_bn_layer_ori(**kwargs)
-        else:
-            return self.conv_bn_layer_ac(**kwargs)
-
-    # conv bn+relu
-    def conv_bn_layer_ori(self,
-                          input,
-                          num_filters,
-                          filter_size,
-                          stride=1,
-                          groups=1,
-                          act=None,
-                          name=None):
-        """
-        standard convbn
-        used for 1x1 convbn in acnet
-        """
-        conv = fluid.layers.conv2d(
-            input=input,
-            num_filters=num_filters,
-            filter_size=filter_size,
-            stride=stride,
-            padding=(filter_size - 1) // 2,
-            groups=groups,
-            act=None,
-            param_attr=ParamAttr(name=name + "_weights"),
-            bias_attr=False,
-            name=name + '.conv2d.output.1')
-
-        if name == "conv1":
-            bn_name = "bn_" + name
-        else:
-            bn_name = "bn" + name[3:]
-        return fluid.layers.batch_norm(
-            input=conv,
-            act=act,
-            name=bn_name + '.output.1',
-            param_attr=ParamAttr(name=bn_name + '_scale'),
-            bias_attr=ParamAttr(bn_name + '_offset'),
-            moving_mean_name=bn_name + '_mean',
-            moving_variance_name=bn_name + '_variance', )
-
-    # conv bn+relu
-    def conv_bn_layer_ac(self,
-                         input,
-                         num_filters,
-                         filter_size,
-                         stride=1,
-                         groups=1,
-                         act=None,
-                         name=None):
-        """ ACNet conv bn """
-        padding = (filter_size - 1) // 2
-
-        square_conv = fluid.layers.conv2d(
-            input=input,
-            num_filters=num_filters,
-            filter_size=filter_size,
-            stride=stride,
-            padding=padding,
-            groups=groups,
-            act=act if self.deploy else None,
-            param_attr=ParamAttr(name=name + "_acsquare_weights"),
-            bias_attr=ParamAttr(name=name + "_acsquare_bias")
-            if self.deploy else False,
-            name=name + '.acsquare.conv2d.output.1')
-
-        if self.deploy:
-            return square_conv
-        else:
-            ver_conv = fluid.layers.conv2d(
-                input=input,
-                num_filters=num_filters,
-                filter_size=(filter_size, 1),
-                stride=stride,
-                padding=(padding, 0),
-                groups=groups,
-                act=None,
-                param_attr=ParamAttr(name=name + "_acver_weights"),
-                bias_attr=False,
-                name=name + '.acver.conv2d.output.1')
-
-            hor_conv = fluid.layers.conv2d(
-                input=input,
-                num_filters=num_filters,
-                filter_size=(1, filter_size),
-                stride=stride,
-                padding=(0, padding),
-                groups=groups,
-                act=None,
-                param_attr=ParamAttr(name=name + "_achor_weights"),
-                bias_attr=False,
-                name=name + '.achor.conv2d.output.1')
-
-            if name == "conv1":
-                bn_name = "bn_" + name
-            else:
-                bn_name = "bn" + name[3:]
-
-            square_bn = fluid.layers.batch_norm(
-                input=square_conv,
-                act=None,
-                name=bn_name + '.acsquare.output.1',
-                param_attr=ParamAttr(name=bn_name + '_acsquare_scale'),
-                bias_attr=ParamAttr(bn_name + '_acsquare_offset'),
-                moving_mean_name=bn_name + '_acsquare_mean',
-                moving_variance_name=bn_name + '_acsquare_variance', )
-
-            ver_bn = fluid.layers.batch_norm(
-                input=ver_conv,
-                act=None,
-                name=bn_name + '.acver.output.1',
-                param_attr=ParamAttr(name=bn_name + '_acver_scale'),
-                bias_attr=ParamAttr(bn_name + '_acver_offset'),
-                moving_mean_name=bn_name + '_acver_mean',
-                moving_variance_name=bn_name + '_acver_variance', )
-
-            hor_bn = fluid.layers.batch_norm(
-                input=hor_conv,
-                act=None,
-                name=bn_name + '.achor.output.1',
-                param_attr=ParamAttr(name=bn_name + '_achor_scale'),
-                bias_attr=ParamAttr(bn_name + '_achor_offset'),
-                moving_mean_name=bn_name + '_achor_mean',
-                moving_variance_name=bn_name + '_achor_variance', )
-
-            return fluid.layers.elementwise_add(
-                x=square_bn, y=ver_bn + hor_bn, act=act)
-
-    def shortcut(self, input, ch_out, stride, is_first, name):
-        """ shortcut """
-        ch_in = input.shape[1]
-        if ch_in != ch_out or stride != 1 or is_first is True:
-            return self.conv_bn_layer(
-                input=input,
-                num_filters=ch_out,
-                filter_size=1,
-                stride=stride,
-                name=name)
-        else:
-            return input
-
-    def bottleneck_block(self, input, num_filters, stride, name):
-        """" bottleneck_block """
-        conv0 = self.conv_bn_layer(
-            input=input,
-            num_filters=num_filters,
-            filter_size=1,
-            act='relu',
-            name=name + "_branch2a")
-        conv1 = self.conv_bn_layer(
-            input=conv0,
-            num_filters=num_filters,
-            filter_size=3,
-            stride=stride,
-            act='relu',
-            name=name + "_branch2b")
-        conv2 = self.conv_bn_layer(
-            input=conv1,
-            num_filters=num_filters * 4,
-            filter_size=1,
-            act=None,
-            name=name + "_branch2c")
-
-        short = self.shortcut(
-            input,
-            num_filters * 4,
-            stride,
-            is_first=False,
-            name=name + "_branch1")
-
-        return fluid.layers.elementwise_add(
-            x=short, y=conv2, act='relu', name=name + ".add.output.5")
-
-    def basic_block(self, input, num_filters, stride, is_first, name):
-        """ basic_block """
-        conv0 = self.conv_bn_layer(
-            input=input,
-            num_filters=num_filters,
-            filter_size=3,
-            act='relu',
-            stride=stride,
-            name=name + "_branch2a")
-        conv1 = self.conv_bn_layer(
-            input=conv0,
-            num_filters=num_filters,
-            filter_size=3,
-            act=None,
-            name=name + "_branch2b")
-        short = self.shortcut(
-            input, num_filters, stride, is_first, name=name + "_branch1")
-        return fluid.layers.elementwise_add(x=short, y=conv1, act='relu')
-
-
-def ResNet18_ACNet(deploy=False):
-    """ResNet18 + ACNet"""
-    model = ResNetACNet(layers=18, deploy=deploy)
-    return model
-
-
-def ResNet34_ACNet(deploy=False):
-    """ResNet34 + ACNet"""
-    model = ResNetACNet(layers=34, deploy=deploy)
-    return model
-
-
-def ResNet50_ACNet(deploy=False):
-    """ResNet50 + ACNet"""
-    model = ResNetACNet(layers=50, deploy=deploy)
-    return model
-
-
-def ResNet101_ACNet(deploy=False):
-    """ResNet101 + ACNet"""
-    model = ResNetACNet(layers=101, deploy=deploy)
-    return model
-
-
-def ResNet152_ACNet(deploy=False):
-    """ResNet152 + ACNet"""
-    model = ResNetACNet(layers=152, deploy=deploy)
-    return model
diff --git a/ppcls/modeling/architectures/resnet_vc.py b/ppcls/modeling/architectures/resnet_vc.py
index bbc4e0a83..5a9374c15 100644
--- a/ppcls/modeling/architectures/resnet_vc.py
+++ b/ppcls/modeling/architectures/resnet_vc.py
@@ -20,8 +20,9 @@ import numpy as np
 import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+import paddle.nn.functional as F
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -42,7 +43,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -120,7 +121,8 @@ class BottleneckBlock(nn.Layer):
         else:
             short = self.short(inputs)
 
-        y = paddle.elementwise_add(x=short, y=conv2, act='relu')
+        y = paddle.add(x=short, y=conv2)
+        y = F.relu(y)
         return y
 
 
@@ -165,7 +167,8 @@ class BasicBlock(nn.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = paddle.elementwise_add(x=short, y=conv1, act='relu')
+        y = paddle.add(x=short, y=conv1)
+        y = F.relu(y)
         return y
 
 
@@ -213,7 +216,7 @@ class ResNet_vc(nn.Layer):
             act='relu',
             name="conv1_3")
 
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_list = []
         if layers >= 50:
@@ -255,7 +258,7 @@ class ResNet_vc(nn.Layer):
                     self.block_list.append(basic_block)
                     shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = num_channels[-1] * 2
 
diff --git a/ppcls/modeling/architectures/resnet_vd.py b/ppcls/modeling/architectures/resnet_vd.py
index 00a6c0138..944a0b0cc 100644
--- a/ppcls/modeling/architectures/resnet_vd.py
+++ b/ppcls/modeling/architectures/resnet_vd.py
@@ -20,8 +20,9 @@ import numpy as np
 import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+import paddle.nn.functional as F
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -44,9 +45,9 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
         self.is_vd_mode = is_vd_mode
-        self._pool2d_avg = AvgPool2d(
+        self._pool2d_avg = AvgPool2D(
             kernel_size=2, stride=2, padding=0, ceil_mode=True)
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -130,7 +131,8 @@ class BottleneckBlock(nn.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = paddle.elementwise_add(x=short, y=conv2, act='relu')
+        y = paddle.add(x=short, y=conv2)
+        y = F.relu(y)
         return y
 
 
@@ -178,7 +180,8 @@ class BasicBlock(nn.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = paddle.elementwise_add(x=short, y=conv1, act='relu')
+        y = paddle.add(x=short, y=conv1)
+        y = F.relu(y)
         return y
 
 
@@ -243,7 +246,7 @@ class ResNet_vd(nn.Layer):
             act='relu',
             lr_mult=self.lr_mult_list[0],
             name="conv1_3")
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_list = []
         if layers >= 50:
@@ -285,11 +288,11 @@ class ResNet_vd(nn.Layer):
                             shortcut=shortcut,
                             if_first=block == i == 0,
                             name=conv_name,
-                            lr_mult=lr_mult))
+                            lr_mult=self.lr_mult_list[block + 1]))
                     self.block_list.append(basic_block)
                     shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = num_channels[-1] * 2
 
diff --git a/ppcls/modeling/architectures/resnext.py b/ppcls/modeling/architectures/resnext.py
index b47815152..f56d6ba92 100644
--- a/ppcls/modeling/architectures/resnext.py
+++ b/ppcls/modeling/architectures/resnext.py
@@ -20,8 +20,9 @@ import numpy as np
 import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+import paddle.nn.functional as F
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -43,7 +44,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -122,7 +123,8 @@ class BottleneckBlock(nn.Layer):
         else:
             short = self.short(inputs)
 
-        y = paddle.elementwise_add(x=short, y=conv2, act='relu')
+        y = paddle.add(x=short, y=conv2)
+        y = F.relu(y)
         return y
 
 
@@ -157,7 +159,7 @@ class ResNeXt(nn.Layer):
             stride=2,
             act='relu',
             name="res_conv1")
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_list = []
         for block in range(len(depth)):
@@ -183,7 +185,7 @@ class ResNeXt(nn.Layer):
                 self.block_list.append(bottleneck_block)
                 shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = num_channels[-1] * 2
 
diff --git a/ppcls/modeling/architectures/resnext101_wsl.py b/ppcls/modeling/architectures/resnext101_wsl.py
index 40d0bc5e2..7130812b1 100644
--- a/ppcls/modeling/architectures/resnext101_wsl.py
+++ b/ppcls/modeling/architectures/resnext101_wsl.py
@@ -2,8 +2,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 __all__ = [
@@ -26,7 +26,7 @@ class ConvBNLayer(nn.Layer):
             conv_name = name + ".0"
         else:
             conv_name = name
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=input_channels,
             out_channels=output_channels,
             kernel_size=filter_size,
@@ -114,7 +114,9 @@ class BottleneckBlock(nn.Layer):
         x = self._conv1(x)
         x = self._conv2(x)
         y = self._short(inputs)
-        return paddle.elementwise_add(x, y, act="relu")
+        y = paddle.add(x, y)
+        y = F.relu(y)
+        return y
 
 
 class ResNeXt101WSL(nn.Layer):
@@ -134,7 +136,7 @@ class ResNeXt101WSL(nn.Layer):
                        for i in [1, 2, 4, 8]]  # [256, 512, 1024, 2048]
         self._conv_stem = ConvBNLayer(
             3, 64, 7, stride=2, act="relu", name="conv1")
-        self._pool = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self._pool = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self._conv1_0 = BottleneckBlock(
             64,
@@ -371,7 +373,7 @@ class ResNeXt101WSL(nn.Layer):
             width=self.width,
             name="layer4.2")
 
-        self._avg_pool = AdaptiveAvgPool2d(1)
+        self._avg_pool = AdaptiveAvgPool2D(1)
         self._out = Linear(
             num_filters[3] // (width // 8),
             class_dim,
diff --git a/ppcls/modeling/architectures/resnext_vd.py b/ppcls/modeling/architectures/resnext_vd.py
index 6fe1f79a1..a05b64523 100644
--- a/ppcls/modeling/architectures/resnext_vd.py
+++ b/ppcls/modeling/architectures/resnext_vd.py
@@ -20,8 +20,9 @@ import numpy as np
 import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+import paddle.nn.functional as F
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -46,9 +47,9 @@ class ConvBNLayer(nn.Layer):
         super(ConvBNLayer, self).__init__()
 
         self.is_vd_mode = is_vd_mode
-        self._pool2d_avg = AvgPool2d(
+        self._pool2d_avg = AvgPool2D(
             kernel_size=2, stride=2, padding=0, ceil_mode=True)
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -131,7 +132,8 @@ class BottleneckBlock(nn.Layer):
         else:
             short = self.short(inputs)
 
-        y = paddle.elementwise_add(x=short, y=conv2, act='relu')
+        y = paddle.add(x=short, y=conv2)
+        y = F.relu(y)
         return y
 
 
@@ -181,7 +183,7 @@ class ResNeXt(nn.Layer):
             act='relu',
             name="conv1_3")
 
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_list = []
         for block in range(len(depth)):
@@ -208,7 +210,7 @@ class ResNeXt(nn.Layer):
                 self.block_list.append(bottleneck_block)
                 shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = num_channels[-1] * 2
 
diff --git a/ppcls/modeling/architectures/se_resnet_vd.py b/ppcls/modeling/architectures/se_resnet_vd.py
index 219bc7536..a3ba43efa 100644
--- a/ppcls/modeling/architectures/se_resnet_vd.py
+++ b/ppcls/modeling/architectures/se_resnet_vd.py
@@ -20,8 +20,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -46,10 +46,10 @@ class ConvBNLayer(nn.Layer):
         super(ConvBNLayer, self).__init__()
 
         self.is_vd_mode = is_vd_mode
-        self._pool2d_avg = AvgPool2d(
+        self._pool2d_avg = AvgPool2D(
             kernel_size=2, stride=2, padding=0, ceil_mode=True)
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -135,7 +135,8 @@ class BottleneckBlock(nn.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = paddle.elementwise_add(x=short, y=scale, act='relu')
+        y = paddle.add(x=short, y=scale)
+        y = F.relu(y)
         return y
 
 
@@ -190,7 +191,8 @@ class BasicBlock(nn.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = paddle.elementwise_add(x=short, y=scale, act='relu')
+        y = paddle.add(x=short, y=scale)
+        y = F.relu(y)
         return y
 
 
@@ -198,7 +200,7 @@ class SELayer(nn.Layer):
     def __init__(self, num_channels, num_filters, reduction_ratio, name=None):
         super(SELayer, self).__init__()
 
-        self.pool2d_gap = AdaptiveAvgPool2d(1)
+        self.pool2d_gap = AdaptiveAvgPool2D(1)
 
         self._num_channels = num_channels
 
@@ -277,7 +279,7 @@ class SE_ResNet_vd(nn.Layer):
             stride=1,
             act='relu',
             name="conv1_3")
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_list = []
         if layers >= 50:
@@ -321,7 +323,7 @@ class SE_ResNet_vd(nn.Layer):
                     self.block_list.append(basic_block)
                     shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = num_channels[-1] * 2
 
diff --git a/ppcls/modeling/architectures/se_resnext.py b/ppcls/modeling/architectures/se_resnext.py
index 68b8d98f6..d323e852f 100644
--- a/ppcls/modeling/architectures/se_resnext.py
+++ b/ppcls/modeling/architectures/se_resnext.py
@@ -20,8 +20,8 @@ import numpy as np
 import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -30,18 +30,17 @@ __all__ = ["SE_ResNeXt50_32x4d", "SE_ResNeXt101_32x4d", "SE_ResNeXt152_64x4d"]
 
 
 class ConvBNLayer(nn.Layer):
-    def __init__(
-            self,
-            num_channels,
-            num_filters,
-            filter_size,
-            stride=1,
-            groups=1,
-            act=None,
-            name=None):
+    def __init__(self,
+                 num_channels,
+                 num_filters,
+                 filter_size,
+                 stride=1,
+                 groups=1,
+                 act=None,
+                 name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -124,7 +123,8 @@ class BottleneckBlock(nn.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = paddle.elementwise_add(x=short, y=scale, act='relu')
+        y = paddle.add(x=short, y=scale)
+        y = F.relu(y)
         return y
 
 
@@ -132,7 +132,7 @@ class SELayer(nn.Layer):
     def __init__(self, num_channels, num_filters, reduction_ratio, name=None):
         super(SELayer, self).__init__()
 
-        self.pool2d_gap = AdaptiveAvgPool2d(1)
+        self.pool2d_gap = AdaptiveAvgPool2D(1)
 
         self._num_channels = num_channels
 
@@ -142,8 +142,7 @@ class SELayer(nn.Layer):
             num_channels,
             med_ch,
             weight_attr=ParamAttr(
-               initializer=Uniform(-stdv, stdv),
-               name=name + "_sqz_weights"),
+                initializer=Uniform(-stdv, stdv), name=name + "_sqz_weights"),
             bias_attr=ParamAttr(name=name + '_sqz_offset'))
         self.relu = nn.ReLU()
         stdv = 1.0 / math.sqrt(med_ch * 1.0)
@@ -151,11 +150,10 @@ class SELayer(nn.Layer):
             med_ch,
             num_filters,
             weight_attr=ParamAttr(
-                initializer=Uniform(-stdv, stdv),
-                name=name + "_exc_weights"),
+                initializer=Uniform(-stdv, stdv), name=name + "_exc_weights"),
             bias_attr=ParamAttr(name=name + '_exc_offset'))
         self.sigmoid = nn.Sigmoid()
-        
+
     def forward(self, input):
         pool = self.pool2d_gap(input)
         pool = paddle.reshape(pool, shape=[-1, self._num_channels])
@@ -224,7 +222,7 @@ class ResNeXt(nn.Layer):
                 act='relu',
                 name="conv3")
 
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_list = []
         n = 1 if layers == 50 or layers == 101 else 3
@@ -247,7 +245,7 @@ class ResNeXt(nn.Layer):
                 self.block_list.append(bottleneck_block)
                 shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = num_channels[-1] * 2
 
@@ -257,8 +255,7 @@ class ResNeXt(nn.Layer):
             self.pool2d_avg_channels,
             class_dim,
             weight_attr=ParamAttr(
-                initializer=Uniform(-stdv, stdv),
-                name="fc6_weights"),
+                initializer=Uniform(-stdv, stdv), name="fc6_weights"),
             bias_attr=ParamAttr(name="fc6_offset"))
 
     def forward(self, inputs):
@@ -269,7 +266,7 @@ class ResNeXt(nn.Layer):
             y = self.conv1_2(y)
             y = self.conv1_3(y)
         y = self.pool2d_max(y)
-           
+
         for block in self.block_list:
             y = block(y)
         y = self.pool2d_avg(y)
diff --git a/ppcls/modeling/architectures/se_resnext_vd.py b/ppcls/modeling/architectures/se_resnext_vd.py
index 4dbfefdb4..d3d556f9f 100644
--- a/ppcls/modeling/architectures/se_resnext_vd.py
+++ b/ppcls/modeling/architectures/se_resnext_vd.py
@@ -20,8 +20,9 @@ import numpy as np
 import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+import paddle.nn.functional as F
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 
 import math
@@ -30,22 +31,21 @@ __all__ = ["SE_ResNeXt50_vd_32x4d", "SE_ResNeXt50_vd_32x4d", "SENet154_vd"]
 
 
 class ConvBNLayer(nn.Layer):
-    def __init__(
-            self,
-            num_channels,
-            num_filters,
-            filter_size,
-            stride=1,
-            groups=1,
-            is_vd_mode=False,
-            act=None,
-            name=None):
+    def __init__(self,
+                 num_channels,
+                 num_filters,
+                 filter_size,
+                 stride=1,
+                 groups=1,
+                 is_vd_mode=False,
+                 act=None,
+                 name=None):
         super(ConvBNLayer, self).__init__()
 
         self.is_vd_mode = is_vd_mode
-        self._pool2d_avg = AvgPool2d(
+        self._pool2d_avg = AvgPool2D(
             kernel_size=2, stride=2, padding=0, ceil_mode=True)
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -131,7 +131,8 @@ class BottleneckBlock(nn.Layer):
             short = inputs
         else:
             short = self.short(inputs)
-        y = paddle.elementwise_add(x=short, y=scale, act='relu')
+        y = paddle.add(x=short, y=scale)
+        y = F.relu(y)
         return y
 
 
@@ -139,7 +140,7 @@ class SELayer(nn.Layer):
     def __init__(self, num_channels, num_filters, reduction_ratio, name=None):
         super(SELayer, self).__init__()
 
-        self.pool2d_gap = AdaptiveAvgPool2d(1)
+        self.pool2d_gap = AdaptiveAvgPool2D(1)
 
         self._num_channels = num_channels
 
@@ -149,8 +150,7 @@ class SELayer(nn.Layer):
             num_channels,
             med_ch,
             weight_attr=ParamAttr(
-               initializer=Uniform(-stdv, stdv),
-               name=name + "_sqz_weights"),
+                initializer=Uniform(-stdv, stdv), name=name + "_sqz_weights"),
             bias_attr=ParamAttr(name=name + '_sqz_offset'))
         self.relu = nn.ReLU()
         stdv = 1.0 / math.sqrt(med_ch * 1.0)
@@ -158,11 +158,10 @@ class SELayer(nn.Layer):
             med_ch,
             num_filters,
             weight_attr=ParamAttr(
-                initializer=Uniform(-stdv, stdv),
-                name=name + "_exc_weights"),
+                initializer=Uniform(-stdv, stdv), name=name + "_exc_weights"),
             bias_attr=ParamAttr(name=name + '_exc_offset'))
         self.sigmoid = nn.Sigmoid()
-        
+
     def forward(self, input):
         pool = self.pool2d_gap(input)
         pool = paddle.reshape(pool, shape=[-1, self._num_channels])
@@ -223,7 +222,7 @@ class ResNeXt(nn.Layer):
             act='relu',
             name="conv1_3")
 
-        self.pool2d_max = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self.pool2d_max = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         self.block_list = []
         n = 1 if layers == 50 or layers == 101 else 3
@@ -246,7 +245,7 @@ class ResNeXt(nn.Layer):
                 self.block_list.append(bottleneck_block)
                 shortcut = True
 
-        self.pool2d_avg = AdaptiveAvgPool2d(1)
+        self.pool2d_avg = AdaptiveAvgPool2D(1)
 
         self.pool2d_avg_channels = num_channels[-1] * 2
 
@@ -256,8 +255,7 @@ class ResNeXt(nn.Layer):
             self.pool2d_avg_channels,
             class_dim,
             weight_attr=ParamAttr(
-                initializer=Uniform(-stdv, stdv),
-                name="fc6_weights"),
+                initializer=Uniform(-stdv, stdv), name="fc6_weights"),
             bias_attr=ParamAttr(name="fc6_offset"))
 
     def forward(self, inputs):
diff --git a/ppcls/modeling/architectures/shufflenet_v2.py b/ppcls/modeling/architectures/shufflenet_v2.py
index 9e06c955c..e344a142f 100644
--- a/ppcls/modeling/architectures/shufflenet_v2.py
+++ b/ppcls/modeling/architectures/shufflenet_v2.py
@@ -17,8 +17,8 @@ from __future__ import division
 from __future__ import print_function
 
 from paddle import ParamAttr, reshape, transpose, concat, split
-from paddle.nn import Layer, Conv2d, MaxPool2d, AdaptiveAvgPool2d, BatchNorm, Linear
-from paddle.nn.initializer import MSRA
+from paddle.nn import Layer, Conv2D, MaxPool2D, AdaptiveAvgPool2D, BatchNorm, Linear
+from paddle.nn.initializer import KaimingNormal
 from paddle.nn.functional import swish
 
 __all__ = [
@@ -56,7 +56,7 @@ class ConvBNLayer(Layer):
             act=None,
             name=None, ):
         super(ConvBNLayer, self).__init__()
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=in_channels,
             out_channels=out_channels,
             kernel_size=kernel_size,
@@ -64,7 +64,7 @@ class ConvBNLayer(Layer):
             padding=padding,
             groups=groups,
             weight_attr=ParamAttr(
-                initializer=MSRA(), name=name + "_weights"),
+                initializer=KaimingNormal(), name=name + "_weights"),
             bias_attr=False)
 
         self._batch_norm = BatchNorm(
@@ -228,7 +228,7 @@ class ShuffleNet(Layer):
             padding=1,
             act=act,
             name='stage1_conv')
-        self._max_pool = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self._max_pool = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
         # 2. bottleneck sequences
         self._block_list = []
@@ -263,7 +263,7 @@ class ShuffleNet(Layer):
             act=act,
             name='conv5')
         # 4. pool
-        self._pool2d_avg = AdaptiveAvgPool2d(1)
+        self._pool2d_avg = AdaptiveAvgPool2D(1)
         self._out_c = stage_out_channels[-1]
         # 5. fc
         self._fc = Linear(
diff --git a/ppcls/modeling/architectures/squeezenet.py b/ppcls/modeling/architectures/squeezenet.py
index 1e38d8413..eb380f252 100644
--- a/ppcls/modeling/architectures/squeezenet.py
+++ b/ppcls/modeling/architectures/squeezenet.py
@@ -2,8 +2,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 
 __all__ = ["SqueezeNet1_0", "SqueezeNet1_1"]
 
@@ -16,7 +16,7 @@ class MakeFireConv(nn.Layer):
                  padding=0,
                  name=None):
         super(MakeFireConv, self).__init__()
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             input_channels,
             output_channels,
             filter_size,
@@ -62,14 +62,14 @@ class SqueezeNet(nn.Layer):
         self.version = version
 
         if self.version == "1.0":
-            self._conv = Conv2d(
+            self._conv = Conv2D(
                 3,
                 96,
                 7,
                 stride=2,
                 weight_attr=ParamAttr(name="conv1_weights"),
                 bias_attr=ParamAttr(name="conv1_offset"))
-            self._pool = MaxPool2d(kernel_size=3, stride=2, padding=0)
+            self._pool = MaxPool2D(kernel_size=3, stride=2, padding=0)
             self._conv1 = MakeFire(96, 16, 64, 64, name="fire2")
             self._conv2 = MakeFire(128, 16, 64, 64, name="fire3")
             self._conv3 = MakeFire(128, 32, 128, 128, name="fire4")
@@ -81,7 +81,7 @@ class SqueezeNet(nn.Layer):
 
             self._conv8 = MakeFire(512, 64, 256, 256, name="fire9")
         else:
-            self._conv = Conv2d(
+            self._conv = Conv2D(
                 3,
                 64,
                 3,
@@ -89,7 +89,7 @@ class SqueezeNet(nn.Layer):
                 padding=1,
                 weight_attr=ParamAttr(name="conv1_weights"),
                 bias_attr=ParamAttr(name="conv1_offset"))
-            self._pool = MaxPool2d(kernel_size=3, stride=2, padding=0)
+            self._pool = MaxPool2D(kernel_size=3, stride=2, padding=0)
             self._conv1 = MakeFire(64, 16, 64, 64, name="fire2")
             self._conv2 = MakeFire(128, 16, 64, 64, name="fire3")
 
@@ -102,13 +102,13 @@ class SqueezeNet(nn.Layer):
             self._conv8 = MakeFire(512, 64, 256, 256, name="fire9")
 
         self._drop = Dropout(p=0.5, mode="downscale_in_infer")
-        self._conv9 = Conv2d(
+        self._conv9 = Conv2D(
             512,
             class_dim,
             1,
             weight_attr=ParamAttr(name="conv10_weights"),
             bias_attr=ParamAttr(name="conv10_offset"))
-        self._avg_pool = AdaptiveAvgPool2d(1)
+        self._avg_pool = AdaptiveAvgPool2D(1)
 
     def forward(self, inputs):
         x = self._conv(inputs)
diff --git a/ppcls/modeling/architectures/vgg.py b/ppcls/modeling/architectures/vgg.py
index dec7c3d76..27619c314 100644
--- a/ppcls/modeling/architectures/vgg.py
+++ b/ppcls/modeling/architectures/vgg.py
@@ -2,8 +2,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 
 __all__ = ["VGG11", "VGG13", "VGG16", "VGG19"]
 
@@ -13,7 +13,7 @@ class ConvBlock(nn.Layer):
         super(ConvBlock, self).__init__()
 
         self.groups = groups
-        self._conv_1 = Conv2d(
+        self._conv_1 = Conv2D(
             in_channels=input_channels,
             out_channels=output_channels,
             kernel_size=3,
@@ -22,7 +22,7 @@ class ConvBlock(nn.Layer):
             weight_attr=ParamAttr(name=name + "1_weights"),
             bias_attr=False)
         if groups == 2 or groups == 3 or groups == 4:
-            self._conv_2 = Conv2d(
+            self._conv_2 = Conv2D(
                 in_channels=output_channels,
                 out_channels=output_channels,
                 kernel_size=3,
@@ -31,7 +31,7 @@ class ConvBlock(nn.Layer):
                 weight_attr=ParamAttr(name=name + "2_weights"),
                 bias_attr=False)
         if groups == 3 or groups == 4:
-            self._conv_3 = Conv2d(
+            self._conv_3 = Conv2D(
                 in_channels=output_channels,
                 out_channels=output_channels,
                 kernel_size=3,
@@ -40,7 +40,7 @@ class ConvBlock(nn.Layer):
                 weight_attr=ParamAttr(name=name + "3_weights"),
                 bias_attr=False)
         if groups == 4:
-            self._conv_4 = Conv2d(
+            self._conv_4 = Conv2D(
                 in_channels=output_channels,
                 out_channels=output_channels,
                 kernel_size=3,
@@ -49,7 +49,7 @@ class ConvBlock(nn.Layer):
                 weight_attr=ParamAttr(name=name + "4_weights"),
                 bias_attr=False)
 
-        self._pool = MaxPool2d(kernel_size=2, stride=2, padding=0)
+        self._pool = MaxPool2D(kernel_size=2, stride=2, padding=0)
 
     def forward(self, inputs):
         x = self._conv_1(inputs)
diff --git a/ppcls/modeling/architectures/xception.py b/ppcls/modeling/architectures/xception.py
index 8293c31b8..cf2ea35a6 100644
--- a/ppcls/modeling/architectures/xception.py
+++ b/ppcls/modeling/architectures/xception.py
@@ -2,8 +2,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 from paddle.nn.initializer import Uniform
 import math
 
@@ -21,7 +21,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=num_channels,
             out_channels=num_filters,
             kernel_size=filter_size,
@@ -75,7 +75,7 @@ class EntryFlowBottleneckBlock(nn.Layer):
         super(EntryFlowBottleneckBlock, self).__init__()
         self.relu_first = relu_first
 
-        self._short = Conv2d(
+        self._short = Conv2D(
             in_channels=input_channels,
             out_channels=output_channels,
             kernel_size=1,
@@ -93,7 +93,7 @@ class EntryFlowBottleneckBlock(nn.Layer):
             output_channels,
             stride=1,
             name=name + "_branch2b_weights")
-        self._pool = MaxPool2d(kernel_size=3, stride=stride, padding=1)
+        self._pool = MaxPool2D(kernel_size=3, stride=stride, padding=1)
 
     def forward(self, inputs):
         conv0 = inputs
@@ -104,7 +104,7 @@ class EntryFlowBottleneckBlock(nn.Layer):
         conv2 = F.relu(conv1)
         conv2 = self._conv2(conv2)
         pool = self._pool(conv2)
-        return paddle.elementwise_add(x=short, y=pool)
+        return paddle.add(x=short, y=pool)
 
 
 class EntryFlow(nn.Layer):
@@ -181,7 +181,7 @@ class MiddleFlowBottleneckBlock(nn.Layer):
         conv1 = self._conv_1(conv1)
         conv2 = F.relu(conv1)
         conv2 = self._conv_2(conv2)
-        return paddle.elementwise_add(x=inputs, y=conv2)
+        return paddle.add(x=inputs, y=conv2)
 
 
 class MiddleFlow(nn.Layer):
@@ -249,7 +249,7 @@ class ExitFlowBottleneckBlock(nn.Layer):
                  name):
         super(ExitFlowBottleneckBlock, self).__init__()
 
-        self._short = Conv2d(
+        self._short = Conv2D(
             in_channels=input_channels,
             out_channels=output_channels2,
             kernel_size=1,
@@ -267,7 +267,7 @@ class ExitFlowBottleneckBlock(nn.Layer):
             output_channels2,
             stride=1,
             name=name + "_branch2b_weights")
-        self._pool = MaxPool2d(kernel_size=3, stride=2, padding=1)
+        self._pool = MaxPool2D(kernel_size=3, stride=2, padding=1)
 
     def forward(self, inputs):
         short = self._short(inputs)
@@ -276,7 +276,7 @@ class ExitFlowBottleneckBlock(nn.Layer):
         conv2 = F.relu(conv1)
         conv2 = self._conv_2(conv2)
         pool = self._pool(conv2)
-        return paddle.elementwise_add(x=short, y=pool)
+        return paddle.add(x=short, y=pool)
 
 
 class ExitFlow(nn.Layer):
@@ -289,7 +289,7 @@ class ExitFlow(nn.Layer):
             728, 728, 1024, name=name + "_1")
         self._conv_1 = SeparableConv(1024, 1536, stride=1, name=name + "_2")
         self._conv_2 = SeparableConv(1536, 2048, stride=1, name=name + "_3")
-        self._pool = AdaptiveAvgPool2d(1)
+        self._pool = AdaptiveAvgPool2D(1)
         stdv = 1.0 / math.sqrt(2048 * 1.0)
         self._out = Linear(
             2048,
diff --git a/ppcls/modeling/architectures/xception_deeplab.py b/ppcls/modeling/architectures/xception_deeplab.py
index 2e77ed541..a90c27eae 100644
--- a/ppcls/modeling/architectures/xception_deeplab.py
+++ b/ppcls/modeling/architectures/xception_deeplab.py
@@ -2,8 +2,8 @@ import paddle
 from paddle import ParamAttr
 import paddle.nn as nn
 import paddle.nn.functional as F
-from paddle.nn import Conv2d, BatchNorm, Linear, Dropout
-from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d
+from paddle.nn import Conv2D, BatchNorm, Linear, Dropout
+from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
 
 __all__ = ["Xception41_deeplab", "Xception65_deeplab", "Xception71_deeplab"]
 
@@ -69,7 +69,7 @@ class ConvBNLayer(nn.Layer):
                  name=None):
         super(ConvBNLayer, self).__init__()
 
-        self._conv = Conv2d(
+        self._conv = Conv2D(
             in_channels=input_channels,
             out_channels=output_channels,
             kernel_size=filter_size,
@@ -102,7 +102,7 @@ class Seperate_Conv(nn.Layer):
                  name=None):
         super(Seperate_Conv, self).__init__()
 
-        self._conv1 = Conv2d(
+        self._conv1 = Conv2D(
             in_channels=input_channels,
             out_channels=input_channels,
             kernel_size=filter,
@@ -121,7 +121,7 @@ class Seperate_Conv(nn.Layer):
             bias_attr=ParamAttr(name=name + "/depthwise/BatchNorm/beta"),
             moving_mean_name=name + "/depthwise/BatchNorm/moving_mean",
             moving_variance_name=name + "/depthwise/BatchNorm/moving_variance")
-        self._conv2 = Conv2d(
+        self._conv2 = Conv2D(
             input_channels,
             output_channels,
             1,
@@ -244,7 +244,7 @@ class Xception_Block(nn.Layer):
             skip = self._short(inputs)
         else:
             skip = inputs
-        return paddle.elementwise_add(x, skip)
+        return paddle.add(x, skip)
 
 
 class XceptionDeeplab(nn.Layer):
@@ -347,7 +347,7 @@ class XceptionDeeplab(nn.Layer):
         self.stride = s
 
         self._drop = Dropout(p=0.5, mode="downscale_in_infer")
-        self._pool = AdaptiveAvgPool2d(1)
+        self._pool = AdaptiveAvgPool2D(1)
         self._fc = Linear(
             self.chns[1][-1],
             class_dim,
diff --git a/ppcls/modeling/loss.py b/ppcls/modeling/loss.py
index c9c2c685f..29c45869c 100644
--- a/ppcls/modeling/loss.py
+++ b/ppcls/modeling/loss.py
@@ -38,8 +38,7 @@ class Loss(object):
             one_hot_target = F.one_hot(target, self._class_dim)
         else:
             one_hot_target = target
-        soft_target = F.label_smooth(
-            one_hot_target, epsilon=self._epsilon, dtype="float32")
+        soft_target = F.label_smooth(one_hot_target, epsilon=self._epsilon)
         soft_target = paddle.reshape(soft_target, shape=[-1, self._class_dim])
         return soft_target
 
@@ -47,7 +46,7 @@ class Loss(object):
         if self._label_smoothing:
             target = self._labelsmoothing(target)
             input = -F.log_softmax(input, axis=-1)
-            cost = paddle.reduce_sum(target * input, dim=-1)
+            cost = paddle.sum(target * input, axis=-1)
         else:
             cost = F.cross_entropy(input=input, label=target)
         avg_cost = paddle.mean(cost)
diff --git a/ppcls/optimizer/learning_rate.py b/ppcls/optimizer/learning_rate.py
index c74cb2ab8..156697e99 100644
--- a/ppcls/optimizer/learning_rate.py
+++ b/ppcls/optimizer/learning_rate.py
@@ -19,15 +19,15 @@ from __future__ import print_function
 import sys
 import math
 
-from paddle.optimizer.lr_scheduler import LinearLrWarmup
-from paddle.optimizer.lr_scheduler import PiecewiseLR
-from paddle.optimizer.lr_scheduler import CosineAnnealingLR
-from paddle.optimizer.lr_scheduler import ExponentialLR
+from paddle.optimizer.lr import LinearWarmup
+from paddle.optimizer.lr import PiecewiseDecay
+from paddle.optimizer.lr import CosineAnnealingDecay
+from paddle.optimizer.lr import ExponentialDecay
 
 __all__ = ['LearningRateBuilder']
 
 
-class Cosine(CosineAnnealingLR):
+class Cosine(CosineAnnealingDecay):
     """
     Cosine learning rate decay
     lr = 0.05 * (math.cos(epoch * (math.pi / epochs)) + 1)
@@ -46,7 +46,7 @@ class Cosine(CosineAnnealingLR):
         self.update_specified = False
 
 
-class Piecewise(PiecewiseLR):
+class Piecewise(PiecewiseDecay):
     """
     Piecewise learning rate decay
 
@@ -66,7 +66,7 @@ class Piecewise(PiecewiseLR):
         self.update_specified = False
 
 
-class CosineWarmup(LinearLrWarmup):
+class CosineWarmup(LinearWarmup):
     """
     Cosine learning rate decay with warmup
     [0, warmup_epoch): linear warmup
@@ -96,7 +96,7 @@ class CosineWarmup(LinearLrWarmup):
         self.update_specified = False
 
 
-class ExponentialWarmup(LinearLrWarmup):
+class ExponentialWarmup(LinearWarmup):
     """
     Exponential learning rate decay with warmup
     [0, warmup_epoch): linear warmup
@@ -120,7 +120,7 @@ class ExponentialWarmup(LinearLrWarmup):
         warmup_step = warmup_epoch * step_each_epoch
         start_lr = 0.0
         end_lr = lr
-        lr_sch = ExponentialLR(lr, decay_rate)
+        lr_sch = ExponentialDecay(lr, decay_rate)
 
         super(ExponentialWarmup, self).__init__(
             learning_rate=lr_sch,
diff --git a/ppcls/optimizer/optimizer.py b/ppcls/optimizer/optimizer.py
index dec619705..35d4af511 100644
--- a/ppcls/optimizer/optimizer.py
+++ b/ppcls/optimizer/optimizer.py
@@ -19,7 +19,7 @@ from __future__ import print_function
 import sys
 
 import paddle
-import paddle.fluid.regularizer as regularizer
+import paddle.regularizer as regularizer
 
 __all__ = ['OptimizerBuilder']
 
diff --git a/ppcls/utils/check.py b/ppcls/utils/check.py
index 655fb7d32..4790451bd 100644
--- a/ppcls/utils/check.py
+++ b/ppcls/utils/check.py
@@ -20,8 +20,7 @@ import os
 import sys
 
 import paddle
-# TODO: need to be fixed in the future.
-from paddle.fluid import is_compiled_with_cuda
+from paddle import is_compiled_with_cuda
 
 from ppcls.modeling import get_architectures
 from ppcls.modeling import similar_architectures
diff --git a/ppcls/utils/save_load.py b/ppcls/utils/save_load.py
index 11f9a0329..243d12de3 100644
--- a/ppcls/utils/save_load.py
+++ b/ppcls/utils/save_load.py
@@ -23,7 +23,7 @@ import shutil
 import tempfile
 
 import paddle
-from paddle.io import load_program_state
+from paddle.static import load_program_state
 
 from ppcls.utils import logger
 
@@ -65,7 +65,7 @@ def load_dygraph_pretrain(model, path=None, load_static_weights=False):
         model.set_dict(param_state_dict)
         return
 
-    param_state_dict, optim_state_dict = paddle.load(path)
+    param_state_dict = paddle.load(path + ".pdparams")
     model.set_dict(param_state_dict)
     return
 
@@ -106,7 +106,8 @@ def init_model(config, net, optimizer=None):
             "Given dir {}.pdparams not exist.".format(checkpoints)
         assert os.path.exists(checkpoints + ".pdopt"), \
             "Given dir {}.pdopt not exist.".format(checkpoints)
-        para_dict, opti_dict = paddle.load(checkpoints)
+        para_dict = paddle.load(checkpoints + ".pdparams")
+        opti_dict = paddle.load(checkpoints + ".pdopt")
         net.set_dict(para_dict)
         optimizer.set_state_dict(opti_dict)
         logger.info(
@@ -142,8 +143,8 @@ def save_model(net, optimizer, model_path, epoch_id, prefix='ppcls'):
     _mkdir_if_not_exist(model_path)
     model_prefix = os.path.join(model_path, prefix)
 
-    paddle.save(net.state_dict(), model_prefix)
-    paddle.save(optimizer.state_dict(), model_prefix)
+    paddle.save(net.state_dict(), model_prefix + ".pdparams")
+    paddle.save(optimizer.state_dict(), model_prefix + ".pdopt")
     logger.info(
         logger.coloring("Already save model in {}".format(model_path),
                         "HEADER"))
diff --git a/tools/benchmark/benchmark_acc.py b/tools/benchmark/benchmark_acc.py
index 61f025e3e..aa471713a 100644
--- a/tools/benchmark/benchmark_acc.py
+++ b/tools/benchmark/benchmark_acc.py
@@ -20,7 +20,9 @@ sys.path.append(__dir__)
 sys.path.append(os.path.abspath(os.path.join(__dir__, '..')))
 sys.path.append(os.path.abspath(os.path.join(__dir__, '../..')))
 
-from multiprocessing import Process, Manager
+import paddle
+
+from multiprocessing import Manager
 import tools.eval as eval
 from ppcls.utils.model_zoo import _download, _decompress
 from ppcls.utils import logger
@@ -80,18 +82,25 @@ def main(args):
             args.config = model_info["config_path"]
             args.override = [
                 "pretrained_model={}".format(pretrained_path),
-                "VALID.batch_size=128",
+                "VALID.batch_size=256",
                 "VALID.num_workers=16",
                 "load_static_weights=True",
                 "print_interval=100",
             ]
+
             manager = Manager()
             return_dict = manager.dict()
-            p = Process(target=eval.main, args=(args, return_dict))
-            p.start()
-            p.join()
+
+            # A hack method to avoid name conflict.
+            # Multi-process maybe a better method here.
+            # More details can be seen in branch 2.0-beta.
+            # TODO: fluid needs to be removed in the future.
+            with paddle.utils.unique_name.guard():
+                eval.main(args, return_dict)
+
             top1_acc = return_dict.get("top1_acc", 0.0)
-        except:
+        except Exception as e:
+            logger.error(e)
             top1_acc = 0.0
         diff = abs(top1_acc - model_info["top1_acc"])
         if diff > 0.001:
diff --git a/tools/benchmark/benchmark_list.txt b/tools/benchmark/benchmark_list.txt
index f427509e6..66ad980c7 100644
--- a/tools/benchmark/benchmark_list.txt
+++ b/tools/benchmark/benchmark_list.txt
@@ -20,7 +20,7 @@
 0.8077 InceptionV4 configs/Inception/InceptionV4.yaml https://paddle-imagenet-models-name.bj.bcebos.com/InceptionV4_pretrained.tar
 0.8255 ResNeXt101_32x8d_wsl configs/ResNeXt101_wsl/ResNeXt101_32x8d_wsl.yaml https://paddle-imagenet-models-name.bj.bcebos.com/ResNeXt101_32x8d_wsl_pretrained.tar
 0.8035 ResNeSt50_fast_1s1x64d configs/ResNeSt/ResNeSt50_fast_1s1x64d.yaml https://paddle-imagenet-models-name.bj.bcebos.com/ResNeSt50_fast_1s1x64d_pretrained.pdparams
-0.8102 ResNeSt50 configs/ResNeSt/ResNeSt50.yaml https://paddle-imagenet-models-name.bj.bcebos.com/ResNeSt50_pretrained.pdparams
+0.8083 ResNeSt50 configs/ResNeSt/ResNeSt50.yaml https://paddle-imagenet-models-name.bj.bcebos.com/ResNeSt50_pretrained.pdparams
 0.785 RegNetX_4GF configs/RegNet/RegNetX_4GF.yaml https://paddle-imagenet-models-name.bj.bcebos.com/RegNetX_4GF_pretrained.pdparams
 0.7402 GhostNet_x1_0 configs/GhostNet/GhostNet_x1_0.yaml https://paddle-imagenet-models-name.bj.bcebos.com/GhostNet_x1_0_pretrained.pdparams
 0.567 AlexNet configs/AlexNet/AlexNet.yaml https://paddle-imagenet-models-name.bj.bcebos.com/AlexNet_pretrained.tar
diff --git a/tools/eval.py b/tools/eval.py
index f95dcafc9..d83a2874c 100644
--- a/tools/eval.py
+++ b/tools/eval.py
@@ -49,13 +49,11 @@ def parse_args():
 
 def main(args, return_dict={}):
     config = get_config(args.config, overrides=args.override, show=True)
+    config.mode = "valid"
     # assign place
     use_gpu = config.get("use_gpu", True)
-    if use_gpu:
-        gpu_id = ParallelEnv().dev_id
-        place = paddle.CUDAPlace(gpu_id)
-    else:
-        place = paddle.CPUPlace()
+    place = 'gpu:{}'.format(ParallelEnv().dev_id) if use_gpu else 'cpu'
+    place = paddle.set_device(place)
 
     paddle.disable_static(place)
 
diff --git a/tools/export_model.py b/tools/export_model.py
index 969c730d4..87d5ade37 100644
--- a/tools/export_model.py
+++ b/tools/export_model.py
@@ -33,7 +33,8 @@ def parse_args():
     parser = argparse.ArgumentParser()
     parser.add_argument("-m", "--model", type=str)
     parser.add_argument("-p", "--pretrained_model", type=str)
-    parser.add_argument("-o", "--output_path", type=str)
+    parser.add_argument(
+        "-o", "--output_path", type=str, default="./inference/cls_infer")
     parser.add_argument("--class_dim", type=int, default=1000)
     parser.add_argument("--load_static_weights", type=str2bool, default=True)
     # parser.add_argument("--img_size", type=int, default=224)
@@ -61,7 +62,6 @@ class Net(paddle.nn.Layer):
 def main():
     args = parse_args()
 
-    paddle.disable_static()
     net = architectures.__dict__[args.model]
 
     model = Net(net, to_static, args.class_dim)
diff --git a/tools/infer/infer.py b/tools/infer/infer.py
index 12833ac5d..1e8b96422 100644
--- a/tools/infer/infer.py
+++ b/tools/infer/infer.py
@@ -38,6 +38,7 @@ def parse_args():
     parser.add_argument("-i", "--image_file", type=str)
     parser.add_argument("-m", "--model", type=str)
     parser.add_argument("-p", "--pretrained_model", type=str)
+    parser.add_argument("--class_num", type=int, default=1000)
     parser.add_argument("--use_gpu", type=str2bool, default=True)
     parser.add_argument(
         "--load_static_weights",
@@ -114,15 +115,10 @@ def main():
     args = parse_args()
     operators = create_operators()
     # assign the place
-    if args.use_gpu:
-        gpu_id = ParallelEnv().dev_id
-        place = paddle.CUDAPlace(gpu_id)
-    else:
-        place = paddle.CPUPlace()
+    place = 'gpu:{}'.format(ParallelEnv().dev_id) if args.use_gpu else 'cpu'
+    place = paddle.set_device(place)
 
-    paddle.disable_static(place)
-
-    net = architectures.__dict__[args.model]()
+    net = architectures.__dict__[args.model](class_dim=args.class_num)
     load_dygraph_pretrain(net, args.pretrained_model, args.load_static_weights)
     image_list = get_image_list(args.image_file)
     for idx, filename in enumerate(image_list):
@@ -133,8 +129,7 @@ def main():
         outputs = net(data)
         if args.model == "GoogLeNet":
             outputs = outputs[0]
-        else:
-            outputs = F.softmax(outputs)
+        outputs = F.softmax(outputs)
         outputs = outputs.numpy()
         probs = postprocess(outputs)
 
diff --git a/tools/program.py b/tools/program.py
index d6f666804..a55bacefd 100644
--- a/tools/program.py
+++ b/tools/program.py
@@ -141,12 +141,12 @@ def create_metric(out,
     """
     if architecture["name"] == "GoogLeNet":
         assert len(out) == 3, "GoogLeNet should have 3 outputs"
-        softmax_out = out[0]
+        out = out[0]
     else:
         # just need student label to get metrics
         if use_distillation:
             out = out[1]
-        softmax_out = F.softmax(out)
+    softmax_out = F.softmax(out)
 
     fetchs = OrderedDict()
     # set top1 to fetchs
diff --git a/tools/train.py b/tools/train.py
index 7baeaa2b8..343e47de0 100644
--- a/tools/train.py
+++ b/tools/train.py
@@ -55,17 +55,12 @@ def main(args):
     config = get_config(args.config, overrides=args.override, show=True)
     # assign the place
     use_gpu = config.get("use_gpu", True)
-    if use_gpu:
-        gpu_id = ParallelEnv().dev_id
-        place = paddle.CUDAPlace(gpu_id)
-    else:
-        place = paddle.CPUPlace()
+    place = 'gpu:{}'.format(ParallelEnv().dev_id) if use_gpu else 'cpu'
+    place = paddle.set_device(place)
 
     use_data_parallel = int(os.getenv("PADDLE_TRAINERS_NUM", 1)) != 1
     config["use_data_parallel"] = use_data_parallel
 
-    paddle.disable_static(place)
-
     net = program.create_model(config.ARCHITECTURE, config.classes_num)
 
     optimizer, lr_scheduler = program.create_optimizer(