Python快乐编程:人工智能深度学习基础
上QQ阅读APP看书,第一时间看更新

2.9.2 scan循环演示

一般情况下,一个for循环可以表示成一个scan操作,而且scan是与Theano的循环联系最紧密的。使用scan而不是for循环的优势如下:

· 迭代的次数是符号graph的一部分。

· 最小化GPU的迁移(如果用到GPU)。

· 通过连续的步骤计算梯度。

· 比Python中使用Theano编译后的for循环稍微快一点。

· 通过检测实际用到的内存的数量,来降低总的内存使用情况。

接下来通过几个案例来帮助理解scan的使用方法。

以逐元素计算为例,通过scan循环演示计算A的k次方。

运行结果如下所示。

    [ 0. 1. 4. 9. 16. 25. 36. 49. 64. 81.]

上述程序中outputs_info初始化为与A大小相同的全1向量,匿名函数(lambda)的输入依次为outputs_info和non_sequences,分别对应于匿名函数的输入result和A。由于scan函数的输出结果会记录每次迭代fn的输出,result=outputs[-1]表示Theano只需要取最后一次迭代结果,Theano也会对此做相应的优化(不保存中间迭代结果)。