【Theano】代数运算

1.增加两个标量

 让我们开始运用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(2, 3)
array(5.0)
>>> f(16.3, 12.1)
array(28.4)

我们将其分解成几个步骤。第一步是定义两个符号(变量),表示你要添加的数量。请注意,从现在开始,我们将使用术语(变量)来表示“符号”

(换句话说,x,y,z都是可变对象)。函数 f 的输出是零维的numpy.ndarray。

如果您按上述输入到interpreter中,你会注意到,在执行function指令时稍有延迟,背后原理是f是正被编译成C代码。

 T.dscalar( ): Symbolic Type representing a numpy.ndarray value.
在Theano,所有符号必须键入。特别是,T.dscalar是我们分配到“0维double数组(标量)”的类型,这是一个Theano类型,dscalar不是类,

因此,x和y都不是真正dscalar的实例,而是TensorVariable的实例。x和y被分配Theano中dscalar 类型字段里,你可以在这里看到:

>>> type(x)
<class 'theano.tensor.var.TensorVariable'>
>>> x.type
TensorType(float64, scalar)
>>> T.dscalar
TensorType(float64, scalar)
>>> x.type is T.dscalar
True
z是也是一变量,表示x和y的和。您可以使用pp函数打印出计算的z。

>>> from theano import pp
>>> print pp(z)
(x + y)
function第一个参数的功能是将被作为输入提供给该函数的变量的列表。第二个参数是一个变量或者变量列表。

对于这两种情况下,第二个参数是我们想要的东西的输出。 f可以象一个普通Python函数一样被使用。

注意作为一种快捷方式,可仅仅使用一个变量的eval( )方法。在eval( )没有function( )那么灵活,但它可以完成我们之前在教程介绍的所有事情,

它具有不需要你import function()的好处,这里是eval( )的工作原理:

>>> import theano.tensor as T
>>> x = T.dscalar('x')
>>> y = T.dscalar('y')
>>> z = x + y
>>> z.eval({x : 16.3, y : 12.1})
array(28.4)

我们传入eval( )函数的为映射theano变量的字典,它返回表达式的数值。eval( )函数第一次调用它的变量会比较慢 - 它需要调用function( )来编译幕后的表达式。

对同一变量的后续调用eval()函数将会很快,因为变量缓存在编译后的函数中。

2.矩阵加法

您可能已经猜到了如何做到这一点。事实上,从前面的例子中,唯一的变化是,你需要使用矩阵类型的实例x和y,

dmatrix类型为双精度矩阵,然后我们可以对二维数组使用我们的新函数。

>>> x = T.dmatrix('x')
>>> y = T.dmatrix('y')
>>> z = x + y
>>> f = function([x, y], z)
>>> f([[1, 2], [3, 4]], [[10, 20], [30, 40]])
array([[ 11.,  22.],
       [ 33.,  44.]])
可用变量类型如下:
byte: bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor4
16-bit integers: wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4
32-bit integers: iscalar, ivector, imatrix, irow, icol, itensor3, itensor4
64-bit integers: lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4
float: fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4
double: dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4
complex: cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4

3.练习

import theano
a = theano.tensor.vector()      # declare variable
out = a + a ** 10               # build symbolic expression
f = theano.function([a], out)   # compile function
print f([0, 1, 2])  # prints `array([0, 2, 1026])`











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值