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

How to generate random number in a given range as a Tensorflow variable

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

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

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

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

更新: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)

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

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)

无状态:Returns 每次都是相同的值。在 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:0-D Tensor 或 Python 类型 dtype 的值。要生成的随机值范围的下限。默认为 0。
  • maxval:0-D Tensor 或 Python 类型 dtype 的值。要生成的随机值范围的上限。如果 dtype 是浮点数,则默认为 1。
  • dtype:输出的类型:float32、float64、int32或int64。
  • 种子:一个Python整数。用于为分发创建随机种子。有关行为,请参阅 set_random_seed。
  • 名称:操作的名称(可选)。

TensorFlow <= r0.11

tf.random_uniform 支持 minvalmaxval 和数据类型 float32float64int32int64

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