Tensorflow 的占位符初始化不同于 tensorflow 的常量初始化。为什么?



我写了2个功能,以不同方式初始化 Tensorflow 的变量。我不知道为什么结果有所不同。这是使用占位符进行初始化的第一个功能:

第一个功能

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)

有关

谢谢。

在第一个片段中, feed_dict是:

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

因此,首先产生W的随机值,然后为X,然后为b产生一个随机值。但是,在第二个片段中,随机值以XWb的顺序给出。由于生成随机数的顺序不相同,因此值不同。例如,如果您在第一个摘要中的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]]

相关内容

  • 没有找到相关文章

最新更新