# paddlex.load_model模型加载
## 目录
* [加载模型用于训练](#1)
* [加载模型用于评估](#2)
* [加载模型用于剪裁](#3)
* [加载模型用于量化](#4)
* [加载模型用于预测](#5)
##
加载模型用于训练
我们以图像分类模型`MobileNetV3_small`为例,假设我们之前训练并保存好了模型(训练代码可参考[示例代码](../../../tutorials/train/image_classification/mobilenetv3_small.py)),在这次训练时想加载之前训好的参数(之前训好的模型假设位于`output/mobilenetv3_small/best_model`),有两种实现方式:
方式一: 使用paddlex.load_model
```
import paddlex as pdx
model = pdx.load_model(output/mobilenetv3_small/best_model)
model.train(
num_epochs=10,
train_dataset=train_dataset,
train_batch_size=32,
eval_dataset=eval_dataset,
lr_decay_epochs=[4, 6, 8],
learning_rate=0.01,
save_dir='output/mobilenetv3_small_new',
use_vdl=True)
```
方式二: 指定pretrain_weights
```
import paddlex as pdx
model = pdx.cls.MobileNetV3_small(num_classes=num_classes)
model.train(
pretrain_weights='output/mobilenetv3_small/best_model/model.pdparams',
num_epochs=10,
train_dataset=train_dataset,
train_batch_size=32,
eval_dataset=eval_dataset,
lr_decay_epochs=[4, 6, 8],
learning_rate=0.01,
save_dir='output/mobilenetv3_small_new',
use_vdl=True)
```
**注意**:`paddlex.load_model`只加载模型参数但不会恢复优化器设置,如果想要恢复训练,需定义模型之后在调用`train()`时指定[`resume_checkpoint`](./classification.md#train)为`output/mobilenetv3_small/best_model`。
## 加载模型用于评估
我们以图像分类模型`MobileNetV3_small`为例,假设我们之前训练并保存好了模型(训练代码可参考[示例代码](../../../tutorials/train/image_classification/mobilenetv3_small.py)),在这次想加载之前训好的参数(之前训好的模型假设位于`output/mobilenetv3_small/best_model`)重新评估模型在验证集上的精度,示例代码如下:
```
import paddlex as pdx
from paddlex import transforms as T
eval_transforms = T.Compose([
T.ResizeByShort(short_size=256), T.CenterCrop(crop_size=224), T.Normalize()
])
eval_dataset = pdx.datasets.ImageNet(
data_dir='vegetables_cls',
file_list='vegetables_cls/val_list.txt',
label_list='vegetables_cls/labels.txt',
transforms=eval_transforms)
model = pdx.load_model(output/mobilenetv3_small/best_model)
res = model.evaluate(eval_dataset, batch_size=2)
print(res)
```
`evaluate`参数和返回值格式可参考[evaluate](./classification.md#evaluate)
## 加载模型用于剪裁
模型剪裁时,先使用`paddlex.load_moel`加载模型,而后使用`analyze_sensitivity`、`prune`和`train`三个API完成剪裁:
```
model = pdx.load_model('output/mobilenet_v2/best_model')
model.analyze_sensitivity(
dataset=eval_dataset, save_dir='output/mobilenet_v2/prune')
model.prune(pruned_flops=.2, save_dir=None)
model.train(
num_epochs=10,
train_dataset=train_dataset,
train_batch_size=32,
eval_dataset=eval_dataset,
lr_decay_epochs=[4, 6, 8],
learning_rate=0.025,
pretrain_weights=None,
save_dir='output/mobilenet_v2/prune',
use_vdl=True)
```
具体的代码请参考[模型剪裁示例代码](../../../tutorials/slim/prune/image_classification/)
## 加载模型用于量化
模型量化时,先使用`paddlex.load_moel`加载模型,而后使用`quant_aware_train`完成量化:
```
model = pdx.load_model('output/mobilenet_v2/best_model')
model.quant_aware_train(
num_epochs=5,
train_dataset=train_dataset,
train_batch_size=32,
eval_dataset=eval_dataset,
learning_rate=0.000025,
save_dir='output/mobilenet_v2/quant',
use_vdl=True)
```
具体的代码请参考[模型量化示例代码](../../../tutorials/slim/quantize/)
## 加载模型用于预测
请转至文档[加载模型预测](../prediction.md)查看加载模型用于预测的使用方式。