Tensorflow 使用大于等于切片张量的tf.boolean_掩码
我试图使用tf.boolean_mask从张量中选择某些值Tensorflow 使用大于等于切片张量的tf.boolean_掩码,tensorflow,Tensorflow,我试图使用tf.boolean_mask从张量中选择某些值 myArray = tf.random_normal([6], mean=1, stddev=4, seed = 1) with tf.Session() as test_a: myMask = tf.greater_equal(myArray, 0.5) myScores = tf.boolean_mask( myArray, myMask ) print("myArray = ", myArray.eval
myArray = tf.random_normal([6], mean=1, stddev=4, seed = 1)
with tf.Session() as test_a:
myMask = tf.greater_equal(myArray, 0.5)
myScores = tf.boolean_mask( myArray, myMask )
print("myArray = ", myArray.eval())
print("myMask = ", myMask.eval())
print("myScores = ", myScores.eval())
对此,我得到以下信息
myArray = [-2.24527287 6.93839502 1.26131749 -8.77081585 1.39699364 3.36489725]
myMask = [False True True True False False]
myScores = [ 2.71667314 1.12839425 1.47780943 1.50100374]
我原以为会得到的
myArray = [-2.24527287 6.93839502 1.26131749 -8.77081585 1.39699364 3.36489725]
myMask = [False True True False True True]
myScores = [ 6.93839502 1.26131749 1.39699364 3.36489725]
我该怎么做?好问题!这让我困惑了一分钟,答案最终是微不足道的,但却是tensorflow如何运作的重要一课 首先是一些工作代码:
import tensorflow as tf
myArray = tf.random_normal([6], mean=1, stddev=4, seed = 1)
myMask = tf.greater_equal(myArray, 0.5)
myScores = tf.boolean_mask( myArray, myMask )
with tf.Session() as sess:
print(sess.run([myArray, myMask, myScores]))
结果:
[array([-2.2452729, 6.938395 , 1.2613175, -8.770817 , 1.3969936, 3.3648973], dtype=float32),
array([False, True, True, False, True, True]),
array([6.938395 , 1.2613175, 1.3969936, 3.3648973], dtype=float32)]
请注意,myArray是一个OP,不是一个变量。在调用sess.run
(在本例中为eval
,但使用eval
使其不那么明显)时,会计算OP(操作的缩写)
变量,例如myVar=tf.variable(…)
从一个调用到sess.run
到另一个调用持续存在。因为myArray是一个OP,所以每次对tensorflow图执行任何操作时都会重新计算它。因为您在3个单独的实例上调用了该图,所以在每次调用中myArray有3个不同的值。当然,您只在第一个实例中打印myArray,并错误地认为它保持静态
请注意,在我发布的修改后的代码中,我现在在一个sess.run
call中请求所有3个变量,因此它们都使用相同的myArray值,并且所有结果都与预期一致