我的代码:
import numpy
numpy.set_printoptions(threshold=numpy.nan)
with tf.Session() as test_a:
box_confidence = tf.random_normal([3, 4, 5, 1], mean=1, stddev=4, seed = 1)
boxes = tf.random_normal([3,4, 5, 4], mean=1, stddev=4, seed = 1)
box_class_probs = tf.random_normal([3, 4, 5, 3], mean=1, stddev=4, seed = 1)
xxx = box_confidence * box_class_probs
aaa = K.argmax(xxx, axis=-1)
bbb = K.max(xxx, axis=-1, keepdims=False)
print(xxx.eval())
print(xxx.get_shape())
print(aaa.eval())
print(aaa.get_shape())
根据我的理解,aaa
取最后一个维度的xxx
的最大值(第四维三个数字中的最大值)的索引。你知道吗
所以。。。给定张量值(用固定种子初始化),aaa
的第一行应该是0 2 0 2 0
,对吗?我从输出中得到的是1 1 1 2 1
。为什么?你知道吗
误解不是来自
K.max()
或K.argmax()
,而是来自tensor.eval()
。你知道吗每次调用
tensor.eval()
时,都会在图中启动一个新的运行,因此每次伪随机定义的张量都会填充新的值,因为它们的随机种子也会递增(使用seed=1
fortf.random_normal()
不会修复值,而是修复每次运行时生成的伪随机值序列,有关详细信息,请参见doc)。你知道吗换言之,
xxx.eval()
、aaa.eval()
和bbb.eval()
给出了下面3个不同随机值的3个不同运行的结果。你知道吗如果您在一次运行(
test_a.run([xxx, aaa, bbb])
)中同时计算xxx
、aaa
和bbb
,您将得到预期的结果。你知道吗相关问题 更多 >
编程相关推荐