TensorFlow:生成随机常量

时间:2016-02-26 21:01:26

标签: python numpy initialization tensorflow interactive-session

在ipython中,我导入了tensorflow as tfnumpy as np并创建了TensorFlow InteractiveSession。 当我使用numpy输入运行或初始化一些正常分布时,一切运行正常:

some_test = tf.constant(np.random.normal(loc=0.0, scale=1.0, size=(2, 2)))
session.run(some_test)

返回:

array([[-0.04152317,  0.19786302],
       [-0.68232622, -0.23439092]])

正如预期的那样。

...但是当我使用Tensorflow正态分布函数时:

some_test = tf.constant(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32))
session.run(some_test)

...它引发了一个类型错误:

(...)
TypeError: List of Tensors when single Tensor expected

我在这里缺少什么?

输出:

sess.run(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32))

单独返回np.random.normal生成的完全相同的内容 - >形状(2, 2)的矩阵,其值取自正态分布。

1 个答案:

答案 0 :(得分:10)

tf.constant() op采用一个numpy数组(或隐式转换为numpy数组的东西),并返回一个tf.Tensor,其值与该数组相同。它接受tf.Tensor作为其参数。

另一方面,tf.random_normal() op返回tf.Tensor,其值在每次运行时根据给定的分布随机生成。由于它返回tf.Tensor,因此不能将其用作tf.constant()的参数。这解释了TypeError(与使用tf.InteractiveSession无关,因为它是在您构建图表时发生的。)

我假设您希望图表包含一个张量,其中(i)在第一次使用时随机生成,(ii)此后不变。有两种方法可以做到这一点:

  1. 使用NumPy生成随机值并将其放入tf.constant(),就像您在问题中所做的那样:

    some_test = tf.constant(
        np.random.normal(loc=0.0, scale=1.0, size=(2, 2)).astype(np.float32))
    
  2. (可能更快,因为它可以使用GPU生成随机数)使用TensorFlow生成随机值并将其放入tf.Variable

    some_test = tf.Variable(
        tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32)
    sess.run(some_test.initializer)  # Must run this before using `some_test`