根据条件修改1D张量

时间:2017-02-24 11:10:23

标签: tensorflow

我想在张量流中对一维张量的每个元素应用一个条件,从而修改输入张量。例如,如果张量为:

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函数?

1 个答案:

答案 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]