Инициализация заполнителя Tensorflow отличается от постоянной инициализации tenorflow.Зачем? - PullRequest
0 голосов
/ 25 февраля 2019

Я написал 2 функции, которые по-разному инициализируют переменные tenorflow .Я не знаю, почему результаты разные.Вот первая функция, использующая заполнитель для инициализации:

Первая функция

import tensorflow as tf
import numpy as np

def linear_function():
    np.random.seed(1)

    X = tf.placeholder(dtype = tf.float64, name='X')
    W = tf.placeholder(dtype = tf.float64, name='W')
    b = tf.placeholder(dtype = tf.float64, name='b')
    Y = tf.add(tf.matmul(W, X), b)

    sess = tf.Session()

    result = sess.run(Y, feed_dict={W:np.random.randn(4,3), X:np.random.randn(3,1), b:np.random.randn(4,1)})
    sess.close()
    return result
print( "result = " + str(linear_function()))

И результат:

result = [[-1.98748544]
 [-2.76826248]
 [-0.78635415]
 [-2.77463846]]

Вторая функция

Вторая функция использует tf.constant для инициализации переменных:

def linear_function():

    np.random.seed(1)

    X = tf.constant(np.random.randn(3,1), name ="X")
    W = tf.constant(np.random.randn(4,3), name ="X")
    b = tf.constant(np.random.randn(4,1), name ="X")
    Y = tf.add(tf.matmul(W,X), b)

    sess = tf.Session()
    result = sess.run(Y)

    sess.close()

    return result

print( "result = " + str(linear_function()))

Результат:

result = [[-2.15657382]
 [ 2.95891446]
 [-1.08926781]
 [-0.84538042]]

В чем проблема?Это связано с np.random.seed(1)?

Спасибо.

1 Ответ

0 голосов
/ 25 февраля 2019

В первом фрагменте feed_dict:

{W:np.random.randn(4,3), X:np.random.randn(3,1), b:np.random.randn(4,1)}

Итак, сначала получается случайное значение для W, затем для X и затем для b.Однако во втором фрагменте случайные значения задаются в порядке X, W и b.Поскольку порядок генерирования случайных чисел не одинаков, значения различаются.Например, если вы правильно измените порядок в feed_dict в первом фрагменте, вы получите тот же результат, что и во втором:

import tensorflow as tf
import numpy as np

def linear_function():
    np.random.seed(1)

    X = tf.placeholder(dtype = tf.float64, name='X')
    W = tf.placeholder(dtype = tf.float64, name='W')
    b = tf.placeholder(dtype = tf.float64, name='b')
    Y = tf.add(tf.matmul(W, X), b)

    sess = tf.Session()

    result = sess.run(Y, feed_dict={X:np.random.randn(3,1), W:np.random.randn(4,3), b:np.random.randn(4,1)})
    sess.close()
    return result

print( "result = " + str(linear_function()))

Вывод:

result = [[-2.15657382]
 [ 2.95891446]
 [-1.08926781]
 [-0.84538042]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...