Theano Tutorial文档翻译(二):代数
2016-08-09 21:16
363 查看
Baby Steps - Algebrahttp://deeplearning.net/software/theano/tutorial/adding.html
现在我们就可以使用我们定义的函数
让我们分解成几个步骤。第一步就是定义两个符号(变量)代表你想要相加的数。需要注意的是,从现在开始我们将会使用变量的术语去表示“符号”(换句话来说,x,y,z都是变量对象)。
如果你跟着步骤而且输入指令,你可能会发现这会有一点点延迟当执行
在Theano,所有符号都必须被赋予类型。通常的,
通过用字符串参数调用
更多关于Tneano内部结构的知识一时也说不清楚,你可以在图结构(Graph Structures)查看更多。
z是另外一个代表x和y相加的变量。你可以使用
function的第一个参数是提供输入值的一系列变量。第二个参数是单一变量或者一系列变量。对于两种情况之一,第二个参数就是当我们使用函数时想看到的输出。
我们传给
变量是Numpy的数组,我们也可以使用Numpy的数组直接当输入:
变量和矩阵相加,向量和矩阵相加,标量和向量相加等都是可以得。具体操作设计广播机制。
16位整数:
32位整数:
64位整数:
float:
double:
complex:
上面的列表不是全部。和Numpy相容的类型请查看 tensor creation。
注意,使用者要决定你使用类型的字节数而不是系统自己。
修改代码表示: a^2 + b^2 + 2ab
两个标量相加
在开始Theano和知道我们在做什么之前,让我们来实现一个简单的函数:把两个数相加:import numpy 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(2, 3) #array(5.0) numpy.allclose(f(16.3, 12.1), 28.4) #True
让我们分解成几个步骤。第一步就是定义两个符号(变量)代表你想要相加的数。需要注意的是,从现在开始我们将会使用变量的术语去表示“符号”(换句话来说,x,y,z都是变量对象)。
f函数的输出是0维的
numpy.ndarry
如果你跟着步骤而且输入指令,你可能会发现这会有一点点延迟当执行
function的时候。在窗口的后面,
f正被C语言编译。
第一步
-x = T.dscalar('x') y = T.dscalar('y')
在Theano,所有符号都必须被赋予类型。通常的,
T.dscalar是double类型的0维数组(标量)。这是Teano的类型。
dscalar不是一个类型。因此x和y都不是
dscalar的实例化。他们都是
TensorVariable的实例化。但是,x和y在他们的
type域分配了Theano的类型。
type(x) x.type T.dscalar x.type is T.dascalar
通过用字符串参数调用
T.dscalar,你创建了一个变量来表达一个给定名字浮点标量。如果你没有提供参数,这符号会被标记为没名字。名字不是必须的,但是它可以帮助你调试。
更多关于Tneano内部结构的知识一时也说不清楚,你可以在图结构(Graph Structures)查看更多。
第二步
第二步就是链接x和y到他们的和z中z = x + y
z是另外一个代表x和y相加的变量。你可以使用
pp函数取输出z的计算式。
from theano import pp print(pp(z))
第三步
最后一步就是新建一个函数从x和y取输入,然后给z输出。f = function([x, y], z)
function的第一个参数是提供输入值的一系列变量。第二个参数是单一变量或者一系列变量。对于两种情况之一,第二个参数就是当我们使用函数时想看到的输出。
f可能像普通Pyton函数一样被使用。
提示
当作捷径来说,你可以跳过第三步直接使用变量的eval方法。
eval方法没有
function()灵活但是可以做所有到在本教材中的所有事。用eval可以不使用function()
import numpy
import theano.tensor as T
x = T.dscalar('x') y = T.dscalar('y')
z = x + y
numpy.allclose(z.eval({x:16.3, y:12.1}), 28.4)
我们传给
eval()函数一个字典匹配符号性的theano变量,最后它返回一个数字型的值。
eval()第一次调用会比较慢
function()在窗体后面编译表达式。随后在相同的变量调用
eval()会比较快点,因为变量缓存了已经编译好的函数。
两个矩阵相加
你们可能早就知道怎么完成。真的,唯一的变化就是x和y用矩阵的类型。x = T.dmatrix('x') y = T.dmatrix('y') z = x + y f = function([x, y], z)
dmatrix是一个double类型的矩阵。然后我们可以使用新函数计算2D矩阵:
f([[1,2],[3,4]], [[10,20],[30,40]])
变量是Numpy的数组,我们也可以使用Numpy的数组直接当输入:
import numpy f(numpy.array([[1,2], [3,4]]), numpy.array([[10,20], [30,40]]))
变量和矩阵相加,向量和矩阵相加,标量和向量相加等都是可以得。具体操作设计广播机制。
有效类型:
byte:bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor4
16位整数:
wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4
32位整数:
iscalr, ivector, imatrix, irow, icol, itensor3, itensor4
64位整数:
lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4
float:
fscalar, fvector, frow, fcol, ftensor3, ftensor4
double:
dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4
complex:
cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4
上面的列表不是全部。和Numpy相容的类型请查看 tensor creation。
注意,使用者要决定你使用类型的字节数而不是系统自己。
练习
import theano a = theano.tensor.vector() out = a + a ** 10 f = theano.function([a], out) print(f([0,1,2]))
修改代码表示: a^2 + b^2 + 2ab
import theano a = theano.tensor.vector() # declare variable b = theano.tensor.vector() # declare variable out = a ** 2 + b ** 2 + 2 * a * b # build symbolic expression f = theano.function([a, b], out) # compile function print(f([1, 2], [4, 5])) # prints [ 25. 49.]
相关文章推荐
- Theano Tutorial文档翻译(五) - 衍生工具
- Theano Tutorial文档翻译(八) - 怎样标准化Theano的信息
- Theano Tutorial文档翻译(六) - 条件
- Theano Tutorial文档翻译(一):词汇
- Theano Tutorial文档翻译(七) - 循环
- Theano Tutorial文档翻译(三) - 基础张量功能
- deep learning tutorial 翻译 (theano 学习笔记)
- Processing Bitmaps Off the UI Thread不在UI线程中处理Bitmaps(Android官方翻译文档2)
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part III
- unbutu12.04 64bit系统 安装theano+cuda5.5,并运行deeplearningtutorial里面的代码
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part II
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part I
- The Java EE 6 Tutorial 中文版 (翻译) 第32章 JPA简介 (一) 实体
- CritterAI官方文档翻译【The Navigation Mesh】
- Deep learning with Theano 官方中文教程(翻译)(三)——多层感知机(MLP)
- 在响应链中使用视图控制器Using View Controllers in the Responder Chain[苹果官方文档的翻译]
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part IV
- The Portable Executable File Format PE文件格式中文翻译文档
- Apache OFBiz Development The Beginners Tutorial 翻译之四 运行OFBiz
- Deep learning with Theano 官方中文教程(翻译)(四)—— 卷积神经网络(CNN)