Keras.max() - 使用tensor.eval()表现不正常

时间:2018-05-31 12:41:28

标签: python tensorflow keras max

我的代码:

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。为什么呢?

1 个答案:

答案 0 :(得分:2)

误解并非来自K.max()K.argmax(),而是来自tensor.eval()

每次调用tensor.eval()时,都会在图表中启动新的运行,因此每次伪随机定义的张量都会填充新值,因为随机种子也会递增(使用seed=1 { {1}}没有修复这些值,它会修复每次运行时生成的伪随机值序列,详情请参阅doc

换句话说,tf.random_normal()xxx.eval()aaa.eval()会为您提供3种不同运行的结果,其中包含3种不同的随机值。

如果您一次评估bbb.eval()xxxaaa,则会获得您期望的结果。

bbb