TensorFlow:生成随机常数
TensorFlow: generating a random constant
在 ipython 中,我导入了 tensorflow as tf
和 numpy 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)
Returns:
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))
单独 returns 与 np.random.normal
生成的完全相同的东西 -> 形状为 (2, 2)
的矩阵,其值取自正态分布。
与那个数组的值相同的tf.constant()
op takes a numpy array (or something implicitly convertible to a numpy array), and returns a tf.Tensor
。它不接受tf.Tensor
作为它的参数。
另一方面,tf.random_normal()
op returns a tf.Tensor
其值是每次运行时根据给定分布随机生成的。由于它 returns 一个 tf.Tensor
,它不能用作 tf.constant()
的参数。这解释了 TypeError
(这与 tf.InteractiveSession
的使用无关,因为它在您构建图形时发生)。
我假设您希望图表包含一个张量,(i) 在首次使用时随机生成,(ii) 此后保持不变。有两种方法可以做到这一点:
使用 NumPy 生成随机值并将其放入 tf.constant()
,就像您在问题中所做的那样:
some_test = tf.constant(
np.random.normal(loc=0.0, scale=1.0, size=(2, 2)).astype(np.float32))
(可能更快,因为它可以使用 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`
在 ipython 中,我导入了 tensorflow as tf
和 numpy 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)
Returns:
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))
单独 returns 与 np.random.normal
生成的完全相同的东西 -> 形状为 (2, 2)
的矩阵,其值取自正态分布。
与那个数组的值相同的tf.constant()
op takes a numpy array (or something implicitly convertible to a numpy array), and returns a tf.Tensor
。它不接受tf.Tensor
作为它的参数。
另一方面,tf.random_normal()
op returns a tf.Tensor
其值是每次运行时根据给定分布随机生成的。由于它 returns 一个 tf.Tensor
,它不能用作 tf.constant()
的参数。这解释了 TypeError
(这与 tf.InteractiveSession
的使用无关,因为它在您构建图形时发生)。
我假设您希望图表包含一个张量,(i) 在首次使用时随机生成,(ii) 此后保持不变。有两种方法可以做到这一点:
使用 NumPy 生成随机值并将其放入
tf.constant()
,就像您在问题中所做的那样:some_test = tf.constant( np.random.normal(loc=0.0, scale=1.0, size=(2, 2)).astype(np.float32))
(可能更快,因为它可以使用 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`