通过tf.random_normal了解keras.backend.max的用法

时间:2018-11-10 15:45:51

标签: tensorflow keras

import numpy as np
import tensorflow as tf
from keras import backend as K

sess = tf.InteractiveSession()

box_scores1 = tf.constant([[[ 9.188682,  11.484599 ],
                      [10.06533,    7.557296 ]],

                    [[10.099248,  10.591225 ],
                     [10.592823 ,  7.8770704]]])

box_scores2 = tf.random_normal([2,2,2], mean=10, stddev=1, dtype=tf.float32, seed = 1)

box_class_scores1 = K.max(box_scores1, axis=-1)
box_class_scores2 = K.max(box_scores2, axis=-1)

print(box_scores1.eval())
print(box_scores2.eval())

print(box_class_scores1.eval())
print(box_class_scores2.eval())

输出:

[[[ 9.188682  11.484599 ]
  [10.06533    7.557296 ]]

 [[10.099248  10.591225 ]
  [10.592823   7.8770704]]]
[[[ 9.188682  11.484599 ]
  [10.06533    7.557296 ]]

 [[10.099248  10.591225 ]
  [10.592823   7.8770704]]]
[[11.484599 10.06533 ]
  [10.591225 10.592823]]
[[10.242094 10.515779]
 [12.083789 11.397354]]

因此,我们可以看到box_scores1和box_scores2中的值相同,但是应用max操作后获得的结果不同。 box_class_scores1和box_class_scores2的值如何不同?

1 个答案:

答案 0 :(得分:0)

您的问题与max函数无关,但是对tensorflow造成了误解,因为它的大多数操作都是符号性的,因此当您使用tf.random_mormal时,它不会产生随机数,但是具有给定均值和标准分布的符号正态分布。

然后,每次您评估此分布时,它会生成不同的输出,因此您的第一个评估看起来不错,但是第二个评估产生了一个不同的输出,该输出被赋予max,因此产生的输出不同于仅给出恒定的向量。