首页 Paddle框架 帖子详情
如何用paddle实现类似tensorflow map_fn()的功能
收藏
快速回复
Paddle框架 问答深度学习 983 3
如何用paddle实现类似tensorflow map_fn()的功能
收藏
快速回复
Paddle框架 问答深度学习 983 3

在用paddle复现一篇论文(提供了TensorFlow代码)的过程中,遇到TensorFlow的API map_fn,无法在paddle中找到类似功能的API。

需复现的tf代码:

memory_layer = tf.map_fn(lambda t:tf.matmul(t, self._Wm), x_time)

其中x_time是一个3-D tensor, shape为[seq_len, batch_size, hidden_size], _Wm是一个2-D 需学习的参数矩阵。

已知解决方案:利用paddle的动态图机制,这样可以把x_time转化为numpy格式

不清楚的地方在于如何实现,可以使得_Wm仍然是一个可学习的参数矩阵,每次反向的时候会更新?方便的话,可以提供代码demo吗?

如下的paddle代码是否可行:

        wm = fluid.layers.create_parameter(name="wm", shape=[hidden_size, hidden_size], dtype='float32')
        emb_rnn_ = fluid.layers.transpose(emb_rnn, perm=[1, 0, 2])  # shape: [seq_len, batch_size, hidden_size]
        emb_rnn_np = fluid.Variable.numpy(emb_rnn_)
        mem_layer_np = map(lambda t: fluid.dygraph.to_variable(t) * wm, emb_rnn_np)
        mem_layer = fluid.dygraph.to_variable(mem_layer_np)
0
收藏
回复
全部评论(3)
时间顺序
AIStudio786089
#2 回复于2020-02

相当于实现了memory_layer = tf.map_fn(lambda t:tf.matmul(t, self._Wm), x_time)这个OP,只有正向实现,没有反向实现。不能自动更新参数矩阵。建议暂时使用多个OP组合的方式,看是否能实现相似的功能。

0
回复
AIStudio786089
#3 回复于2020-02

这个例子可以通过while op来搭建。map_fn的功能会后续经过api需求审核和排期解决。

0
回复
杨攀
#4 回复于2020-02

方便给个例子吗

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户