paddlepaddle框架小白入门级指南
paddlepaddle框架小白入门级指南
- 引言
- 一.准备工作
- 1.jupyter notebook
- 2.pycharm及GPU配置
- 3.pip,numpy,matplotlib安装
- 二.paddle安装排雷
- 1.安装时注意
- 2. paddle安装后导入到PyCharm,设置解释器
- 三.从python到paddle,paddle框架优势利用
引言
作为一名初步进入深度学习领域的小白来说,复杂的命令行操作,一些看不懂的专业英语术语,满篇的英文接口与方法,经常让人感到烦恼甚至劝退。然而,作为国产的深度学习框架工具,飞桨提供了一个完全国产化的平台,功能强大而且丰富。本文为刚刚接触paddle框架的小白排雷,顺便阐述飞桨框架的一些使用技巧,防止新手因为信息量过于庞大或者不善于查找资料而烦恼
一.准备工作
1.jupyter notebook
在ai studio中,paddle框架的学习是结合jupyter notebook一起使用的,因而为了使用简便,建议预先安装jupyter notebook(有pytorch和anaconda使用经历的大佬们电脑中一般已经有了,可以先查看一下)
2.pycharm及GPU配置
对于安装有GPU或者使用的笔记本电脑显卡为NVIDIA的用户,推荐安装pycharm以便获取更快速的代码运行速度(虽然飞桨官方有算力卡,提供CPU和GPU服务,但是以后总会在自己电脑上跑的呀)。GPU的环境下运行速度显著快于CPU,更改使用环境参考代码:with fluid.dygraph.guard(place),在place赋值时可供选择
use_gpu = True
place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace()
其中0代表0号GPU卡,一般配置有GPU的电脑都是4卡,查找卡的名称及使用情况,请使用命令行输入:
启动多GPU的训练,还需要在命令行中设置一些参数变量。打开终端,运行如下命令:
$ python -m paddle.distributed.launch --selected_gpus=0,1,2,3 --log_dir ./mylog train_multi_gpu.py
paddle.distributed.launch:启动分布式运行。
selected_gpus:设置使用的GPU的序号(需要是多GPU卡的机器,通过命令watch nvidia-smi查看GPU的序号)。
log_dir:存放训练的log,若不设置,每个GPU上的训练信息都会打印到屏幕。
train_multi_gpu.py:多GPU训练的程序,包含修改过的train_multi_gpu()函数。
注意,使用GPU训练时代码和CPU有三处差异:以mnist数据集的训练过程为例,在修改过的train_multi_gpu()函数中:
#GPU训练过程:
def train_multi_gpu():##修改1-从环境变量获取使用GPU的序号place = fluid.CUDAPlace(fluid.dygraph.parallel.Env().dev_id)with fluid.dygraph.guard(place):##修改2-对原模型做并行化预处理strategy = fluid.dygraph.parallel.prepare_context()model = MNIST()model = fluid.dygraph.parallel.DataParallel(model, strategy)model.train()# 调用加载数据的函数train_loader = load_data('train')##修改3-多GPU数据读取,必须确保每个进程读取的数据是不同的train_loader = fluid.contrib.reader.distributed_batch_reader(train_loader)optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.01, parameter_list=model.parameters())EPOCH_NUM = 5for epoch_id in range(EPOCH_NUM):for batch_id, data in enumerate(train_loader()):# 准备数据image_data, label_data = dataimage = fluid.dygraph.to_variable(image_data)label = fluid.dygraph.to_variable(label_data)predict = model(image)loss = fluid.layers.cross_entropy(predict, label)avg_loss = fluid.layers.mean(loss)# 修改4-多GPU训练需要对Loss做出调整,并聚合不同设备上的参数梯度avg_loss = model.scale_loss(avg_loss)avg_loss.backward()model.apply_collective_grads()# 最小化损失函数,清除本次训练的梯度optimizer.minimize(avg_loss)model.clear_gradients()if batch_id % 200 == 0:print("epoch: {}, batch: {}, loss is: {}".format(epoch_id, batch_id, avg_loss.numpy()))# 保存模型参数fluid.save_dygraph(model.state_dict(), 'mnist')
3.pip,numpy,matplotlib安装
这三个是安装,运行paddle所需要的库,需要提前安装。安装时推荐使用清华源安装,换源的具体代码同下面paddle安装。注意,python3及的用户安装python时默认同时安装了pip,可以通过使用命令
pip -V
查看现有pip版本,未安装则会报错。已经有pip的用户可以使用命令
pip list
查看现有的通过pip安装的包,如numpy,matplotlib。有过机器学习编程基础或者接触矩阵等数学运算在计算机上的操作的同学,一般都已经安装过了。
二.paddle安装排雷
我当时自己安装paddle,也算是有点基础,之前因为接触过自动机器学习项目(nni),安装过tensorflow和nni,其实和paddle安装经历差不多,主要就是命令行操作加python代码验证。
注意,python3.8不能使用paddle,推荐使用3.5(更稳定)或者3.7安装,具体情况看你现有的python版本。而且,安装时强烈建议关闭其他所有联网软件!!!网速会有显著提高的
acanonda安装方法:(推荐,好管理)
#在命令行窗口CMD中:
#创建虚拟环境
F:\>conda create --name paddle python=3.5
F:\>activate paddle
#添加清华源,如果卡顿,可以自己换成百度源
F:\>conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
F:\>conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
F:\>conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
#如果安装终断,从这行开始重复执行,直到成功
F:\>conda config --set show_channel_urls yes
F:\>conda install paddlepaddle #CPU 不是NIVDIA显卡用这个
F:\>conda install paddlepaddle-gpu cudatoolkit=10.0 #GPU NIVDIA显卡用这个,自带CUDA和CUDNN
#检验:
F:\>python
F:\>import paddle.fluid
F:\>paddle.fluid.install_check.run_check()
#如果出现 Your Paddle Fluid is installed successfully!,说明您已成功安装。#每次重新进入环境(在CMD下):
F:\>activate paddle
1.安装时注意
如果程序进度条卡死不懂超过两分钟,建议直接关闭窗口再次安装,很可能是因为你之前没有关闭所有联网软件,安装时这些软件占用网络。我当初重复了4次,成功了(家里的网太慢了,总是卡)
2. paddle安装后导入到PyCharm,设置解释器
解释器设置为\Anaconda\envs\paddle的python.exe 重要!!!(包括每个项目的解释器)
如:pycharm设置:Configure->Settings->Project Interpreter->齿轮->add->System Interpreter->文件夹\Anaconda\envs\paddle下的python.exe->OK,OK
每个项目的设置也是:File->Settings->Project:->Project Interpreter->下拉菜单->Anaconda\envs\paddle下的python.exe
另:
anaconda中查看Python版本号: F:>python -V #注意V是大写
确认 Python 和 pip 是 64 位:
python3 -c “import platform;print(platform.architecture()[0]);print(platform.machine())”
三.从python到paddle,paddle框架优势利用
想要利用好paddle框架,其实也是需要深厚的python基础的,因为一些对于列表中元素的操作,库中的方法的灵活调用(数据处理模块为例),很可能会导致新人感觉代码晦涩难懂,需要自己一个个的baidu接口。
python代码中,数据处理,读入数据,处理器,网络建模编写,训练,检验等,都需要用户自己编写,工作量动辄500行左右,而且还不算网络部分的优化算法编写,损失函数的寻找,激活函数的选择与定义。如果这些工作都让用户去做,工作量太大。
以最简单的Network为例,连loss函数这样简单做差的函数都要自己定义,那么如果采用复杂的形式,比如方差等,python直接编写神经网络的缺点就凸显出来了,不够方便。
class Network(object):def __init__(self, num_of_weights):# 随机产生w的初始值# 为了保持程序每次运行结果的一致性,此处设置固定的随机数种子# np.random.seed(0)self.w = np.random.randn(num_of_weights, 1)self.b = 0.def forward(self, x):z = np.dot(x, self.w) + self.breturn zdef loss(self, z, y):error = z - ynum_samples = error.shape[0]cost = error * errorcost = np.sum(cost) / num_samplesreturn costdef gradient(self, x, y):z = self.forward(x)N = x.shape[0]gradient_w = 1. / N * np.sum((z - y) * x, axis=0)gradient_w = gradient_w[:, np.newaxis]gradient_b = 1. / N * np.sum(z - y)return gradient_w, gradient_bdef update(self, gradient_w, gradient_b, eta=0.01):self.w = self.w - eta * gradient_wself.b = self.b - eta * gradient_bdef train(self, training_data, num_epoches, batch_size=10, eta=0.01):n = len(training_data)losses = []for epoch_id in range(num_epoches):# 在每轮迭代开始之前,将训练数据的顺序随机打乱# 然后再按每次取batch_size条数据的方式取出np.random.shuffle(training_data)# 将训练数据进行拆分,每个mini_batch包含batch_size条的数据mini_batches = [training_data[k:k + batch_size] for k in range(0, n, batch_size)]for iter_id, mini_batch in enumerate(mini_batches):# print(self.w.shape)# print(self.b)x = mini_batch[:, :-1]y = mini_batch[:, -1:]a = self.forward(x)loss = self.loss(a, y)gradient_w, gradient_b = self.gradient(x, y)self.update(gradient_w, gradient_b, eta)losses.append(loss)print('Epoch {:3d} / iter {:3d}, loss = {:.4f}'.format(epoch_id, iter_id, loss))return losses
但是paddle中有现成的接口,上述的各项操作,比如损失函数,激活函数,优化算法,设计器,在paddle中基本都是一两行代码,直接导入结束,十分简单。不仅如此,飞桨还提供了大量不同的优化策略等,供同学们探索。同学们可以在自己模型中摸索尝试,体会不同策略对于模型梯度,loss变化的影响。
代码详情查看飞桨官方api文档:https://www.paddlepaddle.org.cn/documentation/docs/zh/api_cn/index_cn.html
paddle中尤其要求灵活使用numpy中的各种操作,比如元素变换,矩阵转置,shape,reshape,mean方法,std方法等。建议查看代码之前优先看一下numpy的帮助文档。
欢迎有问题的小伙伴在下方留言,共同进步!
paddlepaddle框架小白入门级指南相关推荐
- html怎样使用ui套件,weui框架组件小白入门指南:如何安装使用weui.js?
本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规.大家都是程序员,不要闹得不开心. 苏南大叔在本文中说说腾讯的weui这个前端框架的基本使用方法.这款框架已经问世有几年的时间了,因为其可以把微信 ...
- 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题
入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...
- python语言入门w-Python完全小白入门指南
前几天整理了Linux的入门材料Linux运维完全小白入门指南,趁着这热乎劲,又整理了一下自己学Python时候的资料,今天也一并分享出来. 还是之前的说过的,这里只适合初级或者未入门的小白,想看高阶 ...
- node.js Web应用框架Express入门指南
node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...
- 淘宝开源Android容器化框架Atlas开发者指南
Atlas 由阿里巴巴移动团队自研,以容器化思路解决大规模团队协作问题,实现并行开发.快速迭代和动态部署,适用于 Android 4.x 以上系统版本的大小型 App 开发. 该框架于2017年3月1 ...
- python入门指南-Python完全小白入门指南
前几天整理了Linux的入门材料Linux运维完全小白入门指南,趁着这热乎劲,又整理了一下自己学Python时候的资料,今天也一并分享出来. 还是之前的说过的,这里只适合初级或者未入门的小白,想看高阶 ...
- 太极分布式事务处理框架TJDTP使用指南
太极分布式事务处理框架TJDTP使用指南 李万鸿2017-2-20 结合目前事务处理的精华,我开发了太极分布式事务处理框架TJDTP,采用可靠消息服务和重试.补偿处理机制,使用事件驱动.最终一致的事务 ...
- esxi能直通的显卡型号_2020年6月笔记本电脑推荐,直接推荐具体型号,小白选购指南...
阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以继续免费收到最新文章了.每天都有分享.完全是免费订阅,请放心关注.注:本文转载自网络,不代表本平台立场,仅供读者参 ...
- 基于PaddlePaddle框架实现桃子分类
众所周知,图像相比文字能够提供更加生动,容易理解及更具艺术感的信息,是人们转递与交换信息的重要来源. 谈到图像分类,图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉中重要的基础问题,也 ...
最新文章
- [转载]Outlook 2016 显示正在启动... 无法进入Outlook的解决方案
- Java集合之Properties
- Zeppelin-源码编译
- SAP Spartacus 用户登录成功后,Access Token 持久化到浏览器 local storage 的执行原理
- Hibernate中保存与持久性以及saveOrUpdate之间的区别
- Spring MVC 3.0 RESTful controller
- 2019数据库趋势报告,最受欢迎的是MySQL
- Linux UDP编程
- 5G对于数据中心的影响有哪些
- Spring Boot 你为什么这么耗内存?
- ecshop ectouch 不支持html,ECShop上传的商品图片在ECTouch不能显示,怎么解决
- 一文整理总结常见Java后端面试题系列——Spring篇(2022最新版)
- PCI及PCIe基本知识
- Android开发笔记——视频录制播放常见问题
- 新旧骗术揭秘:防止5G时代的电信诈骗
- 日语中的“上手”“下手”是什么意思?
- 《自动化学报》踩坑心得
- 千万数据量下的真实业务场景SQL性能优化!
- java输出华氏摄氏温度转换表_C语言入门教程-示例:编写能够打印华氏-摄氏温度转换表的程序...
- github 高级查询