theano 学习笔记

shared 使用

这个方法可以供你在多个函数中共享某个值,使用方法为

```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
```

Param 使用

这个方式是为函数的输入设置默认值。对于某些函数,比如logistic函数为11+e1,其中我们一般写成1去加e1,因此我们想设置param=1,但有时我想改变他,因此我们可以写成这样

```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
```

givens使用

当我们一个公式用的变量是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,但这是局部修改,相当于生成了一个局部变量,对我整体的共享变量值是不变的
```

RandomStreams使用

如题,这个也就是产生随机数的函数,调用起来比较麻烦,因为要遵循theano的规则,下面我展示一下

```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除了可以为全体随机数设置也可以为单个随机数设置,方法略有不同

```python
#全局设置
RandomStreams(seed = 12233)
#局部设置比较麻烦
rvget = rv.rng.get_value(borrow = True)
rvget.seed(1212)
rv.rng.set_value(rvget,borrow=True)
``
@%28%u6DF1%u5EA6%u5B66%u4E60%29%0Athearo%u4F7F%u7528%u65B9%u6CD5%0A%3D%3D%3D%0A%23%23%23shared%20%u4F7F%u7528%0A%u8FD9%u4E2A%u65B9%u6CD5%u53EF%u4EE5%u4F9B%u4F60%u5728%u591A%u4E2A%u51FD%u6570%u4E2D%u5171%u4EAB%u67D0%u4E2A%u503C%uFF0C%u4F7F%u7528%u65B9%u6CD5%u4E3A%0A%20%20%20%20%60%60%60python%0A%20%20%20%20import%20theato.tensor%20as%20T%0A%20%20%20%20from%20theano%20import%20function%0A%20%20%20%20from%20theano%20import%20shared%0A%20%20%20%20%0A%20%20%20%20inc%20%3D%20T.iscalar%28%27inc%27%29%0A%20%20%20%20state%20%3D%20shared%280%29%20%23%u7528%200%20%u521D%u59CB%u5316state%0A%20%20%20%20f%20%3D%20function%28%5Binc%5D%2Cstate%2Cupdates%3D%5B%28state%2Cstate+inc%29%5D%29%0A%20%20%20%20ff%20%3D%20function%28%5Binc%5D%2Cstate%2Cupdates%3D%5B%28state%2Cstate+inc%29%5D%29%0A%20%20%20%20%0A%20%20%20%20f%2810%29%20%23%u8F93%u51FA0%20%20%u8FD9%u91CC%u8F93%u51FA%u7684%u503C%u6570state%2C%u56E0%u4E3A%u5728%u8FD9%u91CC%uFF0C%u662F%u5148%u8F93%u51FAstate%2C%u7136%u540E%u66F4%u65B0state%uFF0C%u56E0%u6B64%u8F93%u51FA0%uFF0C%u7136%u540Estate%u53D8%u4E3A10%0A%20%20%20%20ff%28100%29%20%23%u8F93%u51FA10%uFF0Cstate%u53D8%u4E3A110%0A%20%20%20%20%60%60%60%0A%23%23%23Param%20%u4F7F%u7528%0A%u8FD9%u4E2A%u65B9%u5F0F%u662F%u4E3A%u51FD%u6570%u7684%u8F93%u5165%u8BBE%u7F6E%u9ED8%u8BA4%u503C%u3002%u5BF9%u4E8E%u67D0%u4E9B%u51FD%u6570%uFF0C%u6BD4%u5982logistic%u51FD%u6570%u4E3A%24%24%5Cfrac%7B1%7D%7B1+e%5E%7B-1%7D%7D%24%24%2C%u5176%u4E2D%u6211%u4EEC%u4E00%u822C%u5199%u62101%u53BB%u52A0%24%24e%5E%7B-1%7D%24%24%uFF0C%u56E0%u6B64%u6211%u4EEC%u60F3%u8BBE%u7F6Eparam%3D1%2C%u4F46%u6709%u65F6%u6211%u60F3%u6539%u53D8%u4ED6%uFF0C%u56E0%u6B64%u6211%u4EEC%u53EF%u4EE5%u5199%u6210%u8FD9%u6837%0A%0A%20%20%20%20%60%60%60python%0A%20%20%20%20pprofix%20%3D%20T.dscalar%28%27pprofix%27%29%0A%20%20%20%20x%20%3D%20T.dscalar%28%27x%27%29%0A%20%20%20%20y%20%3D%201%20/%20%28%20pprofix%20+%20Math.exp%28-x%29%29%0A%20%20%20%20logistic%20%3D%20function%28%5Bx%2CParam%28pprofix%2Cefault%20%3D%201%5D%29%0A%20%20%20%20%23%u8C03%u7528logistic%u65F6%u6211%u53EF%u4EE5%u4E0D%u4E3Approfix%u8D4B%u503C%0A%20%20%20%20logistic%2810%29%0A%20%20%20%20logistic%2810%2C10%29%0A%20%20%20%20%23%20%u6211%u4E5F%u53EF%u4EE5%u6309%u7167%u4E0B%u9762%u8FD9%u4E2A%u65B9%u6CD5%u5199%uFF0C%u6211%u5728dscalar%28%29%u4E2D%u7ED9pprofix%u8BBE%u7F6E%u4E86%u4E2A%u540D%u5B57%uFF0C%u5728%u8FD9%u91CC%u5C31%u53EF%u4EE5%u7528%u4E86%uFF0C%0A%20%20%20%20%23%20%u5982%u679C%u60F3%u7ED9%u4ED6%u6539%u540D%uFF0C%u5728Param%u8BBE%u7F6Ename%u503C%u5373%u53EF%0A%20%20%20%20logistic%2810%2Cpprofix%20%3D%2010%0A%20%20%20%20%60%60%60%0A%23%23%23givens%u4F7F%u7528%0A%u5F53%u6211%u4EEC%u4E00%u4E2A%u516C%u5F0F%u7528%u7684%u53D8%u91CF%u662Fshared%u65F6%u5019%uFF0C%u6211%u60F3%u8BA1%u7B97%u8FD9%u4E2A%u516C%u5F0F%uFF0C%u4F46%u662F%u4E0D%u60F3%u66F4%u65B0shared%u53D8%u91CF%u7684%u503C%u65F6%uFF0C%u6211%u5C31%u8981%u7528givens%u8FD9%u4E2A%u65B9%u6CD5%uFF0C%u5177%u4F53%u4F7F%u7528%u5982%u4E0B%0A%0A%20%20%20%20%60%60%60python%0A%20%20%20%20inc%20%3D%20T.dscalar%28%27inc%27%29%0A%20%20%20%20state%20%3D%20shared%280%29%0A%20%20%20%20foo%20%3D%20T.scalar%28dtype%20%3D%20state.dtype%29%0A%20%20%20%20fn%20%3D%20state**2+inc%0A%20%20%20%20skip_share%20%3D%20function%28%5Binc%2Cfoo%5D%2Cfn%2Cgivens%3D%5B%28state%2Cfoo%29%5D%29%0A%20%20%20%20%23%u8FD9%u91CC%u867D%u7136%u4FEE%u6539state%uFF0C%u4F46%u8FD9%u662F%u5C40%u90E8%u4FEE%u6539%uFF0C%u76F8%u5F53%u4E8E%u751F%u6210%u4E86%u4E00%u4E2A%u5C40%u90E8%u53D8%u91CF%uFF0C%u5BF9%u6211%u6574%u4F53%u7684%u5171%u4EAB%u53D8%u91CF%u503C%u662F%u4E0D%u53D8%u7684%0A%20%20%20%20%60%60%60%0A%0A%23%23%23RandomStreams%u4F7F%u7528%0A%u5982%u9898%uFF0C%u8FD9%u4E2A%u4E5F%u5C31%u662F%u4EA7%u751F%u968F%u673A%u6570%u7684%u51FD%u6570%uFF0C%u8C03%u7528%u8D77%u6765%u6BD4%u8F83%u9EBB%u70E6%uFF0C%u56E0%u4E3A%u8981%u9075%u5FAAtheano%u7684%u89C4%u5219%uFF0C%u4E0B%u9762%u6211%u5C55%u793A%u4E00%u4E0B%0A%20%20%20%20%0A%20%20%20%20%60%60%60python%0A%20%20%20%20from%20theano.tensor.randomstreams%20import%20RandomStreams%0A%20%20%20%20%23%u4F20%u7ED9%u4ED6%u79CD%u5B50%uFF0C%u7C7B%u4F3Cc%u4E2D%u7684srand%uFF08%uFF09%0A%20%20%20%20srng%20%3D%20RandomStreams%28seed%3D234%29%0A%20%20%20%20%23%u5B83%u53EF%u4EE5%u751F%u6210%u4E24%u79CD%u7C7B%u578B%u7684%u968F%u673A%u6570%uFF0C%u6BCF%u79CD%u7C7B%u578B%u7684%u90FD%u8981%u7528%u5143%u7EC4%u4F20%u5165%u77E9%u9635%u7684row%u548Ccu%0A%20%20%20%20rv_n%20%3D%20srng.normal%28%282%2C2%29%29%20%23%u751F%u6210%u7684%u968F%u673A%u6570%u6709%u6B63%u6709%u8D1F%uFF0C%u5927%u5C0F%u4E5F%u4E0D%u786E%u5B9A%uFF0C%u4E0D%u8FC7%u6BD4%u8F83%u5C0F%uFF0C%u6700%u5927%u4E5F%u662F%u4E2A%u4F4D%u6570%0A%20%20%20%20rv_u%20%3D%20srng.uniform%28%282%2C2%29%29%20%23%u751F%u6210%u7684%u968F%u673A%u6570%u662F%u5927%u4E8E0%u7684%uFF0C%u5E76%u4E14%u5C0F%u4E8E1%u7684%uFF0C%u975E%u5E38%u89C4%u5219%uFF0C%u5F53%u7136%u90FD%u662F%u751F%u62102*2%u7684%u77E9%u9635%0A%20%20%20%20%23%u8C03%u7528%u65F6%u8981%u7528function%uFF0C%u4E5F%u5C31%u662F%u4ED6%u9EBB%u70E6%u7684%u5730%u65B9%0A%20%20%20%20f%20%3D%20function%28%5B%5D%2Crv_u%29%20%23%u4E0D%u9700%u8981%u53C2%u6570%uFF0C%u6240%u4EE5%u4E0D%u7528%u4F20%u53C2%0A%20%20%20%20g%20%3D%20function%28%5B%5D%2Crv_u%2Cno_default_update%3DTrue%29%20%23%u751F%u6210%u4E00%u7EC4%u968F%u673A%u6570%u4EE5%u540E%uFF0C%u5C31%u4E0D%u518D%u91CD%u65B0%u751F%u968F%u673A%u6570%uFF0C%u5982%u679C%u4E00%u76F4%u7528%u8FD9%u7EC4%u968F%u673A%u6570%u7684%u65F6%u5019%u5EFA%u8BAE%u8FD9%u6837%u5199%0A%20%20%20%20%60%60%60%0A%0A%0A1.seed%u8BBE%u7F6E%0Aseed%u9664%u4E86%u53EF%u4EE5%u4E3A%u5168%u4F53%u968F%u673A%u6570%u8BBE%u7F6E%u4E5F%u53EF%u4EE5%u4E3A%u5355%u4E2A%u968F%u673A%u6570%u8BBE%u7F6E%2C%u65B9%u6CD5%u7565%u6709%u4E0D%u540C%0A%0A%20%20%20%20%60%60%60python%0A%20%20%20%20%23%u5168%u5C40%u8BBE%u7F6E%0A%20%20%20%20RandomStreams%28seed%20%3D%2012233%29%0A%20%20%20%20%23%u5C40%u90E8%u8BBE%u7F6E%u6BD4%u8F83%u9EBB%u70E6%0A%20%20%20%20rvget%20%3D%20rv.rng.get_value%28borrow%20%3D%20True%29%0A%20%20%20%20rvget.seed%281212%29%0A%20%20%20%20rv.rng.set_value%28rvget%2Cborrow%3DTrue%29%0A%20%20%20%20%60%60%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A
posted @ 2014-04-21 22:25  milewang  阅读(361)  评论(0)    收藏  举报