tensorflow生成常量_TensorFlow:生成一个随机常数

bd96500e110b49cbb3cd949968f18be7.png

In ipython I imported tensorflow as tf and numpy as np and created an TensorFlow InteractiveSession.

When I am running or initializing some normal distribution with numpy input, everything runs fine:

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]])

Just as expected.

...but when I use the Tensorflow normal distribution function:

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

session.run(some_test)

...it raises a Type error saying:

(...)

TypeError: List of Tensors when single Tensor expected

What am I missing here?

The output of:

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

alone returns the exact same thing which np.random.normal generates -> a matrix of shape (2, 2) with values taken from a normal distribution.

解决方案

The tf.constant() op takes a numpy array (or something implicitly convertible to a numpy array), and returns a tf.Tensor whose value is the same as that array. It does not accept a tf.Tensor as its argument.

On the other hand, the tf.random_normal() op returns a tf.Tensor whose value is generated randomly according to the given distribution each time it runs. Since it returns a tf.Tensor, it cannot be used as the argument to tf.constant(). This explains the TypeError (which is unrelated to the use of tf.InteractiveSession, since it occurs when you build the graph).

I'm assuming you want your graph to include a tensor that (i) is randomly generated on its first use, and (ii) constant thereafter. There are two ways to do this:

Use NumPy to generate the random value and put it in a tf.constant(), as you did in your question:

some_test = tf.constant(

np.random.normal(loc=0.0, scale=1.0, size=(2, 2)).astype(np.float32))

(Potentially faster, as it can use the GPU to generate the random numbers) Use TensorFlow to generate the random value and put it in a 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`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值