我正在努力重新实施本文,关键操作是双线性张量积.我几乎不知道这意味着什么,但是纸张有一个很好的小图形,我明白了.
关键操作是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)
>>>
Run Code Online (Sandbox Code Playgroud)
错误消息是
ValueError: Shapes TensorShape([Dimension(3), Dimension(3), Dimension(3)]) and TensorShape([Dimension(None), Dimension(None)]) must have the same rank
Run Code Online (Sandbox Code Playgroud)
目前
事实证明,两个3D张量相乘也无法正常工作tf.matmul
,但tf.batch_matmul
确实如此.tf.batch_matmul
还将做3D张量和矩阵.然后我尝试了3D和矢量:
ValueError: Dimensions Dimension(3) and Dimension(1) are not compatible
Run Code Online (Sandbox Code Playgroud)
mda*_*ust 12
您可以通过简单的重塑来完成此操作.对于两个矩阵乘法中的第一个,你有k*d,长度为d的矢量与dot product.
这应该是接近的:
temp = tf.matmul(E1,tf.reshape(Wddk,[d,d*k]))
result = tf.matmul(E2,tf.reshape(temp,[d,k]))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5431 次 |
最近记录: |