主要记录在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'
网友评论