我想在张量流中对一维张量的每个元素应用一个条件,从而修改输入张量。例如,如果张量为:
y_true = tf.Variable([0.0, 0.3, 0.0, 0.4, 0.0, 0.1, 0.0, 0.0])
,
我想检查每个元素是否大于0.1
。如果是,则该元素变为1
else 0
。在张量流中怎么做?
我到目前为止所尝试的是,编写一个python函数,然后使用py_func
在tensorflow中使用它,但它无效。见下面的代码 -
y_true = tf.Variable([0.0, 0.3, 0.0, 0.4, 0.0, 0.1, 0.0, 0.0])
with tf.Session() as sess:
y = tf.py_func(round_with_threshold, [y_true], tf.float32)
y.eval()
def round_with_threshold(arr):
threshold = 0.1
rounded_arr = np.zeros(arr.shape[0])
for i in range(arr.shape[0]):
if arr[i]>=threshold:
rounded_arr[i] = 1
else:
rounded_arr[i] = 0
return rounded_arr
是否可以在tensorflow
中执行此操作而无需编写任何python函数?
答案 0 :(得分:0)
您可以执行以下操作:
import tensorflow as tf
y_true = tf.Variable([0.0, 0.3, 0.0, 0.4, 0.0, 0.1, 0.0, 0.0])
comp_op = tf.greater(y_true, 0.1) # returns boolean tensor
cast_op = tf.cast(comp_op, tf.int32) # casts boolean tensor into int32
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(cast_op))
打印:[0 1 0 1 0 0 0 0]