Theano - 循环
Scan
复发(Recurrence)的一种常用形式,可以用于循环(looping)
Reduction和map是scan的特例
可以根据一些输出序列scan一个函数(function),每一步都会生成一个输出
可以查看之前k步的输出
给定一个初始状态z=0,可以通过scan函数z + x(i)计算一个列表的和sum(a_list)
通常一个for循环可以用scan()操作符进行实现
使用scan的优点:
迭代次数为符号图的一部分
最大限度地减少GPU传输(如果用到了GPU)
通过序列步长计算梯度
运行速率比python内置的for循环稍微快些
可以通过检测需要的实际内存量,来降低整体内存使用量
例子:对应元素计算tanh(x(t).dot(W) + b)
import theano
import theano.tensor as T
import numpy as np# 定义张量变量
X = T.matrix('X')
W = T.matrix('W')
b_sym = T.vector('b_sym')results, updates = theano.scan(lambda v: T.tanh(T.dot(v, W) + b_sym), sequences=X)
compute_elementwise = theano.function([X, W, b_sym], results)# 测试
x = np.eye(2, dtype=theano.config.floatX)
w = np.ones((2, 2), dtype=theano.config.floatX)
b = np.ones((2), dtype=theano.config.floatX)
b[1] = 2compute_elementwise(x, w, b)
# 和numpy相比较
np.tanh(x.dot(w) + b)
例子: 计算序列x(t) = tanh(x(t-1).dot(W) + y(t).dot(U) + p(T-t).dot(V))
import theano
import theano.tensor as T
import numpy as np
# 定义张量变量
X = T.vector('X')
W = T.matrix('W')
b_sym = T.vector('b_sym')
U, Y, V, P = T.matrices('U', 'Y', 'V', 'P')result, update = theano.scan(lambda y, p, x_tml: T.tanh(T.dot(x_tml, W) + T.dot(y, U) + T.dot(p, V)),sequences=[Y, P[::-1]], outputs_info=[X])compute_seq = theano.function(inputs=[X, W, Y, U, P, V], outputs=result)# 测试
x = np.zeros((2), dtype=theano.config.floatX)
x[1] = 1
w = np.ones((2, 2), dtype=theano.config.floatX)
y = np.ones((5, 2), dtype=theano.config.floatX)
y[0, :] = -3
u = np.ones((2, 2), dtype=theano.config.floatX)
p = np.ones((5, 2), dtype=theano.config.floatX)
p[0, :] = 3
v = np.ones((2, 2), dtype=theano.config.floatX)print(compute_seq(x, w, y, u, p, v))# 与Numpy对比
x_res = np.zeros((5, 2), dtype=theano.config.floatX)
x_res[0] = np.tanh(x.dot(w) + y[0].dot(u) + p[4].dot(v))
for i in range(1, 5):x_res[i] = np.tanh(x_res[i - 1].dot(w) + y[i].dot(u) + p[4-i].dot(v))
print(x_res)
例子: 计算X的行范式
import theano
import theano.tensor as T
import numpy as np# 定义张量变量
X = T.matrix('X')
results, updates = theano.scan(lambda x_i: T.sqrt((x_i ** 2)).sum(), sequences=[X])
compute_norm_lines = theano.function(inputs=[X], outputs=results)# 测试
x = np.diag(np.arange(1, 6, dtype=theano.config.floatX), 1)
print(compute_norm_lines(x))# 和Numpy对比
print(np.sqrt((x ** 2).sum(1)))
例子: 计算X的列范式
import theano
import theano.tensor as T
import numpy as np# 定义张量变量
X = T.matrix("X")
results, updates = theano.scan(lambda x_i: T.sqrt((x_i ** 2).sum()), sequences=[X.T])
compute_norm_cols = theano.function(inputs=[X], outputs=results)# 测试
x = np.diag(np.arange(1, 6, dtype=theano.config.floatX), 1)
print(compute_norm_cols(x))# 和Numpy对比
print(np.sqrt((x ** 2).sum(0)))
Theano - 循环相关推荐
- 中兴面试总结,华为。技术,市场
1,软件测试,如何把这个测试做的更好. 进到一个新项目,作为测试人员应该都是想把测试做好,项目在符合客户质量要求的情况下按时交付的吧.但往往都事与愿违,造成这个结果的原因有很多很多.通过这段时间做自动 ...
- Theano 中文文档 0.9 - 7.2.5 循环
7.2.5 循环 译者:Python 文档协作翻译小组,原文:Loop. 本文以 CC BY-NC-SA 4.0 协议发布,转载请保留作者署名和文章出处. Python 文档协作翻译小组人手紧缺,有兴 ...
- 【theano-windows】学习笔记六——theano中的循环函数scan
前言 Scan是Theano中最基础的循环函数, 官方教程主要是通过大量的例子来说明用法. 不过在学习的时候我比较习惯先看看用途, 然后是参数说明, 最后再是研究实例. 国际惯例, 参考网址 官网关于 ...
- scan——Theano中循环的实现
引子 在开始scan函数的设计之前,我们从一个实例出发,首先来看,一个循环需要必备哪些成分:简单的循环累积相乘,计算AkA^k,使用numpy,代码如下. def power(A, k):result ...
- 循环神经网络教程第二部分-用python,numpy,theano实现一个RNN
作者:徐志强 链接:https://zhuanlan.zhihu.com/p/22289383 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在本部分,我们将会从头 ...
- 循环神经网络教程4-用Python和Theano实现GRU/LSTM RNN, Part 4 – Implementing a GRU/LSTM RNN with Python and Theano
The code for this post is on Github. This is part 4, the last part of the Recurrent Neural Network T ...
- 一文详解循环神经网络的基本概念(代码版)
作者 | 李理 目前就职于环信,即时通讯云平台和全媒体智能客服平台,在环信从事智能客服和智能机器人相关工作,致力于用深度学习来提高智能机器人的性能. 写在前面 由于工作太忙,这个系列文章有一年多没有更 ...
- 技术 | Bengio终结Theano不是偶然,其性能早在Keras支持的四大框架中垫底
作者 | Jasmeet Bhatia 编译 | KK4SBB 本文将对目前流行的几种Keras支持的深度学习框架性能做一次综述性对比,包括Tensorflow.CNTK.MXNet和Theano.作 ...
- Recurrent Neural Network系列2--利用Python,Theano实现RNN
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
最新文章
- [LeetCode]--118. Pascal#39;s Triangle
- redis中的发布订阅
- 【ABAP】Smartforms无法打印字符串中空格问题处理
- scala读取mysql文件_9. Scala操作外部数据 文件读取,xml,Excel,MySQL
- 矩池云通过本地端口转发方式登陆VNC
- matlab 2018 ccs,Matlab2018a 与ccs7生成tms320F2812代码调试记录
- G502使用计算机配置,罗技G502鼠标驱动调试详解!实战《男友4》设置!
- 网站数据分析指标体系
- 获取webshell的方法
- x240无线网卡驱动 linux,Linux2.6移植:DM9000驱动
- 1258 近义词句子
- DeDeCMS二次开发教程之程序安装
- iOS10.3正式版发布:iOS10.3新功能有哪些? 韩俊强的博客
- 新一代智能视频云发展现状分析:五大要素成关键
- element ui 前台模板_一个干净优雅的 Element UI Admin 模板
- uniapp从开发App到上架应用市场需要经历什么?
- 查看ubuntu系统的版本信息
- STM32 启动代码分析
- CPU为什么选择导热硅脂而不是牙膏
- 语言学c刊,完整版|最新版C刊(2021-2022版)目录发布!新增和踢出了哪些?
热门文章
- 互联网产品各阶段的标准流程文档
- 营救Peter——下载XCode的六种姿势
- 骑行广州大学城 外环十大校门
- hadoop之MapReduce框架TaskTracker端心跳机制分析(源码分析第六篇)
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- Java单例模式:饿汉与懒汉区别
- linux开发神器--Tmux
- Install NSCA
- 99%的用户都选择用它来恢复丢失的照片
- fpga该驱动器调试dev_dbg 无输出