【发布时间】:2016-03-10 16:39:28
【问题描述】:
我正在重新实现this paper,关键操作是双线性张量积。我几乎不知道那是什么意思,但这篇论文有一个很好的小图形,我理解。
关键操作是e_1 * W * e_2,我想知道如何在tensorflow中实现,因为其余的应该很简单。
基本上,给定 3D 张量 W,将其切片为矩阵,对于第 j 个切片(矩阵),将其在每一边乘以 e_1 和 e_2 ,产生一个标量,它是结果向量中的第 j 个条目(此操作的输出)。
所以我想执行 e_1(一个 d 维向量)、W(dxdxk 张量)和 e_2(另一个d 维向量。这个产品能否像现在一样在 TensorFlow 中简洁地表达,还是我必须以某种方式定义自己的操作?
早期编辑
为什么将这些张量相乘不起作用,有什么方法可以更明确地定义它以使其起作用?
>>> import tensorflow as tf
>>> tf.InteractiveSession()
>>> a = tf.ones([3, 3, 3])
>>> a.eval()
array([[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]],
[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]],
[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]], dtype=float32)
>>> b = tf.ones([3, 1, 1])
>>> b.eval()
array([[[ 1.]],
[[ 1.]],
[[ 1.]]], dtype=float32)
>>>
错误信息是
ValueError: Shapes TensorShape([Dimension(3), Dimension(3), Dimension(3)]) and TensorShape([Dimension(None), Dimension(None)]) must have the same rank
目前
事实证明,将两个 3D 张量相乘也不适用于 tf.matmul,但 tf.batch_matmul 可以。 tf.batch_matmul 也会做 3D 张量和矩阵。然后我尝试了 3D 和矢量:
ValueError: Dimensions Dimension(3) and Dimension(1) are not compatible
【问题讨论】:
-
你可以通过简单的重塑来做到这一点。
-
你最终实施了这篇论文吗?
标签: tensorflow