theano
1.theano.tensor.switch(cond,ift,iff)
:满足条件(cond)输出x, 不满足输出y.
2.theano.scan(fn, sequences=None, outputs_info=None, non_sequences=None, n_steps=None, truncate_gradient=-1, go_backwards=False, mode=None, name=None, profile=False, allow_gc=None, strict=False)
-
fn
是一个lambda或者def函数,描述了一步scan操作的运算式,运算式是的输入参数按照sequences
,outputs_info
,non_sequences
的顺序,运算式的输出作为theano.scan的返回值。 -
sequences
: sequences是一个theano variables或者dictionaries的列表。字典对象的结构为{‘variable’:taps},其中taps是一个整数列表。’sequences’列表中的所有Theano variable会被自动封装成一个字典,此时taps被设置成[0]。比如sequences = [ dict(input= Sequence1, taps = [-3,2,-1]), Sequence2, dict(input = Sequence3, taps = 3) ]
, 映射到scan输入参数为Sequence1[t-3]
,Sequence1[t+2]
,Sequence1[t-1]
,Sequence2[t]
,Sequence3[t+3]
。还有一点就是,如果序列的长度不一致,scan会裁剪成它们中最短的,这个性质方便我们传递一个很长的arange,比如sequences=[coefficients, theano.tensor.arange(max_coefficients_supported)]
。 -
outputs_info
:outputs_info
是一个theano variables或者dictionaries的列表,它描述了输出的初始状态,显然应该和输出有相同的shape,而且,每进行一步scan操作,outputs_info中的数值会被上一次迭代的输出值更新掉。当然,如果当前循环结构不需要recursive,而仅仅是一个map操作的话,这个参数便可以省略; -
non_sequences
:non_sequences
是一个‘常量’参数列表,这里所谓的‘常量’是相对于‘outputs_info’中的参数更新而言的,代表了一步scan操作中不会被更新的变量。计算图中的有些变量在这里也可以不显式的指明,但显式指明变量参数会得到一个简化的计算图,加速编译器对图的优化和执行。 常见的应用是,把shared variables作为non_sequences参数中的值. -
n_steps
:n_steps
参数是一个int或者theano scalar,代表了scan操作的迭代次数。如果存在输入序列,其中的元素个数小于n_steps,scan函数会报错。如果n_steps参数未指定,scan会根据他的输入参数自动计算出迭代步数; -
truncate_gradient
:truncate_gradient
参数代表了使用BPTT(back propagation through time)算法时,“梯度截断”后的步数。“梯度截断”的目的是在可接受的误差范围内,降低梯度的计算复杂度。常见的应用场景是RNN(recurrent neural network; -
strict
:strict
是一个shared variable校验标志,用于检验是否fn函数用到的所有shared variabes都在non_sequences中,若不满足则会Raise an error。 - 返回参数:
形如(outputs, updates)格式的元组类型。outputs
是一个theano变量,或者多个theano变量构成的list。并且,每一个theano变量包含了所有迭代步骤的输出结果。updates
是形如(var, expression)的字典结构,指明了scan中用到的所有shared variables的更新规则 。
numpy
1.numpy.where(cond, x, y)
:
- 三个参数
np.where(cond,x,y)
:满足条件(cond)输出x, 不满足输出y. - 一个参数
np.where(arry)
:输出arry中‘真’值坐标
-
np.where(arry)
:如果没有标明x
与y
值,则返回坐标值。
python
1.python中的OrderedDict()
的使用
很多人认为python中的字典是无序的,因为它是按照hash来存储的,但是python中有一个模块collections,提供了很多有用的集合类。里面自带了一个子类OrderedDict
,实现了对字典对象中元素的排序。OrderedDict
会根据放入元素的先后顺序进行排序,所以输出的值是排好序的。OrderedDict
对象是字典对象,如果顺序不同,那么python也会把他们当成是两个不同的对象。