欢迎访问宙启技术站
智能推送

Theano中的theano.sandbox.rng_mrgMRG_RandomStreams()函数的使用介绍

发布时间:2023-12-23 01:51:10

theano.sandbox.rng_mrgMRG_RandomStreams()函数是Theano中用于生成随机数的函数,它基于MRG(Multiple Recursive Generator)随机数生成算法,可以产生高质量的伪随机数序列。

使用该函数需要首先导入theano.sandbox.rng_mrg模块:

import theano.sandbox.rng_mrg

然后可以创建一个随机数生成器对象:

rng = theano.sandbox.rng_mrg.MRG_RandomStreams(seed=123)

参数seed是用于初始化随机数生成器的种子,用于确定初始状态。同一个种子得到的随机数序列是确定性的,也就是说每次运行时生成的随机数序列是相同的。

接下来,可以调用生成器对象的各种方法来生成不同分布的随机数。

1. 均匀分布:

uniform = rng.uniform(low=0.0, high=1.0, size=(10, 10))

此方法会返回一个10x10的矩阵,其中的元素是从0.0到1.0之间的均匀分布的随机数。

2. 正态分布:

normal = rng.normal(avg=0, std=1.0, size=(10, 10))

此方法会返回一个10x10的矩阵,其中的元素是从均值为0,标准差为1.0的正态分布中采样得到的随机数。

3. 二项分布:

binomial = rng.binomial(n=1, p=0.5, size=(10, 10))

此方法会返回一个10x10的矩阵,其中的元素是从二项分布中采样得到的随机数,n表示试验次数,p表示成功的概率。

4. 泊松分布:

poisson = rng.poisson(lam=1.0, size=(10, 10))

此方法会返回一个10x10的矩阵,其中的元素是从泊松分布中采样得到的随机数,lam表示平均发生率。

5. 广义二项分布:

negative_binomial = rng.negative_binomial(n=1, p=0.5, size=(10, 10))

此方法会返回一个10x10的矩阵,其中的元素是从广义二项分布中采样得到的随机数,n表示成功的次数,p表示成功的概率。

6. 卡方分布:

chi_square = rng.chisquare(df=1, size=(10, 10))

此方法会返回一个10x10的矩阵,其中的元素是从卡方分布中采样得到的随机数,df表示自由度。

在以上的用法中,size参数指定了生成的随机数的形状,可以是一个整数或一个元组。

下面是一个完整的例子,展示了如何使用theano.sandbox.rng_mrgMRG_RandomStreams()函数生成服从正态分布的随机数:

import numpy as np
import theano.sandbox.rng_mrg

# 创建随机数生成器对象
rng = theano.sandbox.rng_mrg.MRG_RandomStreams(seed=123)

# 生成服从正态分布的随机数
normal = rng.normal(avg=0, std=1.0, size=(10, 10))

# 编译并运行函数
f = theano.function([], normal)
result = f()

print(result)

运行结果类似于:

[[-0.41883843 -0.74099652 -0.16383546  0.53749263 -1.55466296 -0.95168686
  -0.31132589  0.89887434 -0.35717825  0.70314264]
 [-0.25220294 -0.85869173 -0.23319821  0.12220229  0.57512357 -0.54225641
   0.38157067 -0.69699734 -0.67856467 -0.69781881]
 [-1.31425774  0.66129088  1.14566012 -0.92532278  1.05433338 -1.59821903
   1.68995741 -0.74123538  0.16988562  0.6191577 ]
 [-1.48909938 -0.80227701  0.21260262 -0.31596033 -0.26426205  1.15537107
   0.66445852 -0.5449927  -0.5546812  -0.31769979]
 [ 0.89630351 -0.20565943  0.49415317 -0.24397084  1.12353447  0.50124979
   0.28399608  0.55990143 -0.09281046  1.16229868]
 [ 1.57676348  0.95461134  0.53728571  0.79739722 -0.32745233 -0.75201537
  -0.09088511 -1.86154873  0.02809083  1.83644213]
 [ 0.40909735 -0.72803115 -0.76877122 -1.95171249  1.10605753 -0.81048429
  -0.47818399 -0.02934222  0.90587574  0.26589071]
 [-1.30584366 -0.31966975  0.04391766 -1.92706382  0.27198908  1.99291643
   0.40354547 -0.04684908 -0.66464225  0.2237553 ]
 [ 0.05543434 -0.52419591  0.23611009 -1.27051082  0.7411831   0.317001
  -0.507536   -0.18920472 -1.33037972 -0.02052317]
 [ 0.77367668 -0.49601728 -0.14906617 -0.35958151  0.67742557  0.12396733
  -0.21466658 -1.21025779 -1.73267879  0.3616322 ]]

这样,我们就成功使用theano.sandbox.rng_mrgMRG_RandomStreams()函数生成了符合正态分布的随机数。