概述
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])`
最后
以上就是慈祥玉米为你收集整理的【Theano】代数运算的全部内容,希望文章能够帮你解决【Theano】代数运算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复