paddle与pytorch编程的一点感悟

刚入门深度学习几个月,最先学的框架是pytorch,愁于自己没有好的电脑,最近采用百度的paddle框架,免费提供的时间有限的算力卡对我这个新手还算是很友好,花了半天时间大概能看懂几个入门级别的paddle框架下的代码。自我感觉还是与pytorch有些区别,目前暂时先记在这里,日后再补充。听说ai studio暂时还不支持pytorch,期待!

1.编程区别:

涉及到具体的流程,可对着ai studio官网上的paddle,和pytorch,实现mnist流程,对比二者的异同。

paddle:

参考百度官方的课程:
加粗样式
基本流程如上图所示,分为五个步骤,我这里再说明一下:

  1. 数据准备:一般包含认知数据,从文件中加载数据,打乱数据归一化等数据预处理,构造数据提供器reader四个小步骤;
  2. 网络配置:一般包含网络搭建,定义数据层,定义损失函数,定义优化函数几个步骤;(个人理解,这里定义数据层的用法,跟c语言中变量在使用之前先命名定义它和告诉其类型为int,类似。)
  3. 网络训练&评估:一般包含定义运算场所来创建Executor,定义数据映射器,定义绘制loss相关的函数,训练并保存模型;(个人理解,这里定义数据映射器,是将第二步中定义的变量通过DataFeeder映射成为Executor能接受的数据结构,可以作为输入,注意到这里还只是定义。真正的数据传输是在训练的时候发生的,是将train_reader()读入的data,通过该数据映射器转成Executor接受的数据,喂入网络)
  4. 网络预测:一般包含数据预处理(特别是图像),创建预测用的Executor,开始预测。

pytorch

编程过程同样一般如下:

  1. 数据准备:一般包含认知数据,从文件中加载数据,打乱数据归一化等数据预处理,使用 torch.utils.data.DataLoader导入。
  2. 网络配置:一般包括,网络搭建(继承nn.Module,网络结构,定义前向传播),实例化,定义损失函数和优化器。
  3. 网络训练:一般包括,前向传播求输出和损失,使用损失反向传播和优化器,打印相关loss信息和保存模型等等。(通过torch.utils.data.DataLoader导入的数据一般直接可以在训练时用枚举函数enumerate取出)
  4. 网络预测:一般包括,数据预处理,输入模型开始预测。
    可以看出,使用pytorch更符合我们推导数据处理以及正反向传播的一般思路。

总结

参考paddle官方文档:paddle底层设计思想
fluid内部的静态图执行流程如下:
在这里插入图片描述paddle代码里构建的图是Program,我们需要编写python程序,通过调用paddle的api,向Program添加变量及对变量的操作,过程中经由Transpiler进行了编译。需事先定义好完整的program,提交至executor后不可修改。

本人目前暂时啊还未学习tf,听说tf1版本使用静态图,也就是说使用时得先定义计算图,然后不断来使用。在pytorch中,每次都会重新构建一个动态图,所以更符合我们正常的思路。
至于动态图和静态图的优缺点,参考这篇博客

对于使用者来说,两种形式的计算图有着非常大的区别,同时静态图和动态图都有他们各自的优点,比如动态图比较方便debug,使用者能够用任何他们喜欢的方式进行debug,同时非常直观,而静态图是通过先定义后运行的方式,之后再次运行的时候就不再需要重新构建计算图,所以速度会比动态图更快。

在学习paddle之后,我对此有了更深入的理解。网上看到PaddlePaddle也是至最新的1.5.x版本开始提供动态图API,目前暂时还未学到那里,先几个笔记日后再学。
以上只是我一点特别粗浅的看法,有错误诚请指出!

发布了61 篇原创文章 · 获赞 17 · 访问量 2968

猜你喜欢

转载自blog.csdn.net/qq_35027690/article/details/103902252
今日推荐