如何在给定范围内生成随机数作为 Tensorflow 变量

Posted

技术标签:

【中文标题】如何在给定范围内生成随机数作为 Tensorflow 变量【英文标题】:How to generate random number in a given range as a Tensorflow variable 【发布时间】:2017-03-06 06:04:53 【问题描述】:

我正在尝试使用正态分布来计算随机数。

tf.truncated_normal(shape, stddev=0.1,seed=1, mean=0)

但我得到的数字是小数点后有很多位的浮点数,像这样:0.14845988

有没有办法让它在给定的范围内生成整数,如[min, max]

【问题讨论】:

对于 tf.truncated_normal 仅支持浮点类型。 tf.random_uniform 支持 minval、maxval 和 float32、float64、int32 或 int64。 现在可以了,谢谢 :) 我会回答,所以我们可以关闭它 【参考方案1】:

更新:Tensorflow >= r2.0

https://www.tensorflow.org/guide/random_numbers 上的文档说 “TF 1.x 中的旧 RNG,例如 tf.random.uniform 和 tf.random.normal 尚未贬值,但强烈建议不要使用”,相反,如果您希望每次调用,建议实例化 tf.random.Generator 对象到随机数生成器以产生不同的结果或使用tf.random.stateless_uniform,如果您可以在同一台机器上重复调用产生相同的结果。

文档中的示例:

确定性和有状态:生成器在重复调用时产生不同的值。这些值在第 n 次调用时取决于初始化生成器时的种子。

g1 = tf.random.Generator.from_seed(1)
print(g1.normal(shape=[2, 3]))
g2 = tf.random.get_global_generator()
print(g2.normal(shape=[2, 3]))

产量

tf.Tensor(
[[ 0.43842274 -0.53439844 -0.07710262]
 [ 1.5658046  -0.1012345  -0.2744976 ]], shape=(2, 3), dtype=float32)
tf.Tensor(
[[-0.9323887   0.3864468   1.5209497 ]
 [ 0.54473144 -0.6031506  -0.47044003]], shape=(2, 3), dtype=float32)

非确定性和有状态:生成器在重复调用时会产生不同的值,这些值是什么取决于初始化生成器时的操作系统和系统时间。

g = tf.random.Generator.from_non_deterministic_state()
print(g.normal(shape=[2, 3]))

产量

tf.Tensor(
[[-1.3158257   2.4625542   1.3490729 ]
 [ 0.77426016 -2.261468   -0.4887435 ]], shape=(2, 3), dtype=float32)

无状态:每次都返回相同的值。可以在 Tensorflow Core 文档的 tf.random 部分找到其中几种类型的函数。它们都遵循 tf.random.stateless_DISTRIBUTIONNAME 格式。例如:

ints = tf.random.stateless_uniform([10], 
                                   seed = (2,3),
                                   minval=None, 
                                   maxval=None, 
                                   dtype=tf.int)

r1.x >= TensorFlow > r0.11 tf.random.uniform 支持 minvalmaxval 和 dtypes float32float64int32int64

tf.random.uniform(
shape,
minval=0,
maxval=None,
dtype=tf.dtypes.float32,
seed=None,
name=None)

参数:

shape:一维整数张量或 Python 数组。输出张量的形状。 minval:dtype 类型的 0-D 张量或 Python 值。要生成的随机值范围的下限。默认为 0。 ma​​xval:dtype 类型的 0-D 张量或 Python 值。要生成的随机值范围的上限。如果 dtype 是浮点数,则默认为 1。 dtype:输出的类型:float32、float64、int32 或 int64。 种子:一个 Python 整数。用于为分发创建随机种子。有关行为,请参见 set_random_seed。 名称:操作的名称(可选)。

TensorFlow

tf.random_uniform 支持 minvalmaxval 和 dtypes float32float64int32int64

tf.random_uniform(
    shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name=None)

【讨论】:

这些年来它已成为tf.random.uniform() :) tensorflow.org/api_docs/python/tf/random/uniform

以上是关于如何在给定范围内生成随机数作为 Tensorflow 变量的主要内容,如果未能解决你的问题,请参考以下文章

在原点的给定半径范围内和外部生成随机坐标

随机数生成器不会使用输入字段中的值生成给定范围内的预期数字[重复]

在不重复的范围内生成随机数

Java - 在给定范围内打印随机IP地址

在VB中,如何生成某个范围内的随机整数?

在python中生成多边形范围内的随机点数