Theano基础
theano与numpy中都有broadcasting:numpy中是动态的,而theano需要在这之前就知道是哪维需要被广播(broadcast)。针对不同类型的数据给出如下的一张表,基本类型包括scalar、vector、row、col、matrix、tensor3、tensor4
x = scalar('myvar',dtype='int32') x = iscalar('myvar') x = TensorType(dtype = 'int32', broadcastable=())('myvar')
有整形int对应的8、16、32、64位分别为b、w、i、l;float类型对应的32、64位为f、d;complex类型对应的64、128位为c、z。
theano.tensor.scalar(name=None,dtype=config.floatX) theano.tensor.vector(name=None,dtype=config.floatX) theano.tensor.row(name=None, dtype=config.floatX) theano.tensor.col(name=None,dtype=config.floatX) theano.tensor.matrix(name=None,dtype=config.floatX) theano.tensor.tensor3(name=None,dtype=config.floatX) #3D张量 theano.tensot.tensor4(name=None,dtype=config.floatX) #4D张量
#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ theano基础 """ import numpy as np import theano.tensor as T from theano import function #定义X和Y两个常量 (scalar),把结构建立好之后,把结构放在function,在把数据放在function。 # 建立 x 的容器 x = T.dscalar('x') # 建立 y 的容器 y = T.dscalar('y') # 建立方程 z = x + y # 使用 function 定义 theano 的方程 # 将输入值 x, y 放在 [] 里, 输出值 z 放在后面 f = function([x, y], z) # 将确切的 x, y 值放入方程中 print(f(2, 3)) # output: 5.0
在theano 中 的 pp (pretty-print) 能够打印出原始方程:
#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ theano基础 """ import numpy as np import theano.tensor as T from theano import function #theano 中 的 pp (pretty-print) 能够打印出原始方程: from theano import pp print(pp(z)) # output:(x + y)
定义矩阵,以及利用矩阵做相关运算:
#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ theano基础 """ import numpy as np import theano.tensor as T from theano import function #定义矩阵,以及利用矩阵做相关运算: # 矩阵 x 的容器 x = T.dmatrix('x') # 矩阵 y 的容器 y = T.dmatrix('y') # 定义矩阵加法 z = x + y # 定义方程 f = function([x, y], z) print(f( np.arange(12).reshape(3,4),#x为3行4列的矩阵 10 * np.ones((3, 4)) #y也为3行4列,且数值全为10 )) """ output: [[ 10. 11. 12. 13.] [ 14. 15. 16. 17.] [ 18. 19. 20. 21.]] """