Theano Tutorial文档翻译(二):代数

Baby Steps - Algebrahttp://deeplearning.net/software/theano/tutorial/adding.html

两个标量相加

  • 在开始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.]
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值