Theano教程
让我们开始一个交互式会话(例如使用python
或ipython
)并导入Theano。
- from theano import *
你需要使用Theano的tensor
子包中的几个符号。让我们以一个方便的名字,例如T
导入这个子包(教程将经常使用这个约定)。
- import theano.tensor as T
Numpy
机器学习的矩阵惯例
行是水平的,列是垂直的。每一行都是一个样本。因此,inputs[10,5]是10个样本的矩阵,其中每个样本具有维度5。如果这是神经网络的输入,则从输入到第一个隐藏层的权重将表示大小(5, #hid)的矩阵。
- import numpy as np
- a=np.asarray([[1,2],[3,4],[5,6]])
- print a
- print a.shape
- [[1 2]
- [3 4]
- [5 6]]
- (3, 2)
这是3×2矩阵,即有3行和2列。
要访问第3行(#2行)和第1列(#0列)中的元素:
- print a[2,0]
记住这一点,我们从左到右、从上到下读取,所以连续的元素是一行。也就是说,有3行和2列。
Broadcasting
Numpy在算术运算期间对不同形状的数组进行broadcasting。这通常意味着较小的数组(或标量)被broadcasted到较大的数组,以让它们具有兼容的形状。下面的示例演示broadcastaing的一个实例:
- a=np.asarray([1,2,3])
- b=3
- print a*b
- [3 6 9]
在这种情况下,这里较小的数组b
(实际上是标量,其工作原理类似于一个0维数组)在乘法过程中被broadcasted到与a
相同的大小。这个技巧通常用于简化表达式的写法。
代数
两个标量相加
为了让我们开始使用Theano并获得我们正在使用的感觉,让我们做一个简单的函数:将两个数字加在一起。这里是你怎么做:
- import theano.tensor as T
- from theano import function
- x=T.dscalar('x')
- y=T.dscalar('y')
- z=x+y
- f=function([x,y],z)
现在我们已经创建了我们的函数,我们可以使用它:
- f=function([x,y],z)
- print f(2,3)
- 5.0
让我们分成几个步骤。第一步是定义两个符号(变量),表示要相加的数量。注意,从现在起,我们将使用术语变量来表示“符号”(换句话说,x、y、z都是变量对象)。函数f的输出是零维度的numpy.ndarray
。
如果你正在跟着输入解释器,你可能已经注意到执行function
指令有一点点延迟。在幕后,f正在被编译成C代码。
步骤1
- x=T.dscalar('x')
- y=T.dscalar('y')
在Theano中,所有的符号必须具有类型。特别地,T.dscalar
是我们分配给“0维数组(双精度浮点数(d
)的标量
)”的类型。它是Theano的Type类型。
dscalar
不是类。因此,x或y都不是dscalar
的实例。它们是TensorVariable
的实例。然而,x和y的type
字段赋值为theano的dscalar
类型,正如你在下面看到的:
- print type(x)
- print x.type
- print T.dscalar
- print x.type is T.dscalar
- <class 'theano.tensor.var.TensorVariable'>
- TensorType(float64, scalar)
- TensorType(float64, scalar)
- True
通过使用字符串参数调用T.dscalar
,你将创建一个给定名称的变量,表示一个浮点数标量。如果你不提供参数,符号将不会命名。名称不是必需的,但它们可以帮助调试。
步骤2
第二步是将x和y组合到它们的和z中:
- z=x*y
z是另一个变量,表示x和y相加。你可以使用pp函数精确打印与z相关的计算。
- from theano import pp
- print pp(z)
- (x+y)
步骤3
最后一步是创建一个以x和y作为输入并将z作为输出的函数:
- f=function([x,y],z)
function
的第一个参数是一个变量列表,它们将作为函数的输入。第二个参数是单个变量或一个变量的列表。不管哪一种情况,第二个参数是当我们应用函数时我们想要看到它的输出。f可以像普通的Python函数一样使用。
注意
作为一个捷径,你可以跳过第3步,只需使用变量的eval方法。eval()
方法不像function()
一样灵活,但它可以完成我们在本教程中介绍的所有内容。它有额外的好处,不需要你导入function()
。下面是eval()
的工作原理:
- x=T.dscalar('x')
- y=T.dscalar('y')
- z=x+y
- print z.eval({x:1,y:2})
- 3.0
我们传递给eval()
一个字典,将theano的符号变量映射到值来替换它们,然后它返回表达式的数值。
eval()
在第一次调用变量时会变慢 - 需要调用function()
来编译后台表达式。在同一变量上对eval()
的后续调用将很快,因为变量缓存编译的函数。
两个矩阵相加
- x=T.dmatrix('x')
- y=T.dmatrix('y')
- z=x+y
- f=function([x,y],z)
dmatrix
是双精度(double)矩阵的类型。然后我们可以在二维数组上使用我们的新函数:
- f=function([x,y],z)
- print f([[1,1],[1,1]],[[1,2],[3,4]])
- [[ 2. 3.]
- [ 4. 5.]]
变量是NumPy数组。我们也可以直接使用NumPy数组作为输入:
- print f(np.asarray([[1,1],[1,1]]),np.asarray([[1,2],[3,4]]))
- [[ 2. 3.]
- [ 4. 5.]]
可以标量与矩阵相加,向量与矩阵相加,标量与向量相加等。这些操作的行为由broadcasting定义。
以下类型可以使用:
- byte:
bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor4, btensor5
- 16-bit integers:
wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4, wtensor5
- 32-bit integers:
iscalar, ivector, imatrix, irow, icol, itensor3, itensor4, itensor5
- 64-bit integers:
lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4, ltensor5
- float:
fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4, ftensor5
- double:
dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4, dtensor5
- complex:
cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4, ctensor5
Theano教程的更多相关文章
- Theano教程:Python的内存管理
在写大型程序时候的一大挑战是如何保证最少的内存使用率.但是在Python中的内存管理是比较简单的.Python显示分配内存,使用引用计数系统管理对象,当指向某一个对象的引用数变为 0 的时候,该对象所 ...
- 库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)
项目地址:https://github.com/bharathgs/Awesome-pytorch-list 列表结构: NLP 与语音处理 计算机视觉 概率/生成库 其他库 教程与示例 论文实现 P ...
- video2gift环境安装(Theano等)
pip install Theano http://deeplearning.net/software/theano/install_centos6.html pip install moviepy ...
- theano 模块 MLP示例
theano 模块 MLP示例,有需要的朋友可以参考下. theano教程Example: MLP: 约定数组为列向量, 层级:将多层传感器定义为一连串的层级,每个层级定义为一个类.类属性包括:权重. ...
- DeepLearning之路(三)MLP
DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/articl ...
- TensorFlow资源整理
什么是TensorFlow? TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示 ...
- tensorflow实现基于LSTM的文本分类方法
tensorflow实现基于LSTM的文本分类方法 作者:u010223750 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实 ...
- 一文详解如何用 TensorFlow 实现基于 LSTM 的文本分类(附源码)
雷锋网按:本文作者陆池,原文载于作者个人博客,雷锋网已获授权. 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实例,这个星期就用 ...
- [转]CNN目标检测(一):Faster RCNN详解
https://blog.csdn.net/a8039974/article/details/77592389 Faster RCNN github : https://github.com/rbgi ...
随机推荐
- xtrabackup备份原理及流式备份应用
目录 xtrabackup备份原理及流式备份应用 0. 参考文献 1. xtrabackup 安装 2. xtrabackup 备份和恢复原理 2.1 备份阶段(backup) 2.2 准备阶段(pr ...
- CSPS模拟 77
%%两位AK爷zkt和skyh T1 位间独立,分别讨论 T2 维护标记,代替移位 T3 同一点对,多种联通,没法搞. 发现最多四路连通,考虑容斥. 显然的奇加偶减. 发现统计某种颜色的点之间的联通数 ...
- NOIP模拟 39
考的嘛也不是. 伤心(怎么可能) T1稍想想组合数,然后牢记: 取模题随时取模,包括刚刚读入的数据 T2想到了基环树,然而不会打QAQ.. 非常简洁但非常大神的做法:随便断掉环上的一条边 利用“这条 ...
- 用css或js实现文本输入框的特效
1文本框默认点击特效: 点击文本框,外围会出现蓝色阴影,取消该特效,为该文本框添加css样式"outline:none;",就取消了默认特效. 2实现百度搜索框点击特效: 点击文本 ...
- .Net Core Vue Qucik Start
.Net Core Vue Qucik Start This is a ASP.NET Core 3.0 project seamlessly integrationed with Vue.js te ...
- SpringBoot Web篇笔记(一)
摘要 文章是根据江南一点雨(松哥)的视频进行总结 江南一点雨博客 全局异常处理 通常情况下,我们都需要对自己定义的异常进行相应的处理.捕获指定的异常方式如下: @ControllerAdvice pu ...
- python—mariadb自动部署主从
import configparser import os def config_mariadb_yum(): exists = os.path.exists('/etc/yum.repos.d/ma ...
- python Django框架正式准备工作
之前由于不太了解数据库方面的知识,但经过一段时间的web应用的开发学习,成功的用其他框架连接了数据库,并完成了相关操作,数据爬取也初识了,更了解了python这门语言的语法,但路还很长,因此现在才能正 ...
- 201871010114-李岩松《面向对象程序设计(java)》第十一周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- ubuntu开机自启动服务
ubuntu下一个用来管理开机自启动服务的程序,今天在ss vps上安装时老是提示这个错误,百度后,下面的这个方法可行: vi /etc/apt/source.list 输入i,进入Insert模式 ...