首页 > 解决方案 > 即使我设置种子变量,为什么 TensorFlow 会产生不同的输出?

问题描述

在这段代码中,我试图找到一些生成数据的 Max 和 Max Index。

我正在尝试验证我是否获得了正确的最高分数。

问题:即使我正在设置种子变量,如果我Line 1向下移动,生成的数据也会得到不同的输出。Line 2这使得调试我的代码变得很困难。有什么建议么?

from keras import backend as K
import tensorflow as tf
box_confidence = tf.random_normal([19, 19 , 5, 1], mean=1, stddev=4, seed = 1)
boxes = tf.random_normal([19, 19, 5, 4], mean=1, stddev=4, seed = 1)
box_class_probs = tf.random_normal([19, 19, 5, 80], mean=1, stddev=4, seed = 1)

box_scores = box_confidence * box_class_probs
box_classes = K.argmax(box_scores,axis=-1)
box_class_scores = K.max(box_scores,axis=-1)

print("box_scores")
print(box_scores.shape)
print("box_classes")
print(box_classes.shape)
print("box_class_scores")
print(box_class_scores.shape)

with tf.Session() as sess:
    scores_for_box1_anch1 = box_scores[1,1,1,:].eval()
    max_scre_box1_anch1 = box_class_scores[1,1,1].eval()   ###->>Line 1     
    max_scre_class_box1_anch1 = box_classes[1,1,1].eval()  ###->>Line 2

    print("scores_for_box1_anch1 : " + str(scores_for_box1_anch1))
    print("*max_scre_class_box1_anch1: " + str(max_scre_class_box1_anch1))  
    print("*max_scre_box1_anch1 : " + str(max_scre_box1_anch1)) 

标签: pythontensorflow

解决方案


每次调用evalor时,sess.run张量box_confidence都会得到新的随机值。如果要获得与相同随机值对应的结果,则需要在同一个调用中计算它们:boxesbox_class_probs

with tf.Session() as sess:
    scores_for_box1_anch1, max_scre_box1_anch1, max_scre_class_box1_anch1 = sess.run([
        box_scores[1,1,1,:], box_class_scores[1,1,1], box_classes[1,1,1]])
    print("scores_for_box1_anch1 : " + str(scores_for_box1_anch1))
    print("*max_scre_class_box1_anch1: " + str(max_scre_class_box1_anch1))  
    print("*max_scre_box1_anch1 : " + str(max_scre_box1_anch1)) 

推荐阅读