Почему TensorFlow производит другой вывод, даже если я устанавливаю начальную переменную? - PullRequest
1 голос
/ 29 мая 2020

В этом коде я пытаюсь найти максимальный и максимальный индекс некоторых сгенерированных данных.

Я пытаюсь убедиться, что получаю правильный максимальный балл.

Проблема: Если я сдвигаю 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)) 

1 Ответ

0 голосов
/ 29 мая 2020

Каждый раз, когда вы вызываете eval или sess.run, тензоры box_confidence, boxes и box_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)) 
...