Tensorflow 张量中的变长维数

Tensorflow 张量中的变长维数,tensorflow,Tensorflow,我正在尝试实现论文“端到端内存网络”() 每个培训示例都由许多短语、一个问题和答案组成。句子的数量是可变的,每个句子和问题中的单词数量也是可变的。每个单词都被编码为一个整数。所以我的输入形式是[批量大小,#句子,#句子中的单词] 现在我的问题是,每个小批量的第二和第三维度都是未知的。我是否仍能以某种方式将输入表示为单个张量,或者我是否必须使用张量列表,这样我就有了一个长度的列表,然后是一个句子长度的子列表,然后每个句子都有一个张量,其大小也不预先知道,对应于编码为整数的单词 我可以使用第二种方法

我正在尝试实现论文“端到端内存网络”()

每个培训示例都由许多短语、一个问题和答案组成。句子的数量是可变的,每个句子和问题中的单词数量也是可变的。每个单词都被编码为一个整数。所以我的输入形式是[批量大小,#句子,#句子中的单词]

现在我的问题是,每个小批量的第二和第三维度都是未知的。我是否仍能以某种方式将输入表示为单个张量,或者我是否必须使用张量列表,这样我就有了一个长度的列表,然后是一个句子长度的子列表,然后每个句子都有一个张量,其大小也不预先知道,对应于编码为整数的单词


我可以使用第二种方法吗?或者tensorflow将不能反向传播,例如,我有一个操作,其中我必须计算以下和:\sum\u I tf.scalar\u mul(p\u I,c\u I),其中p\u I是一个标量,c\u I是以前计算过的嵌入向量。然后,p和c值的张量存储在一个列表中,因此我必须在循环中对两个列表中的元素求和。我假设tensorflow不能整合计算图中的这个循环,对吗?我对此持怀疑态度,因为theano有一个特殊的扫描函数,允许对输入进行循环,所以我假设一个常规循环会导致计算图出现问题。tensorflow是如何处理的?

将雅罗斯拉夫的评论转移到一个答案:


TensorFlow已经成功了。尺寸也可以是动态的,如编号中所示。

TensorFlow具有
扫描功能。此外,维度可以是动态的,就像答案中的“其他”一样。不过我还有一个问题:如果我在一个占位符[None,None,None]上使用动态尺寸标注,我想把它展平,这样我就可以在张量中的每个元素上调用嵌入查找,然后想将结果重塑为原始形式,如果我将维度声明为动态的,我该怎么做呢?tf.reforme接受动态维度,即tf.reforme(tf.constant(np.ones((2,3)))、tf.shape(tf.constant(np.ones((3,2俎俎俎俎))。这是我的问题,我有一个占位符变量x_in=tf.placeholder(tf.int32,shape=[None,None,None]),我想使用嵌入张量将每个元素嵌入x_in:a=tf.get_变量(name='a',shape=[V,d])。因此,我将embeddings=tf.nn.embedding_lookup(A,tf.reformate(x_-in,[-1]),现在如果我想将embeddings重塑为x_-in的形状,但具有第四维,对应于嵌入深度d。如果我不知道前三个维度的值,我该怎么做呢?你可以使用tf.shape得到前三个维度的值