我正在尝试评估向量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的新手,任何帮助都将不胜感激!
答案 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}))