>>> 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)
>>> x.type
TensorType(float64, scalar)
>>> T.dscalar
TensorType(float64, scalar)
>>> x.type is T.dscalar
True
如果你想知道更多关于Theano内部的结构,你可以点击这里
>>> z = x + y
z是另一个变量代表着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/
并对有些文字进行了适当的删改