這個方法能夠供你在多個函數中共享某個值,使用方法爲python
```python import theato.tensor as T from theano import function from theano import shared inc = T.iscalar('inc') state = shared(0) #用 0 初始化state f = function([inc],state,updates=[(state,state+inc)]) ff = function([inc],state,updates=[(state,state+inc)]) f(10) #輸出0 這裏輸出的值數state,由於在這裏,是先輸出state,而後更新state,所以輸出0,而後state變爲10 ff(100) #輸出10,state變爲110 ```
這個方式是爲函數的輸入設置默認值。對於某些函數,好比logistic函數爲11+e−1,其中咱們通常寫成1去加e−1,所以咱們想設置param=1,但有時我想改變他,所以咱們能夠寫成這樣dom
```python pprofix = T.dscalar('pprofix') x = T.dscalar('x') y = 1 / ( pprofix + Math.exp(-x)) logistic = function([x,Param(pprofix,efault = 1]) #調用logistic時我能夠不爲pprofix賦值 logistic(10) logistic(10,10) # 我也能夠按照下面這個方法寫,我在dscalar()中給pprofix設置了個名字,在這裏就能夠用了, # 若是想給他更名,在Param設置name值便可 logistic(10,pprofix = 10 ```
當咱們一個公式用的變量是shared時候,我想計算這個公式,可是不想更新shared變量的值時,我就要用givens這個方法,具體使用以下函數
```python inc = T.dscalar('inc') state = shared(0) foo = T.scalar(dtype = state.dtype) fn = state**2+inc skip_share = function([inc,foo],fn,givens=[(state,foo)]) #這裏雖然修改state,但這是局部修改,至關於生成了一個局部變量,對我總體的共享變量值是不變的 ```
如題,這個也就是產生隨機數的函數,調用起來比較麻煩,由於要遵循theano的規則,下面我展現一下spa
```python from theano.tensor.randomstreams import RandomStreams #傳給他種子,相似c中的srand() srng = RandomStreams(seed=234) #它能夠生成兩種類型的隨機數,每種類型的都要用元組傳入矩陣的row和cu rv_n = srng.normal((2,2)) #生成的隨機數有正有負,大小也不肯定,不過比較小,最大也是個位數 rv_u = srng.uniform((2,2)) #生成的隨機數是大於0的,而且小於1的,很是規則,固然都是生成2*2的矩陣 #調用時要用function,也就是他麻煩的地方 f = function([],rv_u) #不須要參數,因此不用傳參 g = function([],rv_u,no_default_update=True) #生成一組隨機數之後,就再也不從新生隨機數,若是一直用這組隨機數的時候建議這樣寫 ```
1.seed設置
seed除了能夠爲全體隨機數設置也能夠爲單個隨機數設置,方法略有不一樣scala
```python #全局設置 RandomStreams(seed = 12233) #局部設置比較麻煩 rvget = rv.rng.get_value(borrow = True) rvget.seed(1212) rv.rng.set_value(rvget,borrow=True) ``