Theano学习笔记.docx
- 文档编号:2814145
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:33
- 大小:164.63KB
Theano学习笔记.docx
《Theano学习笔记.docx》由会员分享,可在线阅读,更多相关《Theano学习笔记.docx(33页珍藏版)》请在冰豆网上搜索。
Theano学习笔记
Theano学习笔记
(一)——代数
分类:
Python2014-08-2815:
29 2008人阅读 评论(5) 收藏 举报
numpypython深度学习Theanogpu
标量相加
[python] viewplaincopy
1.import theano.tensor as T
2.from theano import function
3.x = T.dscalar('x')
4.y = T.dscalar('y')
5.z = x + y
6.f = function([x, y], z)
输入定义两个符号变量来代替数值,输出是一个0维的numpy.ndarray数组。
矩阵相加
把输入类型换一下就行了,矩阵如果维数不同,会遵循NumPy的广播规则。
[python] viewplaincopy
1.import theano.tensor as T
2.from theano import function
3.x = T.dmatrix('x')
4.y = T.dmatrix('y')
5.z = x + y
6.f = function([x, y], z)
定义一个公式如:
a**2+b**2+2*a*b
这里每个变量都需要单独申明。
[python] viewplaincopy
1.import theano
2.a = theano.tensor.vector()
3.b = theano.tensor.vector()
4.out = a ** 2 + b ** 2 + 2 * a * b
5.f = theano.function([a,b],out)
6.print f([0, 1],[1,2])
7.>>>
8.[ 1. 9.]
支持多输出
[python] viewplaincopy
1.import theano.tensor as T
2.from theano import function
3.a, b = T.dmatrices('a', 'b')
4.diff = a - b
5.abs_diff = abs(diff)
6.diff_squared = diff**2
7.f = function([a, b], [diff, abs_diff,diff_squared])
8.print f([[1, 1], [1, 1]], [[0, 1], [2,3]])
9.>>>
10.[array([[ 1., 0.],
11. [-1., -2.]]), array([[ 1., 0.],
12. [ 1., 2.]]), array([[ 1., 0.],
13. [ 1., 4.]])]
设置默认参数
和标准Python一样,缺省参数必须在非缺省之后,也可以定义缺省变量名。
[python] viewplaincopy
1.import theano.tensor as T
2.from theano import function
3.from theano import Param
4.x, y = T.dscalars('x', 'y')
5.z = x + y
6.f = function([x, Param(y, default=1,name='by_name')],z)
7.print f(33)
8.print f(33, 2)
9.print f(33,by_name=3)
10.>>>
11.34.0
12.35.0
13.36.0
共享变量
为了在GPU上更好的性能,引入共享变量,以累加器为例。
[python] viewplaincopy
1.import theano.tensor as T
2.from theano import function
3.from theano import shared
4.state = shared(0)
5.inc = T.iscalar('inc')
6.accumulator = function([inc], state,updates=[(state, state+inc)])
7.print state.get_value()
8.accumulator
(1)
9.print state.get_value()
10.accumulator(300)
11.print state.get_value()
12.state.set_value(-1)
13.print accumulator(3)
14.print state.get_value()
15.>>>
16.0
17.1
18.301
19.-1
20.2
state的值在调用函数之后才刷新。
而且可以定义多个函数共用同一个共享变量,例如这个减法器。
[python] viewplaincopy
1.decrementor = function([inc], state,updates=[(state, state-inc)])
2.print decrementor
(2)
3.print state.get_value()
4.>>>
5.2
6.0
如果在某个函数中,共用了这个共享变量,但是又不想变动它的值,那么可以使用given参数替代这个变量。
而旧的state不发生变化。
[python] viewplaincopy
1.fn_of_state = state * 2 + inc
2.foo = T.scalar(dtype=state.dtype)
3.skip_shared = function([inc, foo],fn_of_state,
4. givens=[(state,foo)])
5.print skip_shared(1, 3)
6.print state.get_value()
7.>>>
8.7
9.0
产生随机数
和C中的srand()一样,都是伪随机数。
[python] viewplaincopy
1.from theano import function
2.from theano.tensor.shared_randomstreamsimport RandomStreams
3.srng = RandomStreams(seed=234)#种子
4.rv_u = srng.uniform((2,2))#均匀分布
5.rv_n = srng.normal((2,2))#正态分布
6.f = function([], rv_u)#每次调用,每次都会更新
7.g = function([], rv_n,no_default_updates=True)#如果以后一直用这组随机数,就不再更新
8.nearly_zeros = function([], rv_u + rv_u- 2 * rv_u)
9.print nearly_zeros()#函数每次执行只获得一个随机数,即使表达式里面有3个随机数
种子流:
上述2个随机变量,可以全局设定同一个种子,也可以是分别设定。
[python] viewplaincopy
1.#分别设置,使用.rng.set_value()函数
2.rng_val =rv_u.rng.get_value(borrow=True) # Get the rng for rv_u
3.rng_val.seed(89234) # seeds thegenerator
4.rv_u.rng.set_value(rng_val,borrow=True)
5.#全局设置,使用.seed()函数
6.srng.seed(902340)
函数间共享流
[python] viewplaincopy
1.state_after_v0 =rv_u.rng.get_value().get_state()#保存调用前的state
2.nearly_zeros() # this affects rv_u's generator
3.v1 = f()#第一个调用,之后state会变化
4.rng = rv_u.rng.get_value(borrow=True)
5.rng.set_state(state_after_v0)#为其state还原
6.rv_u.rng.set_value(rng, borrow=True)
7.v2 = f() # v2 !
= v1输出更新后state对应的随机数
8.v3 = f() # v3 == v1再次更新又还原成原来的state了
在2张Theano图间复制状态
[python] viewplaincopy
1.import theano
2.import numpy
3.import theano.tensor as T
4.from theano.sandbox.rng_mrg importMRG_RandomStreams
5.from theano.tensor.shared_randomstreamsimport RandomStreams
6.
7.class Graph():
8. def __init__(self, seed=123):
9. self.rng = RandomStreams(seed)
10. self.y = self.rng.uniform(size=(1,))
11.
12.g1 = Graph(seed=123)
13.f1 = theano.function([], g1.y)
14.
15.g2 = Graph(seed=987)
16.f2 = theano.function([], g2.y)
17.
18.print 'By default, the two functionsare out of sync.'
19.print 'f1() returns ', f1()
20.print 'f2() returns ', f2()
21.#输出不同的随机值
22.def copy_random_state(g1, g2):
23. if isinstance(g1.rng, MRG_RandomStreams):
24.#类型判断:
其第一个参数为对象,第二个为类型名或类型名的一个列表。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Theano 学习 笔记