1.Theano中的scan函数
目前先弱弱的认为:相当于symbolic的for循环吧,或者说计算图上的for循环,也可以用来替代repeat-until。
与scan相比,scan_checkpoint减少了内存的使用,只保存最后一步的计算结果。
2.Theano中的shared变量
Variable with Storage that is shared between functions that it appears in.多个函数之间共享存储空间的变量--Theano的共享变量。
Shared variables是可以加快计算速度的全局变量(http://blog.csdn.net/yjiejie7758/article/details/51898686)
shared variable是一种符号变量(symbolic variable),但是这个symbolic variable又拥有自己的值。
shared可以存储在显存中,因为这个特性,我们才会有“把神经网络参数放到shared中”的这种做法。
shared指向显存中的一块区域,这块区域在运算中是共享的,所以常常在运算中用来存储权值参数
定义shared variables: a=theano.shared(2,'a'), a是符号变量,初值为2,只能调用,但不能直接访问。
之所以称之为shared variable,是因为在不同函数中赋值都是一样的
3.Theano中的dimshuffle函数
引自:http://www.cnblogs.com/wacc/p/5342479.html
theano中的dimshuffle函数用于对张量的维度进行操作,可以增加维度,也可以交换维度,删除维度。
注意的是只有shared才能调用dimshuffle()
'x'表示增加一维,从0d scalar到1d vector
(0, 1)表示一个与原先相同的2D向量
(1, 0)表示将2D向量的两维交换
(‘x’, 0) 表示将一个1d vector变为一个1xN矩阵
(0, ‘x’)将一个1d vector变为一个Nx1矩阵
(2, 0, 1) -> AxBxC to CxAxB (2表示第三维也就是C,0表示第一维A,1表示第二维B)
(0, ‘x’, 1) -> AxB to Ax1xB 表示A,B顺序不变在中间增加一维
(1, ‘x’, 0) -> AxB to Bx1xA 同理自己理解一下
(1,) -> 删除维度0,(1xA to A)