Theano 随机数流变量¶

In [1]:

  1. import theano
  2. import theano.tensor as T
  3. import numpy as np
  1. Using gpu device 1: Tesla C2075 (CNMeM is disabled)

Theano 的随机数变量由 theano.sandbox.rng_mrg 中的 MRG_RandomStreams 实现(sandbox 表示是实验代码):

In [2]:

  1. from theano.sandbox.rng_mrg import MRG_RandomStreams

新建一个 MRG_RandomStreams(seed=12345, use_cuda=None) 实例:

In [3]:

  1. srng = MRG_RandomStreams()

它支持以下方法:

  • normal(size, avg=0.0, std=1.0, ndim=None, dtype=None, nstreams=None)
    • 产生指定形状的、服从正态分布 $N(avg, std)$ 的随机数变量,默认为标准正态分布
  • uniform(size, low=0.0, high=1.0, ndim=None, dtype=None, nstreams=None)
    • 产生指定形状的、服从均匀分布 $U(low, high)$ 的随机数变量,默认为 0-1 之间的均匀分布
  • binomial(size=None, n=1, p=0.5, ndim=None, dtype='int64', nstreams=None)
    • 产生指定形状的、服从二项分布 $B(n,p)$ 的随机数变量
  • multinomial(size=None, n=1, pvals=None, ndim=None, dtype='int64', nstreams=None)
    • 产生指定形状的、服从多项分布的随机数变量
      与 np.random.random 不同,它产生的是随机数变量,而不是随机数数组,因此可以将 size 作为参数传给它:

In [4]:

  1. rand_size = T.vector(dtype="int64")
  2.  
  3. rand_normal = srng.normal(rand_size.shape)
  4. rand_uniform = srng.uniform(rand_size.shape)
  5. rand_binomial = srng.binomial(rand_size.shape)
  6.  
  7. f_rand = theano.function(inputs = [rand_size],
  8. outputs = [rand_normal, rand_uniform, rand_binomial])
  9.  
  10. print f_rand(range(5))[0]
  11. print f_rand(range(5))[1]
  12. print f_rand(range(5))[2]
  1. [ 0.10108768 -1.64354193 0.71042836 -0.77760422 0.06291872]
  2. [ 0.23193923 0.71880513 0.03122572 0.97318739 0.99260223]
  3. [0 1 0 1 1]

原文: https://nbviewer.jupyter.org/github/lijin-THU/notes-python/blob/master/09-theano/09.12-random-streams.ipynb