【问题标题】:How to insert a value at given index or indices ( mutiple index ) into a Tensor?如何将给定索引或索引(多个索引)处的值插入张量?
【发布时间】:2016-12-21 08:27:10
【问题描述】:

我有一个大小为 12 x 10 的矩阵和一个 document_length = [4,3,5] 的列表。前 4 行属于一个文档的句子,接下来的 3 行属于另一个文档,最后 5 行属于另一个文档。我需要通过以下方式获得一个大小为 15 x 10 的新矩阵或张量。

我需要插入一行零,这样,这里的最大文档长度为 5。因此,必须在第 5 个索引中插入 1 行零(因为第一个文档长度为 4)。然后在索引 9 和 10 处有 2 行零(第二个文档长度为 3),依此类推。如果问题令人困惑,请告诉我。

我有 12 x 10 给 GRU 或 LSTM ,但它必须是 3d 。要获得正确的 3D,我需要将 12 X 10 转换为 15 x 10 。有什么帮助吗?

【问题讨论】:

  • 您的矩阵是否以 numpy 格式加载?
  • @martianwars - 实际上 12x10 是从 LSTM 获得的。输出是 12x10 numpy 数组。但是,由于它是一个 Tensor 内部,不能使用 numpy 索引。
  • 您可能需要 tf.unpack() 张量,然后在最终 tf.pack() 之前插入列表中。 TF 似乎没有insert 函数
  • 抱歉使用stack/unstack 因为pack 已弃用
  • @martianwars - 尝试了很多东西,但无法成功。让我检查堆栈/取消堆栈

标签: python tensorflow lstm


【解决方案1】:

这是一种方法。您首先将 12x10 张量分解为大小为 12 的列表。这是使用 tf.unstack() 函数完成的。

# Assume `words` is my 12x10 tensor
tensors = tf.unstack(words, 12, axis=0) 

之后,您可以将 tf.zeros() 张量插入到您的索引列表中。这里为简单起见,我将在索引4 中插入一个张量。

b = tf.zeros((10))
tensors.insert(4, b)

最后,tf.stack() 重新构建您的列表。

words = tf.stack(tensors, axis=0)

【讨论】:

  • 如何将零插入张量。我正在更新我的 tensorflow,因为我的版本有点旧
  • 我会检查并勾选您的答案。如果还有疑问,我们可以暂时打开线程。谢谢
  • 另外,如果您使用的是旧版本(如我的情况下为 0.11),请将 stack() 替换为 pack()
  • 这是有效的。但是一个小问题,我有几个索引要插入。 tensors.insert 将只接受整数。我是否必须使用 tf.while 循环来实现它?
  • 为什么需要使用tensorflow函数?这是一个 python 列表 :) 应该做一个简单的循环
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 2020-09-24
  • 1970-01-01
  • 2019-02-23
  • 2020-01-27
  • 2022-01-27
  • 1970-01-01
相关资源
最近更新 更多