【问题标题】:How to create complicated constants in Tensorflow from constants如何在 Tensorflow 中从常量创建复杂的常量
【发布时间】:2018-07-19 15:36:29
【问题描述】:

我想根据其他一些 tensorflow 常量/占位符的值创建一个 tensorflow 常量。假设输入必须是 tf.constant / tf.placeholder。

如何应用 tensorflow 逻辑来基于该常量创建一个常量? 例如:

 i = tf.constant(...)
 ei = tf.zeros(shape=[N])
 ei[i] = 1

这是行不通的,因为

 TypeError: 'Tensor' object does not support item assignment

这是有道理的,因为你不应该改变一个常数。我也不希望我在这个例子中的ei 是变量,因为它们在逻辑上是常量,并且在我运行我的网络时不应该被优化。

【问题讨论】:

  • 目前,您必须逐个元素(或逐行、逐矩阵等)构造常量。我打开an issue in TensorFlow 请求一个运算符,该运算符允许您生成一个替换了其中一些元素的张量,因为在许多情况下它似乎比它应该更复杂,但截至今天它还没有向前发展。您将不得不使用连接、堆叠等。
  • 首先,非常感谢您的回答以及您打开了该问题。我不明白这么大的图书馆怎么没有一个简单的方法来做这样一个基本的事情。我已经阅读了您的问题,似乎只需要几个月才能引起注意。缺少这个更好的API,能否请你给我一个相对简单的方法来做我问的操作?

标签: python python-3.x tensorflow


【解决方案1】:

您可以为此目的使用tf.scatter_ndThe documentation 有点密集,但简单的用法可能类似于

i = tf.constant(...)  # assuming this is a scalar int tensor
ei = tf.scatter(i, 1, shape=[N])

这将创建一个全为零的 N 元素向量,除了 i,其中的值为 1。如果您希望 ei 在您的图表中也是一个常数,您应该能够只调用 @ 987654326@.

【讨论】:

    【解决方案2】:

    对于这种特殊情况,您可以这样做:

    i = tf.constant(...)
    ei = tf.cast(tf.equal(tf.range(N), i), dtype=tf.float32)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      相关资源
      最近更新 更多