diff --git a/paddle2.0_docs/getting_started/getting_started.ipynb b/paddle2.0_docs/getting_started/getting_started.ipynb index 6e59d468..470de24f 100644 --- a/paddle2.0_docs/getting_started/getting_started.ipynb +++ b/paddle2.0_docs/getting_started/getting_started.ipynb @@ -31,22 +31,21 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "2.0.0-beta0\n" + "2.0.0-rc0\n" ] } ], "source": [ "import paddle\n", "\n", - "print(paddle.__version__)\n", - "paddle.disable_static()" + "print(paddle.__version__)" ] }, { @@ -69,12 +68,12 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "train_dataset = paddle.vision.datasets.MNIST(mode='train', chw_format=False)\n", - "val_dataset = paddle.vision.datasets.MNIST(mode='test', chw_format=False)" + "train_dataset = paddle.vision.datasets.MNIST(mode='train')\n", + "val_dataset = paddle.vision.datasets.MNIST(mode='test')" ] }, { @@ -88,11 +87,12 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "mnist = paddle.nn.Sequential(\n", + " paddle.nn.Flatten(),\n", " paddle.nn.Linear(784, 512),\n", " paddle.nn.ReLU(),\n", " paddle.nn.Dropout(0.2),\n", @@ -111,7 +111,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, "metadata": { "scrolled": true }, @@ -121,22 +121,19 @@ "output_type": "stream", "text": [ "Epoch 1/5\n", - "step 1875/1875 [==============================] - loss: 0.2250 - acc: 0.9025 - 9ms/step \n", + "step 1875/1875 [==============================] - loss: 0.3993 - acc: 0.8775 - 7ms/step \n", "Epoch 2/5\n", - "step 1875/1875 [==============================] - loss: 0.0969 - acc: 0.9462 - 13ms/step \n", + "step 1875/1875 [==============================] - loss: 0.2884 - acc: 0.9061 - 10ms/step \n", "Epoch 3/5\n", - "step 1875/1875 [==============================] - loss: 0.1035 - acc: 0.9550 - 12ms/step \n", + "step 1875/1875 [==============================] - loss: 0.2867 - acc: 0.9131 - 12ms/step \n", "Epoch 4/5\n", - "step 1875/1875 [==============================] - loss: 0.0316 - acc: 0.9603 - 12ms/step \n", + "step 1875/1875 [==============================] - loss: 0.1562 - acc: 0.9171 - 12ms/step \n", "Epoch 5/5\n", - "step 1875/1875 [==============================] - loss: 0.1771 - acc: 0.9637 - 12ms/step \n" + "step 1875/1875 [==============================] - loss: 0.2551 - acc: 0.9204 - 18ms/step \n" ] } ], "source": [ - "# 开启动态图模式\n", - "paddle.disable_static() \n", - "\n", "# 预计模型结构生成模型实例,便于进行后续的配置、训练和验证\n", "model = paddle.Model(mnist) \n", "\n", @@ -163,16 +160,16 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'loss': [3.576278e-07], 'acc': 0.9666}" + "{'loss': [0.0], 'acc': 0.9457}" ] }, - "execution_count": 37, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -187,9 +184,7 @@ "source": [ "那么初步训练得到的模型效果在97%附近,我们可以进一步通过调整其中的训练参数来提升我们的模型精度。\n", "\n", - "至此我们可以知道如何通过飞桨的几个简单API来快速完成一个深度学习任务,大家可以针对自己的需求来更换其中的代码,如果需要使用自己的数据集,那么可以更换数据集加载部分程序,如果需要替换模型,那么可以更改模型代码实现等等。我们也为大家提供了很多其他场景的示例代码来教大家如何使用我们的飞桨API,大家可以查看下面的链接或通过页面导航来查看自己感兴趣的部分。\n", - "\n", - "TODO:补充其他示例教程的快速链接。" + "至此我们可以知道如何通过飞桨的几个简单API来快速完成一个深度学习任务,大家可以针对自己的需求来更换其中的代码,如果需要使用自己的数据集,那么可以更换数据集加载部分程序,如果需要替换模型,那么可以更改模型代码实现等等。我们也为大家提供了很多其他场景的示例代码来教大家如何使用我们的飞桨API,大家可以查看下面的链接或通过页面导航来查看自己感兴趣的部分。" ] } ], diff --git a/paddle2.0_docs/high_level_api/high_level_api.ipynb b/paddle2.0_docs/high_level_api/high_level_api.ipynb index a71c4a49..8fc85432 100644 --- a/paddle2.0_docs/high_level_api/high_level_api.ipynb +++ b/paddle2.0_docs/high_level_api/high_level_api.ipynb @@ -8,7 +8,7 @@ "\n", "## 1. 简介\n", "\n", - "飞桨2.0全新推出高层API,是对飞桨API的进一步封装与升级,提供了更加简洁易用的API,进一步提升了飞桨的易学易用性,并增强飞桨的功能。\n", + "飞桨框架2.0全新推出高层API,是对飞桨API的进一步封装与升级,提供了更加简洁易用的API,进一步提升了飞桨的易学易用性,并增强飞桨的功能。\n", "\n", "飞桨高层API面向从深度学习小白到资深开发者的所有人群,对于AI初学者来说,使用高层API可以简单快速的构建深度学习项目,对于资深开发者来说,可以快速完成算法迭代。\n", "\n", @@ -36,16 +36,16 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'2.0.0-beta0'" + "'2.0.0-rc0'" ] }, - "execution_count": 2, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -55,9 +55,6 @@ "import paddle.vision as vision\n", "import paddle.text as text\n", "\n", - "# 启动动态图训练模式\n", - "paddle.disable_static()\n", - "\n", "paddle.__version__" ] }, @@ -93,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "tags": [] }, @@ -103,7 +100,7 @@ "output_type": "stream", "text": [ "视觉相关数据集: ['DatasetFolder', 'ImageFolder', 'MNIST', 'Flowers', 'Cifar10', 'Cifar100', 'VOC2012']\n", - "自然语言相关数据集: ['Conll05st', 'Imdb', 'Imikolov', 'Movielens', 'MovieReviews', 'UCIHousing', 'WMT14', 'WMT16']\n" + "自然语言相关数据集: ['Conll05st', 'Imdb', 'Imikolov', 'Movielens', 'UCIHousing', 'WMT14', 'WMT16']\n" ] } ], @@ -121,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -143,7 +140,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "tags": [] }, @@ -214,11 +211,11 @@ "val_dataset_2 = MyDataset(mode='test')\n", "\n", "print('=============train dataset=============')\n", - "for data, label in train_dataset:\n", + "for data, label in train_dataset_2:\n", " print(data, label)\n", "\n", "print('=============evaluation dataset=============')\n", - "for data, label in val_dataset:\n", + "for data, label in val_dataset_2:\n", " print(data, label)" ] }, @@ -235,7 +232,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -260,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -319,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -343,7 +340,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -383,7 +380,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -396,7 +393,8 @@ "\n", "\n", "# 场景2:静态图模式\n", - "\n", + "# paddle.enable_static()\n", + "# paddle.set_device('gpu')\n", "# input = paddle.static.InputSpec([None, 1, 28, 28], dtype='float32')\n", "# label = paddle.static.InputSpec([None, 1], dtype='int8')\n", "# model = paddle.Model(mnist, input, label)" @@ -413,31 +411,31 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "--------------------------------------------------------------------------------\n", - " Layer (type) Input Shape Output Shape Param #\n", - "================================================================================\n", - " Flatten-57509 [-1, 1, 28, 28] [-1, 784] 0\n", - " Linear-7 [-1, 784] [-1, 512] 401,920\n", - " ReLU-4 [-1, 512] [-1, 512] 0\n", - " Dropout-4 [-1, 512] [-1, 512] 0\n", - " Linear-8 [-1, 512] [-1, 10] 5,130\n", - "================================================================================\n", + "---------------------------------------------------------------------------\n", + " Layer (type) Input Shape Output Shape Param # \n", + "===========================================================================\n", + " Flatten-1 [[1, 28, 28]] [1, 784] 0 \n", + " Linear-1 [[1, 784]] [1, 512] 401,920 \n", + " ReLU-1 [[1, 512]] [1, 512] 0 \n", + " Dropout-1 [[1, 512]] [1, 512] 0 \n", + " Linear-2 [[1, 512]] [1, 10] 5,130 \n", + "===========================================================================\n", "Total params: 407,050\n", "Trainable params: 407,050\n", "Non-trainable params: 0\n", - "--------------------------------------------------------------------------------\n", + "---------------------------------------------------------------------------\n", "Input size (MB): 0.00\n", "Forward/backward pass size (MB): 0.02\n", "Params size (MB): 1.55\n", "Estimated Total Size (MB): 1.57\n", - "--------------------------------------------------------------------------------\n", + "---------------------------------------------------------------------------\n", "\n" ] }, @@ -447,7 +445,7 @@ "{'total_params': 407050, 'trainable_params': 407050}" ] }, - "execution_count": 33, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -465,31 +463,31 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "--------------------------------------------------------------------------------\n", - " Layer (type) Input Shape Output Shape Param #\n", - "================================================================================\n", - " Flatten-57508 [-1, 1, 28, 28] [-1, 784] 0\n", - " Linear-5 [-1, 784] [-1, 512] 401,920\n", - " ReLU-3 [-1, 512] [-1, 512] 0\n", - " Dropout-3 [-1, 512] [-1, 512] 0\n", - " Linear-6 [-1, 512] [-1, 10] 5,130\n", - "================================================================================\n", + "---------------------------------------------------------------------------\n", + " Layer (type) Input Shape Output Shape Param # \n", + "===========================================================================\n", + " Flatten-1 [[1, 28, 28]] [1, 784] 0 \n", + " Linear-1 [[1, 784]] [1, 512] 401,920 \n", + " ReLU-1 [[1, 512]] [1, 512] 0 \n", + " Dropout-1 [[1, 512]] [1, 512] 0 \n", + " Linear-2 [[1, 512]] [1, 10] 5,130 \n", + "===========================================================================\n", "Total params: 407,050\n", "Trainable params: 407,050\n", "Non-trainable params: 0\n", - "--------------------------------------------------------------------------------\n", + "---------------------------------------------------------------------------\n", "Input size (MB): 0.00\n", "Forward/backward pass size (MB): 0.02\n", "Params size (MB): 1.55\n", "Estimated Total Size (MB): 1.57\n", - "--------------------------------------------------------------------------------\n", + "---------------------------------------------------------------------------\n", "\n" ] }, @@ -499,7 +497,7 @@ "{'total_params': 407050, 'trainable_params': 407050}" ] }, - "execution_count": 34, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -529,7 +527,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -548,7 +546,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -556,25 +554,25 @@ "output_type": "stream", "text": [ "Epoch 1/10\n", - "step 1875/1875 [==============================] - loss: 0.1600 - acc: 0.9022 - 10ms/step \n", + "step 1875/1875 [==============================] - loss: 0.4830 - acc: 0.9358 - 11ms/step \n", "Epoch 2/10\n", - "step 1875/1875 [==============================] - loss: 0.0455 - acc: 0.9461 - 12ms/step \n", + "step 1875/1875 [==============================] - loss: 0.1842 - acc: 0.9369 - 12ms/step \n", "Epoch 3/10\n", - "step 1875/1875 [==============================] - loss: 0.1429 - acc: 0.9544 - 19ms/step \n", + "step 1875/1875 [==============================] - loss: 0.0644 - acc: 0.9402 - 11ms/step \n", "Epoch 4/10\n", - "step 1875/1875 [==============================] - loss: 0.0197 - acc: 0.9601 - 22ms/step \n", + "step 1875/1875 [==============================] - loss: 0.0682 - acc: 0.9379 - 11ms/step \n", "Epoch 5/10\n", - "step 1875/1875 [==============================] - loss: 0.1762 - acc: 0.9644 - 25ms/step \n", + "step 1875/1875 [==============================] - loss: 0.6575 - acc: 0.9416 - 11ms/step \n", "Epoch 6/10\n", - "step 1875/1875 [==============================] - loss: 0.1304 - acc: 0.9667 - 22ms/step \n", + "step 1875/1875 [==============================] - loss: 0.1236 - acc: 0.9431 - 11ms/step \n", "Epoch 7/10\n", - "step 1875/1875 [==============================] - loss: 0.0133 - acc: 0.9682 - 22ms/step \n", + "step 1875/1875 [==============================] - loss: 0.1304 - acc: 0.9432 - 11ms/step \n", "Epoch 8/10\n", - "step 1875/1875 [==============================] - loss: 0.0097 - acc: 0.9705 - 19ms/step \n", + "step 1875/1875 [==============================] - loss: 0.0709 - acc: 0.9446 - 11ms/step \n", "Epoch 9/10\n", - "step 1875/1875 [==============================] - loss: 3.1264e-04 - acc: 0.9716 - 23ms/step \n", + "step 1875/1875 [==============================] - loss: 0.0308 - acc: 0.9427 - 11ms/step \n", "Epoch 10/10\n", - "step 1875/1875 [==============================] - loss: 0.0767 - acc: 0.9729 - 13ms/step \n" + "step 1875/1875 [==============================] - loss: 0.0700 - acc: 0.9462 - 11ms/step \n" ] } ], @@ -630,7 +628,6 @@ } ], "source": [ - "\n", "# 使用GPU训练\n", "paddle.set_device('gpu')\n", "\n", diff --git a/paddle2.0_docs/image_segmentation/pets_image_segmentation_U_Net_like.ipynb b/paddle2.0_docs/image_segmentation/pets_image_segmentation_U_Net_like.ipynb index e7311446..a28473c9 100644 --- a/paddle2.0_docs/image_segmentation/pets_image_segmentation_U_Net_like.ipynb +++ b/paddle2.0_docs/image_segmentation/pets_image_segmentation_U_Net_like.ipynb @@ -9,7 +9,7 @@ "source": [ "# 基于U-Net卷积神经网络实现宠物图像分割\n", "\n", - "本示例教程当前是基于2.0-beta版本Paddle做的案例实现,未来会随着2.0的系列版本发布进行升级。" + "本示例教程当前是基于2.0-RC版本Paddle做的案例实现,未来会随着2.0的系列版本发布进行升级。" ] }, { @@ -34,16 +34,16 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'2.0.0-beta0'" + "'2.0.0-rc0'" ] }, - "execution_count": 1, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -58,9 +58,7 @@ "import paddle\n", "from paddle.nn import functional as F\n", "\n", - "device = paddle.set_device('gpu')\n", - "paddle.disable_static(device)\n", - "\n", + "paddle.set_device('gpu')\n", "paddle.__version__" ] }, @@ -108,20 +106,7 @@ "outputId": "3985783f-7166-4afa-f511-16427b3e2a71", "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " % Total % Received % Xferd Average Speed Time Time Time Current\n", - " Dload Upload Total Spent Left Speed\n", - "100 755M 100 755M 0 0 1707k 0 0:07:32 0:07:32 --:--:-- 2865k0 0:12:48 524k 0 0:13:34 0:02:41 0:10:53 668k 0 0:12:45 0:03:06 0:09:39 1702k 0 1221k 0 0:10:33 0:03:25 0:07:08 3108k37 282M 0 0 1243k 0 0:10:21 0:03:52 0:06:29 719k0:05:53 566k0 1237k 0 0:10:25 0:04:43 0:05:42 1593k 0 0:09:46 0:05:28 0:04:18 2952k 1467k 0 0:08:47 0:06:43 0:02:04 1711k\n", - " % Total % Received % Xferd Average Speed Time Time Time Current\n", - " Dload Upload Total Spent Left Speed\n", - "100 18.2M 100 18.2M 0 0 1602k 0 0:00:11 0:00:11 --:--:-- 3226k\n" - ] - } - ], + "outputs": [], "source": [ "!curl -O http://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz\n", "!curl -O http://www.robots.ox.ac.uk/~vgg/data/pets/data/annotations.tar.gz\n", @@ -176,7 +161,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -238,7 +223,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -250,7 +235,7 @@ "\n", "class ImgTranspose(object):\n", " \"\"\"\n", - " 图像预处理工具,用于将Mask图像进行升维(160, 160) => (160, 160, 1),\n", + " 图像预处理工具,可用于图像升维,\n", " 并对图像的维度进行转换从HWC变为CHW\n", " \"\"\"\n", " def __init__(self, fmt):\n", @@ -361,14 +346,10 @@ " \n", " # 加载Label图像\n", " label_image = self._load_img(self.label_images[idx], color_mode=\"grayscale\") \n", - " y = np.array(label_image, dtype='uint8') \n", - "\n", - " # 图像预处理\n", - " # Label图像是二维的数组(size, size),升维到(size, size, 1)后才能用于最后loss计算\n", - " y = self.transforms(y)\n", + " y = np.array(label_image, dtype='int64') \n", " \n", - " # 返回img, label,转换为需要的格式\n", - " return x, y.astype('int64')\n", + " # 返回image, label\n", + " return x, y\n", " \n", " def __len__(self):\n", " \"\"\"\n", @@ -391,7 +372,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -435,7 +416,7 @@ "\n", "plt.subplot(1,2,2), \n", "plt.title('Label')\n", - "plt.imshow(np.squeeze(label, axis=0).astype('uint8'), cmap='gray')\n", + "plt.imshow(label.astype('uint8'), cmap='gray')\n", "plt.axis('off')\n", "\n", "plt.show()" @@ -460,14 +441,14 @@ "id": "wi-ouGZL--BN" }, "source": [ - "### 4.1 定义SeparableConv2d接口\n", + "### 4.1 定义SeparableConv2D接口\n", "\n", - "我们为了减少卷积操作中的训练参数来提升性能,是继承paddle.nn.Layer自定义了一个SeparableConv2d Layer类,整个过程是把`filter_size * filter_size * num_filters`的Conv2d操作拆解为两个子Conv2d,先对输入数据的每个通道使用`filter_size * filter_size * 1`的卷积核进行计算,输入输出通道数目相同,之后在使用`1 * 1 * num_filters`的卷积核计算。" + "我们为了减少卷积操作中的训练参数来提升性能,是继承paddle.nn.Layer自定义了一个SeparableConv2D Layer类,整个过程是把`filter_size * filter_size * num_filters`的Conv2D操作拆解为两个子Conv2D,先对输入数据的每个通道使用`filter_size * filter_size * 1`的卷积核进行计算,输入输出通道数目相同,之后在使用`1 * 1 * num_filters`的卷积核计算。" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": { "colab": {}, "colab_type": "code", @@ -475,7 +456,7 @@ }, "outputs": [], "source": [ - "class SeparableConv2d(paddle.nn.Layer):\n", + "class SeparableConv2D(paddle.nn.Layer):\n", " def __init__(self, \n", " in_channels, \n", " out_channels, \n", @@ -487,9 +468,9 @@ " weight_attr=None, \n", " bias_attr=None, \n", " data_format=\"NCHW\"):\n", - " super(SeparableConv2d, self).__init__()\n", + " super(SeparableConv2D, self).__init__()\n", " # 第一次卷积操作没有偏置参数\n", - " self.conv_1 = paddle.nn.Conv2d(in_channels, \n", + " self.conv_1 = paddle.nn.Conv2D(in_channels, \n", " in_channels, \n", " kernel_size, \n", " stride=stride,\n", @@ -499,7 +480,7 @@ " weight_attr=weight_attr, \n", " bias_attr=False, \n", " data_format=data_format)\n", - " self.pointwise = paddle.nn.Conv2d(in_channels, \n", + " self.pointwise = paddle.nn.Conv2D(in_channels, \n", " out_channels, \n", " 1, \n", " stride=1, \n", @@ -530,7 +511,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": { "colab": {}, "colab_type": "code", @@ -543,17 +524,17 @@ " super(Encoder, self).__init__()\n", " \n", " self.relu = paddle.nn.ReLU()\n", - " self.separable_conv_01 = SeparableConv2d(in_channels, \n", + " self.separable_conv_01 = SeparableConv2D(in_channels, \n", " out_channels, \n", " kernel_size=3, \n", " padding='same')\n", - " self.bn = paddle.nn.BatchNorm2d(out_channels)\n", - " self.separable_conv_02 = SeparableConv2d(out_channels, \n", + " self.bn = paddle.nn.BatchNorm2D(out_channels)\n", + " self.separable_conv_02 = SeparableConv2D(out_channels, \n", " out_channels, \n", " kernel_size=3, \n", " padding='same')\n", - " self.pool = paddle.nn.MaxPool2d(kernel_size=3, stride=2, padding=1)\n", - " self.residual_conv = paddle.nn.Conv2d(in_channels, \n", + " self.pool = paddle.nn.MaxPool2D(kernel_size=3, stride=2, padding=1)\n", + " self.residual_conv = paddle.nn.Conv2D(in_channels, \n", " out_channels, \n", " kernel_size=1, \n", " stride=2, \n", @@ -590,7 +571,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": { "colab": {}, "colab_type": "code", @@ -603,17 +584,17 @@ " super(Decoder, self).__init__()\n", "\n", " self.relu = paddle.nn.ReLU()\n", - " self.conv_transpose_01 = paddle.nn.ConvTranspose2d(in_channels, \n", + " self.conv_transpose_01 = paddle.nn.Conv2DTranspose(in_channels, \n", " out_channels, \n", " kernel_size=3, \n", " padding='same')\n", - " self.conv_transpose_02 = paddle.nn.ConvTranspose2d(out_channels, \n", + " self.conv_transpose_02 = paddle.nn.Conv2DTranspose(out_channels, \n", " out_channels, \n", " kernel_size=3, \n", " padding='same')\n", - " self.bn = paddle.nn.BatchNorm2d(out_channels)\n", + " self.bn = paddle.nn.BatchNorm2D(out_channels)\n", " self.upsample = paddle.nn.Upsample(scale_factor=2.0)\n", - " self.residual_conv = paddle.nn.Conv2d(in_channels, \n", + " self.residual_conv = paddle.nn.Conv2D(in_channels, \n", " out_channels, \n", " kernel_size=1, \n", " padding='same')\n", @@ -651,7 +632,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": { "colab": {}, "colab_type": "code", @@ -663,11 +644,11 @@ " def __init__(self, num_classes):\n", " super(PetNet, self).__init__()\n", "\n", - " self.conv_1 = paddle.nn.Conv2d(3, 32, \n", + " self.conv_1 = paddle.nn.Conv2D(3, 32, \n", " kernel_size=3,\n", " stride=2,\n", " padding='same')\n", - " self.bn = paddle.nn.BatchNorm2d(32)\n", + " self.bn = paddle.nn.BatchNorm2D(32)\n", " self.relu = paddle.nn.ReLU()\n", "\n", " in_channels = 32\n", @@ -691,7 +672,7 @@ " self.decoders.append(block)\n", " in_channels = out_channels\n", "\n", - " self.output_conv = paddle.nn.Conv2d(in_channels, \n", + " self.output_conv = paddle.nn.Conv2D(in_channels, \n", " num_classes, \n", " kernel_size=3, \n", " padding='same')\n", @@ -727,7 +708,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -743,41 +724,41 @@ "name": "stdout", "output_type": "stream", "text": [ - "--------------------------------------------------------------------------------\n", - " Layer (type) Input Shape Output Shape Param #\n", - "================================================================================\n", - " Conv2d-1 [-1, 3, 160, 160] [-1, 32, 80, 80] 896\n", - " BatchNorm2d-1 [-1, 32, 80, 80] [-1, 32, 80, 80] 128\n", - " ReLU-1 [-1, 32, 80, 80] [-1, 32, 80, 80] 0\n", - " ReLU-4 [-1, 256, 20, 20] [-1, 256, 20, 20] 0\n", - " Conv2d-12 [-1, 128, 20, 20] [-1, 128, 20, 20] 1,152\n", - " Conv2d-13 [-1, 128, 20, 20] [-1, 256, 20, 20] 33,024\n", - "SeparableConv2d-5 [-1, 128, 20, 20] [-1, 256, 20, 20] 0\n", - " BatchNorm2d-4 [-1, 256, 20, 20] [-1, 256, 20, 20] 1,024\n", - " Conv2d-14 [-1, 256, 20, 20] [-1, 256, 20, 20] 2,304\n", - " Conv2d-15 [-1, 256, 20, 20] [-1, 256, 20, 20] 65,792\n", - "SeparableConv2d-6 [-1, 256, 20, 20] [-1, 256, 20, 20] 0\n", - " MaxPool2d-3 [-1, 256, 20, 20] [-1, 256, 10, 10] 0\n", - " Conv2d-16 [-1, 128, 20, 20] [-1, 256, 10, 10] 33,024\n", - " Encoder-3 [-1, 128, 20, 20] [-1, 256, 10, 10] 0\n", - " ReLU-8 [-1, 32, 80, 80] [-1, 32, 80, 80] 0\n", - "ConvTranspose2d-7 [-1, 64, 80, 80] [-1, 32, 80, 80] 18,464\n", - " BatchNorm2d-8 [-1, 32, 80, 80] [-1, 32, 80, 80] 128\n", - "ConvTranspose2d-8 [-1, 32, 80, 80] [-1, 32, 80, 80] 9,248\n", - " Upsample-4 [-1, 64, 80, 80] [-1, 64, 160, 160] 0\n", - " Conv2d-20 [-1, 64, 160, 160] [-1, 32, 160, 160] 2,080\n", - " Decoder-4 [-1, 64, 80, 80] [-1, 32, 160, 160] 0\n", - " Conv2d-21 [-1, 32, 160, 160] [-1, 4, 160, 160] 1,156\n", - "================================================================================\n", + "------------------------------------------------------------------------------\n", + " Layer (type) Input Shape Output Shape Param # \n", + "==============================================================================\n", + " Conv2D-22 [[1, 3, 160, 160]] [1, 32, 80, 80] 896 \n", + " BatchNorm2D-9 [[1, 32, 80, 80]] [1, 32, 80, 80] 128 \n", + " ReLU-9 [[1, 32, 80, 80]] [1, 32, 80, 80] 0 \n", + " ReLU-12 [[1, 256, 20, 20]] [1, 256, 20, 20] 0 \n", + " Conv2D-33 [[1, 128, 20, 20]] [1, 128, 20, 20] 1,152 \n", + " Conv2D-34 [[1, 128, 20, 20]] [1, 256, 20, 20] 33,024 \n", + "SeparableConv2D-11 [[1, 128, 20, 20]] [1, 256, 20, 20] 0 \n", + " BatchNorm2D-12 [[1, 256, 20, 20]] [1, 256, 20, 20] 1,024 \n", + " Conv2D-35 [[1, 256, 20, 20]] [1, 256, 20, 20] 2,304 \n", + " Conv2D-36 [[1, 256, 20, 20]] [1, 256, 20, 20] 65,792 \n", + "SeparableConv2D-12 [[1, 256, 20, 20]] [1, 256, 20, 20] 0 \n", + " MaxPool2D-6 [[1, 256, 20, 20]] [1, 256, 10, 10] 0 \n", + " Conv2D-37 [[1, 128, 20, 20]] [1, 256, 10, 10] 33,024 \n", + " Encoder-6 [[1, 128, 20, 20]] [1, 256, 10, 10] 0 \n", + " ReLU-16 [[1, 32, 80, 80]] [1, 32, 80, 80] 0 \n", + "Conv2DTranspose-15 [[1, 64, 80, 80]] [1, 32, 80, 80] 18,464 \n", + " BatchNorm2D-16 [[1, 32, 80, 80]] [1, 32, 80, 80] 128 \n", + "Conv2DTranspose-16 [[1, 32, 80, 80]] [1, 32, 80, 80] 9,248 \n", + " Upsample-8 [[1, 64, 80, 80]] [1, 64, 160, 160] 0 \n", + " Conv2D-41 [[1, 64, 160, 160]] [1, 32, 160, 160] 2,080 \n", + " Decoder-8 [[1, 64, 80, 80]] [1, 32, 160, 160] 0 \n", + " Conv2D-42 [[1, 32, 160, 160]] [1, 4, 160, 160] 1,156 \n", + "==============================================================================\n", "Total params: 168,420\n", "Trainable params: 167,140\n", "Non-trainable params: 1,280\n", - "--------------------------------------------------------------------------------\n", + "------------------------------------------------------------------------------\n", "Input size (MB): 0.29\n", "Forward/backward pass size (MB): 43.16\n", "Params size (MB): 0.64\n", "Estimated Total Size (MB): 44.10\n", - "--------------------------------------------------------------------------------\n", + "------------------------------------------------------------------------------\n", "\n" ] }, @@ -787,18 +768,15 @@ "{'total_params': 168420, 'trainable_params': 167140}" ] }, - "execution_count": 9, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "from paddle.static import InputSpec\n", - "\n", - "paddle.disable_static()\n", "num_classes = 4\n", "model = paddle.Model(PetNet(num_classes))\n", - "model.summary((3, 160, 160))" + "model.summary((-1, 3, 160, 160))" ] }, { @@ -811,40 +789,6 @@ "## 5.模型训练" ] }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "x_vaedRa8eoy" - }, - "source": [ - "### 5.1 自定义Loss\n", - "\n", - "在这个任务中我们使用SoftmaxWithCrossEntropy损失函数来做计算,飞桨中有functional形式的API,这里我们做一个自定义操作,实现一个Class形式API放到模型训练中使用。没有直接使用CrossEntropyLoss的原因主要是对计算维度的自定义需求,本次需要进行softmax计算的维度是1,不是默认的最后一维,所以我们采用上面提到的损失函数,通过axis参数来指定softmax计算维度。" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "colab": {}, - "colab_type": "code", - "id": "AEZq_jT78jNe" - }, - "outputs": [], - "source": [ - "class SoftmaxWithCrossEntropy(paddle.nn.Layer):\n", - " def __init__(self):\n", - " super(SoftmaxWithCrossEntropy, self).__init__()\n", - "\n", - " def forward(self, input, label):\n", - " loss = F.softmax_with_cross_entropy(input, \n", - " label, \n", - " return_softmax=False,\n", - " axis=1)\n", - " return paddle.mean(loss)" - ] - }, { "cell_type": "markdown", "metadata": { @@ -852,7 +796,7 @@ "id": "rj6MPPMkJIdZ" }, "source": [ - "### 5.2 启动模型训练\n", + "### 5.1 启动模型训练\n", "\n", "使用模型代码进行Model实例生成,使用prepare接口定义优化器、损失函数和评价指标等信息,用于后续训练使用。在所有初步配置完成后,调用fit接口开启训练执行过程,调用fit时只需要将前面定义好的训练数据集、测试数据集、训练轮次(Epoch)和批次大小(batch_size)配置好即可。" ] @@ -879,7 +823,7 @@ " centered=False,\n", " parameters=model.parameters())\n", "model = paddle.Model(PetNet(num_classes))\n", - "model.prepare(optim, SoftmaxWithCrossEntropy())\n", + "model.prepare(optim, paddle.nn.CrossEntropyLoss())\n", "model.fit(train_dataset, \n", " val_dataset, \n", " epochs=15, \n",