Theano中的theano.sandbox.rng_mrgMRG_RandomStreams()函数的使用介绍
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()函数生成了符合正态分布的随机数。
