Tensorflow,将张量中的索引值与 if 条件的整数进行比较



我正在使用TensorFlow进行类似于连续词袋(CBOW)模型的自定义嵌入训练。但是,与具有固定长度滑动窗口的"CBOW"不同,我的滑动窗口可以被认为是灵活的。问题是这样的:

比方说,嵌入是词嵌入。对于单词 t,我有一个张量显示其上下文单词的索引:[-1, 1, 2, -1]。最大窗口大小为 4,因此矢量的长度为 4。但有时我没有 4 个上下文词表示一个单词,所以我用"-1"来表示"这个位置没有单词",其他整数是一个单词的索引。我还有一个"嵌入"张量,它是所有单词的嵌入。

我试图做的是获取上下文词的平均嵌入,以便表示上下文。例如,如果上下文词是 [-1, 1, 2, -1],我会得到 (1 * (嵌入单词 1) + 2 * (嵌入单词 2) )/2。我只需要忽略所有的-1。

因此,在我的代码中,我尝试遍历上下文词张量以将每个值与 -1 进行比较,并使用 if 条件来控制我是否要添加此上下文词的嵌入。我为此尝试了不同的方法,但总是得到"类型错误:不允许使用tf.Tensor作为 Pythonbool"。

有没有办法解决这个问题?或者更好的是,是否有更好的无文字位置表示,以便我可以更有效地计算(尝试使用 NaN 但也遇到很多麻烦......

非常感谢您的帮助,希望我对问题有明确的描述。

我认为了解如何从 Tensorflow 张量中获取值会有所帮助。在这里看看接受的答案。请记住,Tensorflow 可能被视为一种符号语言,因此tf.Tensor是一种在会话中评估时记录某些值的符号,而不是在定义或与其他操作堆叠时。

如果你想在图中进行比较,请使用张量流特殊函数进行张量比较,如tf.equaltf.less等。对于 instace,我将张量a的第一个元素与另一个常量张量 b 进行比较:

# Here is an example of two tensors
a = tf.constant([[1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0]])
b = tf.constant(1, dtype=tf.float32)
# generate a tensor representing a result of comparison
c = tf.equal(a[0, 0], b)
# Evaluate the output tensor in a session
print(tf.Session().run(c))

输出为真

此外,您可以尝试提取张量的值,如下所示:

# Here is an example of the tensor
a = tf.constant([[1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0]])
# Evaluate the tensor in a session
print(tf.Session().run(a))

这里所做的是将 tf 张量转换为 numpy 数组,您可以以任何所需的方式处理该数组。