提交 4ccb6e7e 编写于 作者: D dingjiaweiww

change api name

上级 982ae298
......@@ -5,7 +5,7 @@
"metadata": {},
"source": [
"# 模型保存及加载\n",
"本示例教程演示如何利用MNIST数据集搭建模型,并在模型完成后进行模型保存和加载。在日常训练模型过程中我们会遇到一些突发情况,导致训练过程主动或被动的中断,因此在模型没有完全训练好的情况下,我们需要高频的保存下模型参数,在发生意外时可以快速载入保存的参数继续训练。抑或是模型已经训练好了,我们需要使用训练好的参数进行预测或部署模型上线。面对上述情况,Paddle中提供了保存模型和提取模型的方法,支持从上一次保存状态开始训练,只要我们随时保存训练过程中的模型状态,就不用从初始状态重新训练。\n",
"本教程将基于Paddle高阶API对模型参数的保存和加载进行讲解。在日常训练模型过程中我们会遇到一些突发情况,导致训练过程主动或被动的中断,因此在模型没有完全训练好的情况下,我们需要高频的保存下模型参数,在发生意外时可以快速载入保存的参数继续训练。抑或是模型已经训练好了,我们需要使用训练好的参数进行预测或部署模型上线。面对上述情况,Paddle中提供了保存模型和提取模型的方法,支持从上一次保存状态开始训练,只要我们随时保存训练过程中的模型状态,就不用从初始状态重新训练。\n",
"下面将基于手写数字识别的模型讲解paddle如何保存及加载模型,并恢复训练,网络结构部分的讲解省略。"
]
},
......@@ -19,7 +19,7 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": 1,
"metadata": {},
"outputs": [
{
......@@ -32,8 +32,8 @@
],
"source": [
"import paddle\n",
"import paddle.nn.functional as F\n",
"from paddle.nn import Layer\n",
"from paddle.nn import functional\n",
"from paddle.vision.datasets import MNIST\n",
"from paddle.metric import Accuracy\n",
"from paddle.nn import Conv2d,Pool2D,Linear\n",
......@@ -54,7 +54,7 @@
},
{
"cell_type": "code",
"execution_count": 18,
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
......@@ -71,7 +71,7 @@
},
{
"cell_type": "code",
"execution_count": 19,
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
......@@ -88,18 +88,18 @@
"\n",
" def forward(self, x):\n",
" x = self.conv1(x)\n",
" x = functional.relu(x)\n",
" x = F.relu(x)\n",
" x = self.max_pool1(x)\n",
" x = functional.relu(x)\n",
" x = F.relu(x)\n",
" x = self.conv2(x)\n",
" x = self.max_pool2(x)\n",
" x = paddle.reshape(x, shape=[-1, 16*5*5])\n",
" x = self.linear1(x)\n",
" x = functional.relu(x)\n",
" x = F.relu(x)\n",
" x = self.linear2(x)\n",
" x = functional.relu(x)\n",
" x = F.relu(x)\n",
" x = self.linear3(x)\n",
" x = functional.softmax(x)\n",
" x = F.softmax(x)\n",
" return x"
]
},
......@@ -113,7 +113,7 @@
},
{
"cell_type": "code",
"execution_count": 20,
"execution_count": 6,
"metadata": {},
"outputs": [
{
......@@ -121,20 +121,20 @@
"output_type": "stream",
"text": [
"Epoch 1/1\n",
"step 100/938 - loss: 1.6498 - acc_top1: 0.6281 - acc_top2: 0.7047 - 17ms/step\n",
"step 200/938 - loss: 1.6331 - acc_top1: 0.7491 - acc_top2: 0.8125 - 17ms/step\n",
"step 300/938 - loss: 1.5107 - acc_top1: 0.8120 - acc_top2: 0.8671 - 16ms/step\n",
"step 400/938 - loss: 1.5154 - acc_top1: 0.8449 - acc_top2: 0.8954 - 16ms/step\n",
"step 500/938 - loss: 1.4851 - acc_top1: 0.8681 - acc_top2: 0.9136 - 16ms/step\n",
"step 600/938 - loss: 1.4739 - acc_top1: 0.8833 - acc_top2: 0.9261 - 16ms/step\n",
"step 700/938 - loss: 1.4688 - acc_top1: 0.8946 - acc_top2: 0.9348 - 16ms/step\n",
"step 800/938 - loss: 1.4646 - acc_top1: 0.9035 - acc_top2: 0.9416 - 16ms/step\n",
"step 900/938 - loss: 1.5141 - acc_top1: 0.9108 - acc_top2: 0.9471 - 16ms/step\n",
"step 938/938 - loss: 1.4745 - acc_top1: 0.9132 - acc_top2: 0.9489 - 16ms/step\n",
"step 100/938 - loss: 1.6444 - acc_top1: 0.5708 - acc_top2: 0.6325 - 16ms/step\n",
"step 200/938 - loss: 1.7200 - acc_top1: 0.6946 - acc_top2: 0.7496 - 16ms/step\n",
"step 300/938 - loss: 1.5864 - acc_top1: 0.7472 - acc_top2: 0.7947 - 16ms/step\n",
"step 400/938 - loss: 1.5369 - acc_top1: 0.7743 - acc_top2: 0.8161 - 16ms/step\n",
"step 500/938 - loss: 1.6392 - acc_top1: 0.7935 - acc_top2: 0.8309 - 16ms/step\n",
"step 600/938 - loss: 1.5316 - acc_top1: 0.8066 - acc_top2: 0.8411 - 16ms/step\n",
"step 700/938 - loss: 1.5870 - acc_top1: 0.8155 - acc_top2: 0.8478 - 16ms/step\n",
"step 800/938 - loss: 1.6136 - acc_top1: 0.8230 - acc_top2: 0.8532 - 16ms/step\n",
"step 900/938 - loss: 1.5605 - acc_top1: 0.8290 - acc_top2: 0.8574 - 16ms/step\n",
"step 938/938 - loss: 1.4618 - acc_top1: 0.8312 - acc_top2: 0.8591 - 16ms/step\n",
"save checkpoint at /Users/dingjiawei/Desktop/教程/mnist_checkpoint/0\n",
"Eval begin...\n",
"step 100/157 - loss: 1.4721 - acc_top1: 0.9625 - acc_top2: 0.9897 - 5ms/step\n",
"step 157/157 - loss: 1.4613 - acc_top1: 0.9701 - acc_top2: 0.9919 - 5ms/step\n",
"step 100/157 - loss: 1.5209 - acc_top1: 0.8700 - acc_top2: 0.8912 - 5ms/step\n",
"step 157/157 - loss: 1.5226 - acc_top1: 0.8769 - acc_top2: 0.8939 - 5ms/step\n",
"Eval samples: 10000\n",
"save checkpoint at /Users/dingjiawei/Desktop/教程/mnist_checkpoint/final\n"
]
......@@ -164,33 +164,33 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## 保存模型\n",
"## 保存模型参数\n",
"\n",
"目前Paddle框架有三种保存与加载模型的体系,分别是:\n",
"#### paddle 高阶API-模型保存与加载\n",
"目前Paddle框架有三种保存模型参数的体系,分别是:\n",
"#### paddle 高阶API-模型参数保存\n",
" * paddle.Model.fit\n",
" * paddle.Model.save\n",
"#### paddle 基础框架-动态图-模型保存与加载\n",
" * paddle.fluid.dygraph.save_dygraph\n",
"#### paddle 基础框架-静态图-模型保存与加载\n",
" * fluid.io.save_vars\n",
" * fluid.io.save_params\n",
" * fluid.io.save_persistables\n",
" * fluid.io.save_inference_model"
"#### paddle 基础框架-动态图-模型参数保存 \n",
" * paddle.save\n",
"#### paddle 基础框架-静态图-模型参数保存 \n",
" * paddle.io.save\n",
" * paddle.io.save_inference_model\n",
"\n",
"下面将基于高阶API对模型保存与加载的方法进行讲解。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"后面将对paddle高阶API的模型保存与加载的方法进行讲解。\n",
"\n",
"#### 方法一:\n",
"* paddle.Model.fit(train_data, epochs, batch_size, save_dir, log_freq) <br><br>\n",
"在使用model.fit函数进行网络循环训练时,在save_dir参数中指定保存模型的路径,save_freq指定写入频率,即可同时实现模型的训练和保存。mode.fit()只能保存模型参数,不能保存优化器参数,每个epoch结束只会生成一个.pdparams文件。可以边训练边保存,每次epoch结束会实时生成一个.pdparams文件。 \n",
"\n",
"#### 方法二:\n",
"* paddle.Model.save(path) <br><br>\n",
"model.save(path)方法可以保存网络参数和优化器参数,每个epoch会生成两种文件 0.pdparams,0.pdopt,分别存储了模型参数和优化器参数,但是只会在整个模型训练完成后才会生成参数文件,path的格式为'dirname/file_prefix' 或 'file_prefix',其中dirname指定路径名称,file_prefix 指定参数文件的名称。"
"* paddle.Model.save(self, path, training=True) <br><br>\n",
"model.save(path)方法可以保存模型结构、网络参数和优化器参数,参数training=true的使用场景是在训练过程中,此时会保存网络参数和优化器参数。每个epoch生成两种文件 0.pdparams,0.pdopt,分别存储了模型参数和优化器参数,但是只会在整个模型训练完成后才会生成包含所有epoch参数的文件,path的格式为'dirname/file_prefix' 或 'file_prefix',其中dirname指定路径名称,file_prefix 指定参数文件的名称。当training=false的时候,代表已经训练结束,此时存储的是预测模型结构和网络参数。"
]
},
{
......@@ -225,22 +225,20 @@
"## 加载模型参数\n",
"\n",
"当恢复训练状态时,需要加载模型数据,此时我们可以使用加载函数从存储模型状态和优化器状态的文件中载入模型参数和优化器参数,如果不需要恢复优化器,则不必使用优化器状态文件。\n",
"#### 高阶API-模型加载\n",
" * paddle.Model.load()\n",
"#### paddle 基础框架-动态图-模型加载\n",
" * paddle.fluid.dygraph.load_dygraph\n",
"#### paddle 基础框架-静态图-模型加载\n",
" * fluid.io.load_vars \n",
" * fluid.io.load_params \n",
" * fluid.io.load_persistables\n",
" * fluid.io.load_inference_model"
"#### 高阶API-模型参数加载\n",
" * paddle.Model.load\n",
"#### paddle 基础框架-动态图-模型参数加载\n",
" * paddle.load\n",
"#### paddle 基础框架-静态图-模型参数加载\n",
" * paddle.io.load \n",
" * paddle.io.load_inference_model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"下面将对高阶API的模型加载方法进行讲解\n",
"下面将对高阶API的模型参数加载方法进行讲解\n",
"* model.load(self, path, skip_mismatch=False, reset_optimizer=False)<br><br>\n",
"model.load能够同时加载模型和优化器参数。通过reset_optimizer参数来指定是否需要恢复优化器参数,若reset_optimizer参数为True,则重新初始化优化器参数,若reset_optimizer参数为False,则从路径中恢复优化器参数。"
]
......@@ -274,7 +272,7 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": 9,
"metadata": {},
"outputs": [
{
......@@ -282,44 +280,42 @@
"output_type": "stream",
"text": [
"Epoch 1/2\n",
"step 100/938 - loss: 1.4618 - acc_top1: 0.9709 - acc_top2: 0.9917 - 16ms/step\n",
"step 200/938 - loss: 1.5390 - acc_top1: 0.9698 - acc_top2: 0.9921 - 16ms/step\n",
"step 300/938 - loss: 1.4938 - acc_top1: 0.9695 - acc_top2: 0.9911 - 16ms/step\n",
"step 400/938 - loss: 1.4946 - acc_top1: 0.9698 - acc_top2: 0.9914 - 16ms/step\n",
"step 500/938 - loss: 1.4746 - acc_top1: 0.9709 - acc_top2: 0.9918 - 16ms/step\n",
"step 600/938 - loss: 1.4788 - acc_top1: 0.9711 - acc_top2: 0.9917 - 16ms/step\n",
"step 700/938 - loss: 1.4770 - acc_top1: 0.9717 - acc_top2: 0.9920 - 15ms/step\n",
"step 800/938 - loss: 1.4848 - acc_top1: 0.9721 - acc_top2: 0.9920 - 15ms/step\n",
"step 900/938 - loss: 1.5047 - acc_top1: 0.9730 - acc_top2: 0.9920 - 15ms/step\n",
"step 938/938 - loss: 1.4612 - acc_top1: 0.9731 - acc_top2: 0.9921 - 15ms/step\n",
"step 100/938 - loss: 1.4777 - acc_top1: 0.9806 - acc_top2: 0.9962 - 16ms/step\n",
"step 200/938 - loss: 1.5163 - acc_top1: 0.9795 - acc_top2: 0.9962 - 16ms/step\n",
"step 300/938 - loss: 1.4872 - acc_top1: 0.9796 - acc_top2: 0.9957 - 16ms/step\n",
"step 400/938 - loss: 1.4717 - acc_top1: 0.9795 - acc_top2: 0.9955 - 16ms/step\n",
"step 500/938 - loss: 1.4778 - acc_top1: 0.9794 - acc_top2: 0.9955 - 16ms/step\n",
"step 600/938 - loss: 1.4653 - acc_top1: 0.9798 - acc_top2: 0.9955 - 16ms/step\n",
"step 700/938 - loss: 1.4768 - acc_top1: 0.9799 - acc_top2: 0.9954 - 16ms/step\n",
"step 800/938 - loss: 1.4771 - acc_top1: 0.9804 - acc_top2: 0.9954 - 16ms/step\n",
"step 900/938 - loss: 1.4864 - acc_top1: 0.9807 - acc_top2: 0.9954 - 16ms/step\n",
"step 938/938 - loss: 1.4612 - acc_top1: 0.9807 - acc_top2: 0.9955 - 16ms/step\n",
"Eval begin...\n",
"step 100/157 - loss: 1.4612 - acc_top1: 0.9733 - acc_top2: 0.9938 - 5ms/step\n",
"step 157/157 - loss: 1.4612 - acc_top1: 0.9792 - acc_top2: 0.9952 - 5ms/step\n",
"step 100/157 - loss: 1.4612 - acc_top1: 0.9762 - acc_top2: 0.9952 - 6ms/step\n",
"step 157/157 - loss: 1.4612 - acc_top1: 0.9807 - acc_top2: 0.9959 - 6ms/step\n",
"Eval samples: 10000\n",
"Epoch 2/2\n",
"step 100/938 - loss: 1.4706 - acc_top1: 0.9778 - acc_top2: 0.9938 - 15ms/step\n",
"step 200/938 - loss: 1.4819 - acc_top1: 0.9777 - acc_top2: 0.9940 - 15ms/step\n",
"step 300/938 - loss: 1.4612 - acc_top1: 0.9778 - acc_top2: 0.9936 - 15ms/step\n",
"step 400/938 - loss: 1.4911 - acc_top1: 0.9786 - acc_top2: 0.9940 - 15ms/step\n",
"step 500/938 - loss: 1.4938 - acc_top1: 0.9785 - acc_top2: 0.9940 - 16ms/step\n",
"step 600/938 - loss: 1.4769 - acc_top1: 0.9783 - acc_top2: 0.9941 - 16ms/step\n",
"step 700/938 - loss: 1.4612 - acc_top1: 0.9785 - acc_top2: 0.9942 - 16ms/step\n",
"step 800/938 - loss: 1.4763 - acc_top1: 0.9784 - acc_top2: 0.9942 - 16ms/step\n",
"step 900/938 - loss: 1.4763 - acc_top1: 0.9785 - acc_top2: 0.9942 - 16ms/step\n",
"step 938/938 - loss: 1.4619 - acc_top1: 0.9787 - acc_top2: 0.9943 - 16ms/step\n",
"step 100/938 - loss: 1.4696 - acc_top1: 0.9812 - acc_top2: 0.9942 - 16ms/step\n",
"step 200/938 - loss: 1.4619 - acc_top1: 0.9827 - acc_top2: 0.9956 - 16ms/step\n",
"step 300/938 - loss: 1.4616 - acc_top1: 0.9826 - acc_top2: 0.9955 - 16ms/step\n",
"step 400/938 - loss: 1.4766 - acc_top1: 0.9824 - acc_top2: 0.9954 - 16ms/step\n",
"step 500/938 - loss: 1.4770 - acc_top1: 0.9830 - acc_top2: 0.9953 - 16ms/step\n",
"step 600/938 - loss: 1.4924 - acc_top1: 0.9831 - acc_top2: 0.9955 - 16ms/step\n",
"step 700/938 - loss: 1.4623 - acc_top1: 0.9837 - acc_top2: 0.9959 - 16ms/step\n",
"step 800/938 - loss: 1.4768 - acc_top1: 0.9839 - acc_top2: 0.9960 - 16ms/step\n",
"step 900/938 - loss: 1.4768 - acc_top1: 0.9838 - acc_top2: 0.9960 - 16ms/step\n",
"step 938/938 - loss: 1.4879 - acc_top1: 0.9838 - acc_top2: 0.9960 - 16ms/step\n",
"Eval begin...\n",
"step 100/157 - loss: 1.4612 - acc_top1: 0.9773 - acc_top2: 0.9950 - 6ms/step\n",
"step 157/157 - loss: 1.4612 - acc_top1: 0.9815 - acc_top2: 0.9959 - 6ms/step\n",
"step 100/157 - loss: 1.4612 - acc_top1: 0.9825 - acc_top2: 0.9956 - 6ms/step\n",
"step 157/157 - loss: 1.4701 - acc_top1: 0.9854 - acc_top2: 0.9965 - 6ms/step\n",
"Eval samples: 10000\n"
]
}
],
"source": [
"import paddle\n",
"from paddle.nn import functional\n",
"from paddle.vision.datasets import MNIST\n",
"from paddle.metric import Accuracy\n",
"from paddle.nn import Conv2d,Pool2D,Linear\n",
"from paddle.static import InputSpec\n",
"#\n",
"#\n",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册