>>> 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(变量),显而易见这是因为我们要进行两个数的相加。此时定义的函数的输出是0维的 numpy.ndarray。
如果你在运行这些代码,你就会发现当我们执行function指令时,电脑有一些延迟,那是因为函数f正在被编译成C语言
>>> x = T.dscalar('x') >>> y = T.dscalar('y')在Theano中,所有的变量都要被事先定义。 T.dscalar就是这样的一种方法来定义一个0维的数组
>>> type(x) <class 'theano.tensor.var.TensorVariable'> >>> x.type TensorType(float64, scalar) >>> T.dscalar TensorType(float64, scalar) >>> x.type is T.dscalar True
如果你想知道更多关于Theano内部的结构,你可以点击这里
>>> z = x + yz是另一个变量代表着x与y的相加。你可以用 pp 函数去打印变量z
>>> from theano import pp >>> print(pp(z)) (x + y)
>>> f = function([x, y], z)
>>> 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) True
>>> 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.]])变量是 Numpy array类型的, 因此我们可以直接利用 Numpy array 做为输入
>>> f(numpy.array([[1, 2], [3, 4]]), numpy.array([[10, 20], [30, 40]])) array([[ 11., 22.], [ 33., 44.]])此外数字加上矩阵,向量加上矩阵,数字加上向量都是可以的, 这些操作被定义为 broadcasting 详情请戳这里
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]))
[ 0. 2. 1026.]
%%%%%%%%%%%%%%%%%%%%%%华丽的分割线开始%%%%%%%%%%%%%%%%%%%%%%%%%%%%
from __future__ import print_function 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.]
本文翻译自:http://deeplearning.net/software/theano/tutorial/
并对有些文字进行了适当的删改