PaddlePaddle/PARL 碰到的小问题(二)

主要记录在PaddlePaddle/PARL实现自动解码(auto-SRL)过程中遇到的问题。

TODO: reshpae object is not callable

Try 1: if else 逻辑分别处理,但变量冲突 X
Try 2: 重定义Flatten和Reshape X
analysis:由于计算代码同构(代码如下),训练时把其当成网络层一样去根据loss最小化Flatten/Reshape参数,故错误.

for layer in self.decoders:
    # layer = fluid.layers.Layer | Flatten | Reshape
    x = layer(x)

静态图中不同逻辑分支下的公用变量

if else 不同逻辑分支公用变量冲突. 如shape变量用于记录每层计算后的变量shape,以便自动定制化参数.
由于多个CPU共同计算,shape又在不同逻辑分支下都被使用,部分CPU可能获取到缓存旧值. ( 静态图的限制+多个cpu执行)

# init_shape = [-1, 4, 64, 64]
for data in datas:
    if data['type] = 'conv2d':
        shape = self.conv2d_decoder(data, shape)
    elif data['type'] = 'fc':
        shape = self.fc_decoder(data, shape)
    else:
        ......

函数工具库引入

将de-layer以工具文件的方式引入,程序在计算的步骤卡住3mins以上,然后我选择手动终止,未等到结果. 应是运行时,某些函数/变量的获取速度过慢. 相反,将这些函数实现为Model的内置方法,则能快速启动.

缓存清理

某几次发现,启动过慢,即使所有的函数都是以Model内置方法的形式调用。后发现有个缓存目录下放了多份代码cache(且每次运行每个CPU都有一份),估计是每次都要从缓存中选择最新的一次代码。
清理缓存后rm -r /var/folders/_4/l6wrysls2zb45k5jp_2rk7w00000gn/T/tmp*,初始化速度加快.

加入自建变量作为model属性,无法正常解析

如加入self.shape = [-1,4,84,84]

return self._parameter_names
AttributeError: 'AtariModel' object has no attribute '_parameter_names'

你可能感兴趣的:(PaddlePaddle/PARL 碰到的小问题(二))