【发布时间】:2016-04-08 10:44:32
【问题描述】:
我正在尝试实现论文“端到端内存网络”(http://arxiv.org/abs/1503.08895)
每个训练示例都由多个短语、一个问题和答案组成。句子的数量是可变的,每个句子和问题中的单词数量也是可变的。每个单词都被编码为一个整数。所以我的输入将采用 [批量大小、句子数量、句子中的单词数] 的形式。
现在我的问题是每个小批量的第二维和第三维都是未知的。我还能以某种方式将此输入表示为单个张量,还是必须使用张量列表,以便我有一个长度为 batch_size 的列表,然后是一个长度为句子数的子列表,然后为每个句子提供一个张量,其大小也是事先不知道的,对应编码为整数的单词。
我可以使用第二种方法还是 tensorflow 将无法反向传播,例如我有一个操作,我必须计算以下总和:\sum_i tf.scalar_mul(p_i, c_i),其中 p_i 是标量,c_i 是先前计算的嵌入向量。然后将 p 和 c 值的张量存储在一个列表中,因此我必须在循环中对两个列表中的元素求和。我假设 tensorflow 不能在计算图中加入这个循环,对吗?我持怀疑态度,因为 theano 有一个特殊的扫描功能,它允许循环输入,所以我假设常规循环会导致计算图中出现问题。 tensorflow 是如何处理这个问题的?
【问题讨论】:
-
TensorFlow 有
scan。维度也可以像 Theano 中一样是动态的 -
感谢您的回答。不过我还有一个问题:如果我在形状为 [None, None, None] 的占位符上使用动态尺寸,并且我想将其展平,以便我可以在该张量中的每个元素上调用 embedding_lookup 然后想要重塑结果变成原始形式,如果我将尺寸声明为动态,我该怎么做?
-
tf.reshape 接受动态尺寸,即 tf.reshape(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_variable(name ='A',形状 = [V,d])。所以我调用 embeddings = tf.nn.embedding_lookup(A,tf.reshape(x_in, [-1])),现在如果我想将嵌入重塑为 x_in 的形状但具有第四维,对应于嵌入深度 d .鉴于我不知道前三个维度的值,我该怎么做?
-
你可以使用 tf.shape 获取前三个维度的值
标签: tensorflow