如何从常量创建Tensorflow中的复杂常量

时间:2018-07-19 15:36:30

标签: python python-3.x tensorflow

我想基于其他一些tensorflow consant /占位符的值创建一个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是变量,因为它们在逻辑上是常量,并且在运行网络时不应进行优化。

2 个答案:

答案 0 :(得分:0)

您可以为此使用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在图形中也为常数,则应该能够只需致电tf.constant(ei)

答案 1 :(得分:0)

对于这种特殊情况,您可以执行以下操作:

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