Paddle 2.0不兼容升级(相对1.8)
训练的不兼容变化 ( 原1.8的代码,在2.0下不能正常、正确训练的问题。)
1、Paddle-2.0 rc 默认开启动态图模式
变化说明
Paddle-2.0 rc后,Paddle默认开启动态图。即,当用户调用import paddle后,此时Paddle已经运行在动态图模式下。
不兼容错误表现
基于1.8开发的静态图代码,在2.0-rc下直接执行会出错。为此,我们在静态图的一些入口API 中加入了报错检查,例如直接调用fluid.data会遇到如下错误:
解决方案
原来依赖于默认静态图的代码需要在import paddle后的头部位置加入paddle.enable_static()来开启静态图模式,这样才能正常运行。
原来通过dygraph guard来写的动态图代码仍然可以正常执行。但在2.0-rc下可以不需要像以前写dygraph guard,直接按照动态图模式编写代码。
同时,请注意对于GPU版本的paddle,在import paddle时默认开启动态图会选择CUDAPlace作为默认place。如果要修改place,可以通过paddle.set_device()来完成。
2、LSTM OP的输入端名称及实现方式修改
变化说明
paddle.fluid.layers.lstm 对应的OP kernel输入端定义从last_h修改为LastH,last_c改为LastC。
新增了SequenceLength等输入接口。
新增了Reserve,StateOut等输出接口。
不兼容错误表现
使用1.8的接口会报错cudnn状态问题:ExternalError: Cudnn error, CUDNN_STATUS_EXECUTION_FAILED
解决方案
使用2.0rc中paddle.nn.LSTM接口,具体使用细节,可查看官网中的LSTM的例子
3. Paddle-2.0 rc 移除部分依赖第三方库
变化说明
Paddle-2.0 rc 移除了一些第三方依赖库,包括 graphviz, objgraph, matplotlib, nltk, opencv, pyyaml这6项.
不兼容错误表现
(1)原来Paddle基于这些第三方库提供了一些API,现在这些API被删除了。例如,
移除matplotlib的同时,原来的paddle.utils.plot也被删除了。
移除nltk的同时,依赖nltk的数据集sentiment(nltk.movie_reivew)数据集也被删除了。
(2)原来安装paddle后,默认这些第三方库就被安装了,可以直接使用,现在可能会出错。
例如,安装paddle-2.0 rc后,直接import objgraph可能会报错。
解决方案
使用了这些第三方库的代码需要手动install一下相应的库,并使用相应的API完成想要的功能。
感谢整理分享,2.0变化挺大的,感觉已经尽量兼容了吧。
好多组件都用加1d、2d、3d的方式与原api区分。
现在还是beta版,正式应该兼容会更好些吧~~感谢提醒。
这次核心思路是不管什么兼容不兼容了, 按理想升级一大步.
然后未来2.x/3.x都和2.0兼容. (未来再好好保障向下兼容性)
出个rc教程呗,好几天没新帖子了。
懂了,赶紧投奔2.0~~
项目是时候升级到2.0了
beta的项目需要改动的不是很多
一个cyclegan项目只需改Conv2d变为大写D,归一化也是,
转置卷积名称也更合理了
估计会要求升级的
感谢分享