Tensorflow: tf.random_normal получить разные результаты с начальным начальным числом - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу сделать СЛУЧАЙНЫЙ ТЕНЗОР x и назначить ЖЕ ТЕНЗОР для VARIABLE y. Это означает, что они должны иметь одинаковое значение во время Session.run (). Но, оказывается, дело не в этом. Так почему у не равен х? Пожалуйста, помогите анализу и подтвердите приведенный ниже пример. Спасибо.

Обновление: После применения sess.run (x) и sess.run (y) несколько раз подряд подтвердил, что x меняется каждый раз, пока y остается стабильным. Почему?

import tensorflow as tf

x = tf.random_normal([3], seed = 1)
y = tf.Variable(initial_value = x) # expect y get the same random tensor as x

diff = tf.subtract(x, y)
avg = tf.reduce_mean(diff)

sess = tf.InteractiveSession()
sess.run(y.initializer)

print('x0:', sess.run(x))
print('y0:', sess.run(y))
print('x1:', sess.run(x))
print('y1:', sess.run(y))
print('x2:', sess.run(x))
print('y2:', sess.run(y))
print('diff:', sess.run(diff))
print('avg:', sess.run(avg)) # expected as 0.0

sess.close()

Ouputs: TENSOR x меняет каждую sess.run (x)

x0: [ 0.55171245 -0.13107552 -0.04481386]
y0: [-0.8113182   1.4845988   0.06532937]
x1: [-0.67590594  0.28665832  0.3215887 ]
y1: [-0.8113182   1.4845988   0.06532937]
x2: [1.2409041  0.44875884 0.33140722]
y2: [-0.8113182   1.4845988   0.06532937]
diff: [ 1.2404865  -1.4525002   0.05412297]
avg: -0.04116

1 Ответ

0 голосов
/ 07 ноября 2018

Истинная причина в том, что: x = tf.random_normal (seed = initial_seed) развивается каждый раз, применяя sess.run (), но выдает ту же серию при повторном запуске. Мы получим одни и те же тензоры x0-x1-x2 каждый раз, когда запускаем код ... Здесь дает некоторое объяснение случайного начального числа.

Чтобы гарантировать тот же самый x после первого запуска, нам нужно повторно инициализировать его. Не уверен, что есть достойный способ для моего случая. Но мы можем установить x как переменную и инициализировать с фиксированным начальным числом. Либо tf.get_variable, либо tf.Variable в порядке. Я считаю этот ответ подходящим для моего вопроса.

Вот мой окончательный код. Это работает.

import tensorflow as tf

initializer = tf.random_normal_initializer(seed = 1)
x = tf.get_variable(name = 'x', shape = [3], dtype = tf.float32, initializer = initializer)
y = tf.Variable(initial_value = x)

diff = tf.subtract(x, y)
avg = tf.reduce_mean(diff)

sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())

print('x0:', sess.run(x))
print('y0:', sess.run(y))

print('x1:', sess.run(x))
print('y1:', sess.run(y))

print('x2:', sess.run(x))
print('y2:', sess.run(y))

print('diff:', sess.run(diff))
print('avg:', sess.run(avg))
sess.close()

x0: [-0.8113182   1.4845988   0.06532937]
y0: [-0.8113182   1.4845988   0.06532937]
x1: [-0.8113182   1.4845988   0.06532937]
y1: [-0.8113182   1.4845988   0.06532937]
x2: [-0.8113182   1.4845988   0.06532937]
y2: [-0.8113182   1.4845988   0.06532937]
diff: [0. 0. 0.]
avg: 0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...