在张量流中评估向量y的每个元素的条件

时间:2017-12-10 04:21:30

标签: tensorflow

我正在尝试评估向量y的每个元素的条件,以便我得到一个向量i’th元素告诉我y[i]是否满足条件。有没有办法在不使用循环的情况下执行此操作?到目前为止,我尝试了以下内容:

dim = 3

x = tf.placeholder(tf.float32, shape = [dim])
y = tf.log(x)

tf1 = tf.constant(1)
tf0 = tf.constant(0)


x_0 = tf.tile([x[0]], [dim])

delta = tf.cond(tf.equal(y,x_0),  tf1, tf0))
sess = tf.Session()
a = np.ones((1,3))

print(sess.run(delta, feed_dict={x:a}))

对于给定的输入x,我希望delta[i] 1 y[i] = x[0]0。{{1}}。

我收到错误

  

形状必须具有相同的等级,但对于' Select_2' (op:' select')输入形状[3​​],[],[]

我是TensorFlow的新手,任何帮助都将不胜感激!

2 个答案:

答案 0 :(得分:1)

似乎你有错误,因为你试图比较不同形状的张量。

该工作代码:

import tensorflow as tf
import numpy as np

dim = 3

x = tf.placeholder(tf.float32, shape=(1, dim), name='ktf')
y = tf.log(x)

delta = tf.cast(tf.equal(y, x[0]), dtype=tf.int32)

sess = tf.Session()
a = np.ones((1, 3))

print(sess.run(delta, feed_dict={x: a}))

答案 1 :(得分:0)

对于你的情况,没有必要使用tf.cond,你可以使用tf.equal,这样做没有循环,并且由于广播,没有必要平铺它。只需使用:

dim = 3

x = tf.placeholder(tf.float32, shape = [dim])
y = tf.log(x)

delta = tf.cast(tf.equal(y,x[0]),tf.float32) # or integer type

sess = tf.Session()
a = np.ones((1,3))

print(sess.run(delta, feed_dict={x:a}))