Merge pull request #111 from saxon-zh/fix_readme fix code in readme
Merge pull request #111 from saxon-zh/fix_readme
fix code in readme
简介 | 特性 | 快速使用 | 新增功能 | 使用示例
飞桨框架2.0全新推出高层API,是对飞桨API的进一步封装与升级,提供了更加简洁易用的API,进一步提升了飞桨的易学易用性,并增强飞桨的功能。
飞桨高层API面向从深度学习小白到资深开发者的所有人群,对于AI初学者来说,使用高层API可以简单快速的构建深度学习项目,对于资深开发者来说,可以快速完成算法迭代。
飞桨高层API具有以下特点:
在功能增强与使用方式上,高层API有以下升级:
高层API基于飞桨动态图实现,兼容飞桨动态图的所有功能,既秉承了动态图易学、易用、易调试的特点,又对飞桨的动态图做了进一步的封装与优化。
相比较与动态图的算法实现,使用高层API实现的算法可编程代码量更少,原始的动态图训练代码需要20多行代码才能完成模型的训练,使用高层API后,仅用8行代码即可实现相同的功能。
使用普通API与高层API实现手写字符识别对比如下图,左边是普通动态图API的实现,右边是使用高层API的实现,可以明显发现,使用高层API的代码量更少。
高层API中实现了动静统一,用户无需感知到静态图、动态图的区别,只需要改一行代码即可实现将动态图代码在静态图模式下训练。动态图更方便调试模型,静态图的训练方式训练效率更高。
高层API默认训练方式和主框架保持一致,采用动态图的训练方式,我们可以使用paddle.disable_static()来开启动态图训练模式,用paddle.enable_static()开启静态图模式训练。
paddle.disable_static()
paddle.enable_static()
# 一行代码切换动态图训练模式 ## 动态图训练模式 paddle.disable_static() ## 静态图训练模式 # paddle.enable_static() # 设置训练设备环境 paddle.set_device('gpu') # 声明网络结构 model = paddle.Model(Mnist()) # 定义优化器 optimizer = paddle.optimizer.SGD(learning_rate=0.001, parameters=model.parameters()) # 调用prepare() 完成训练的配置 model.prepare(optimizer, CrossEntropy(), Accuracy()) # 调用 fit(),启动模型的训练 model.fit(train_dataset, val_dataset, batch_size=100, epochs=1, log_freq=100, save_dir="./output/")
以mnist手写字符识别为例,介绍飞桨高层API的使用方式。
使用高层API组建网络与动态图的组网方式完全相同,继承paddle.nn.Layer来定义网络结构即可。
paddle.nn.Layer
高层API组网方式如下
import paddle # 设置执行环境为GPU paddle.set_device('gpu') # 使用动态图训练方式 paddle.disable_static() class Mnist(paddle.nn.Layer): def __init__(self): super(Mnist, self).__init__() self.fc = paddle.nn.Linear(input_dim=784, output_dim=10) # 定义网络结构的前向计算过程 def forward(self, inputs): outputs = self.fc(inputs) return outputs
在开始训练前,需要定义优化器、损失函数、度量函数,准备数据等等。这些过程均可以在高层API Model类中的prepare函数中完成。
# 定义输入数据格式 inputs = [Input([None, 784], 'float32', name='image')] labels = [Input([None, 1], 'int64', name='label')] # 声明网络结构 model = paddle.Model(Mnist()) optimizer = paddle.optimizer.SGD(learning_rate=0.001, parameters=model.parameters()) # 使用高层API,prepare() 完成训练的配置 model.prepare(optimizer, paddle.nn.CrossEntropy(), paddle.metricAccuracy())
使用高层API完成训练迭代过程时,使用一行代码即可构建双层循环程序,去控制训练的轮数和数据读取过程。
from paddle.vision.datasets import MNIST as MnistDataset # 定义数据读取器 train_dataset = MnistDataset(mode='train') val_dataset = MnistDataset(mode='test') # 启动训练 model.fit(train_dataset, val_dataset, batch_size=100, epochs=10, log_freq=100, save_dir="./output/")
高层API中通过fit函数完成训练的循环过程,只需要设置训练的数据读取器、batchsize大小,迭代的轮数epoch、训练日志打印频率log_freq,保存模型的路径即可。
除了使用高层API实现一行代码启动训练外,还新增了以下功能:
paddle.vision.transforms。图像预处理模块transforms包括一系列的图像增强与图像处理实现,对处理计算机视觉相关的任务有很大帮助。
下表中列出Transforms支持的数据处理和数据增强API,如下所示:
使用方法如下:
from paddle.vision import transforms import cv2 img_path = "./output/sample.jpg" img = cv2.imread(img_path) # 使用Compose 将可以将多个数据增强函数组合在一起 trans_funcs = transforms.Compose([transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.BrightnessTransform(0.2)]) label = None img_processed, label = trans_funcs(img, label)
上述代码的效果图如下:
paddle.vision.models中包含了高层API对常用模型的封装,包括ResNet、VGG、MobileNet、LeNet等。使用这些现有的模型,可以快速的完成神经网络的训练、finetune等。
使用paddle.vision中的模型可以简单快速的构建一个深度学习任务,比如13代码即可实现resnet在Cifar10数据集上的训练:
from paddle.vision.models import resnet50 from paddle.vision.datasets import Cifar10 from paddle.optimizer import Momentum from paddle.regularizer import L2Decay from paddle.nn import CrossEntropy from paddle.metirc import Accuracy # 调用resnet50模型 model = paddle.Model(resnet50(pretrained=False, num_classes=10)) # 使用Cifar10数据集 train_dataset = Cifar10(mode='train') val_dataset = Cifar10(mode='test') # 定义优化器 optimizer = Momentum(learning_rate=0.01, momentum=0.9, weight_decay=L2Decay(1e-4), parameters=model.parameters()) # 进行训练前准备 model.prepare(optimizer, CrossEntropy(), Accuracy(topk=(1, 5))) # 启动训练 model.fit(train_dataset, val_dataset, epochs=50, batch_size=64, save_dir="./output", num_workers=8)
更多的高层API使用示例请参考:
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
飞桨核心框架 高层API
简介 | 特性 | 快速使用 | 新增功能 | 使用示例
简介
飞桨框架2.0全新推出高层API,是对飞桨API的进一步封装与升级,提供了更加简洁易用的API,进一步提升了飞桨的易学易用性,并增强飞桨的功能。
飞桨高层API面向从深度学习小白到资深开发者的所有人群,对于AI初学者来说,使用高层API可以简单快速的构建深度学习项目,对于资深开发者来说,可以快速完成算法迭代。
飞桨高层API具有以下特点:
在功能增强与使用方式上,高层API有以下升级:
特性
易学易用
高层API基于飞桨动态图实现,兼容飞桨动态图的所有功能,既秉承了动态图易学、易用、易调试的特点,又对飞桨的动态图做了进一步的封装与优化。
低代码开发
相比较与动态图的算法实现,使用高层API实现的算法可编程代码量更少,原始的动态图训练代码需要20多行代码才能完成模型的训练,使用高层API后,仅用8行代码即可实现相同的功能。
使用普通API与高层API实现手写字符识别对比如下图,左边是普通动态图API的实现,右边是使用高层API的实现,可以明显发现,使用高层API的代码量更少。
动静统一
高层API中实现了动静统一,用户无需感知到静态图、动态图的区别,只需要改一行代码即可实现将动态图代码在静态图模式下训练。动态图更方便调试模型,静态图的训练方式训练效率更高。
高层API默认训练方式和主框架保持一致,采用动态图的训练方式,我们可以使用
paddle.disable_static()来开启动态图训练模式,用paddle.enable_static()开启静态图模式训练。快速使用
以mnist手写字符识别为例,介绍飞桨高层API的使用方式。
1. 搭建网络结构
使用高层API组建网络与动态图的组网方式完全相同,继承
paddle.nn.Layer来定义网络结构即可。高层API组网方式如下
2. 训练准备
在开始训练前,需要定义优化器、损失函数、度量函数,准备数据等等。这些过程均可以在高层API Model类中的prepare函数中完成。
3. 启动训练
使用高层API完成训练迭代过程时,使用一行代码即可构建双层循环程序,去控制训练的轮数和数据读取过程。
高层API中通过fit函数完成训练的循环过程,只需要设置训练的数据读取器、batchsize大小,迭代的轮数epoch、训练日志打印频率log_freq,保存模型的路径即可。
新增功能
除了使用高层API实现一行代码启动训练外,还新增了以下功能:
transforms
paddle.vision.transforms。图像预处理模块transforms包括一系列的图像增强与图像处理实现,对处理计算机视觉相关的任务有很大帮助。
下表中列出Transforms支持的数据处理和数据增强API,如下所示:
使用方法如下:
上述代码的效果图如下:
paddle.vision.models
paddle.vision.models中包含了高层API对常用模型的封装,包括ResNet、VGG、MobileNet、LeNet等。使用这些现有的模型,可以快速的完成神经网络的训练、finetune等。
使用paddle.vision中的模型可以简单快速的构建一个深度学习任务,比如13代码即可实现resnet在Cifar10数据集上的训练:
更多使用示例
更多的高层API使用示例请参考: