形状未知的tf.einsum

时间:2018-08-06 22:24:41

标签: python tensorflow

当我试图从numpy列表中在tensorflow中创建列表时,我的问题就开始了。我发现的最佳方法是根据该列表中的所有条目创建一个矩阵。  https://datascience.stackexchange.com/questions/15056/how-to-use-lists-in-tensorflow

因此,每一行代表我的numpy列表中的一个元素,总共有N个元素(或张量)。在下面的示例中,我有两个列表,分别由矩阵X1X2表示,每个张量(或列表)的所有形状都在另一个矩阵中表示,分别称为shapeX1shapeX2

我用X1X2中的形状信息重塑shapeX1shapeX2的第一行(代表两个列表的第一元素),然后计算两者之间的tf.einsum如下:

X1 = tf.placeholder(dtype=tf.float64, shape=(N,M1))
shapeX1 = tf.placeholder(dtype=tf.int32, shape=(N,3))
X2 = tf.placeholder(dtype=tf.float64, shape=(N,M2))
shapeX2 = tf.placeholder(dtype=tf.int32, shape=(N,3)) 
tensX1 = tf.reshape(X1[0,:], shape=[shapeX1[0,0],shapeX1[0,1],shapeX1[0,2]]) 
tensX2 = tf.reshape(X2[0,:], shape=[shapeX2[0,0],shapeX2[0,1]])
P = tf.einsum('ijk,jk->ik', tensX1, tensX2)

关于表达式tensX1,每个张量tensX2'ijk,jk->ik'的尺寸都可用于计算。但是我遇到tf.einsum(正下方)错误:

  

ValueError:无法采用未知等级的Shape的长度。

可能因为变量tensX1tensX2的维数未知:

print tensX1
Tensor("Reshape:0", shape=(?, ?, ?), dtype=float64)

print tensX2
Tensor("Reshape_1:0", shape=(?, ?), dtype=float64)

在我的情况下,每个张量的形状都不相同,即shapeX1(或shapeX2)的每一行不一定具有相同的尺寸。 所以我以前无法定义。

请 我该如何解决?有更好的方法吗?

0 个答案:

没有答案