Theano Tutorial文档翻译(三) - 基础张量功能


源地址:http://deeplearning.net/software/theano/library/tensor/basic.html#libdoc-basic-tensor


Basic Tensor Functionality 基础张量功能

  • Theano支持任何Python的对象,但是他更多关注的是符号矩阵表达。当你输入
    x = T.fmatrix()

  • 这里的x是一个TensorVariable的实例。T.fmatrix对象本身是一个TensorType的实例。Theano知道变量x的类型是因为x.type指向了T.fmatrix

  • 这张将介绍不同创建张量变量的方法,张量的属性和TensorVariableTensorType的方法,以及不同的基础数学符号和算法。

Creation 创建

  • Theano提供一系列预定义的张量类型可以被用来新建张量变量。变量可以被命名以便调试,所有这些构造器接受一个可选择的参数name。例如,下面每个创建的TensorVariable实例都代表一个0维德ndarray的整数,被命名为myvar
x = scalar('myvar', dtype='int32')
x = iscalar('myvar')
x = TensorType(dtype='int32', broadcastable=())('myvar')

Constructors with optional dtype 可选择的类型构造器

  • 这些都是最简单而且经常被使用来创建符号变量的方法。默认地,他们构建浮点变量(由config.floatX决定,见floatX),所以如果你使用这些构造器,转换不同精度是很简单的。
    theano.tensor.scalar(name=None, dtype=config.floatX)
    返回一个0维的ndarray变量
    theano.tensor.vector(name=None, dtype=config.floatX)
    返回一个1维的ndarray变量
    theano.tensor.row(name=None, dtype=config.floatX)
    返回一个2维变量,行数一定为1
    theano.tensor.col(name=None, dtype=config.floatX)
    返回一个2维变量,列数一定为1
    theano.tensor.matrix(name=None, dtype=config.floatX)
    返回一个2维的ndarray变量
    theano.tensor.tensor3(name=None, dtype=config.floatX)
    返回一个3维德ndarray变量
    theano.tensor.tensor4(name=None, dtype=config.floatX)
    返回一个4维的ndarray变量

All Fully-Typed Constructors 所有全类型构造器

  • 下面的Tensor类型是被theano.tensor模板提供的实力。他们都是可以调用,都有一个name参数。
from theano.tensor import *

x = dmatrix()
x = dmatrix('x')
xyz = dmatrix('xyz')
前缀含义
bint8
wint16
iint32
lint64
dfloat64
ffloat32
ccomplex64
zcomplex128
构造器维数形状广播机制
scalar0()()
vector1(?,)(False,)
row2(1,?)(True, False)
col2(?,1)(False, True)
matrix2(?,?)(False, False)
tensor33(?,?,?)(False, False, False)
tensor44(?,?,?,?)(False, False, False, False)

Plural Constructors 符合构造器

  • 下面的构造器可以一次性构造不同的变量。这些在练习中不经常被使用,但是在本次指导中会被使用来节省空间。
    iscalars, lscalars, fscalars, dscalsrs
    返回一个或多个标量变量
    ivectors, lvectors, fvectors, dvectors
    返回一个或多个向量变量
    irows, lrows, frows, drows
    返回一个或多个行变量
    icols, lcols, fcols, dcols
    返回一个或多个列变量
    imatrixs, lmatrixs, fmatrices, dmatrices
    返回一个或多个矩阵变量

  • 每一个复合构造器接受一个整数或多个字符串。如果输入一个整数,方法会返回愈多变量;如果输入一个字符串,它会使用变量名为每个字符串创建一个变量。例如:

from theano.tensor import *

x, y, z = dmatrices(3)
x, y, z = dmatrices('x', 'y', 'z')

Custom tensor types 自定义tensor类型

  • 如果你想要构建一个张量变量,它没有标准的广播模式,或者维度很高,你需要新建一个你自己的TensorType实例。你要新建这样一个实例,通过传入dtype和广播模式来构造。例如,你要新建一个你自己的5维张量:
dtensor5 = TensorType('float64', (False,)*5)
x = dtensor5()
z = dtensor5('z')
  • 你也可以重新定义一些已经提供的类型,他们会正确地相互作用:
my_dmatrix = TensorType('float64', (False,)*2)
x = my_dmatrix()
my_dmatrix == dmatrix # True

Converting from Python Objects 从python对象转换

  • 另外一个创建TensorVariable就是使用shared()
    x = shared(numpy.random.randn(3,4))

  • 这会返回一个共享变量,.value属性是numpy的ndarray。变量的维数dtype都是从给定的ndarray参数推算出来的。共享的参数不会被复制,随后的变量改变会影响x.value

  • 更多的信息,请看shared()文档。

  • 最后,当你在算法表达式的TensorVariable实例中使用numpy的ndarray或者一个Python number,他的结果是一个TensorVariable。究竟ndarray或number发生了什么?Theano要求输入所有变量实例的表达式,所以Theano自动地把他们包装成TensorConstant
    注意:Theano在使用表达式时为每个ndarray创建一个副本,所以随后的ndarray改变不会对Theano的表达式有影响

  • 对于numpy的ndarray,dtype是给定的,但是广播模式一定要被分配。TensorConstant用一个匹配的dtype被赋予一个type,所有形状维度是1的都被赋予广播模式True。

  • 对于python的number, 广播模式是(), 但是dtype一定要被推算。Python的整数被储存在一个最小的dtype,所以小整数像1被储存在bscalar。以此类推,Python的float被储存在fscalar如果fscalar足够完美地储存,否则就用dscalar。
    注意:当config.floatX==float32.Python的float会用单精度存储

theano.tensor.as_tensor_variable(x, name=Noen, ndim=None)
- 把参数x转换成 TensorVariable 或 TensorConstant。
- 很多tensor的运算都会使用这个函数做预处理。
- 当x是一个Python的number,dtype像上述描述。
- 当x是一个list或tuple,它会被传到numpy.asarray
- 如果ndim不为空,它必须是个整数,输出会被广播。

TensorType and TensorVariable 张量类型和张量变量

class theano.tensor.TensorType(Type)
Type的类被用来表示numpy.ndarray的值
- broadcastable
一个对于每维True/False的元组。True在i的位置意味着在评估时间里,ndarray在第i维大小为1。

模式含义}
[]标量
[True]1D标量(长度为1的向量)
[True, True]2D标量(1*1矩阵)
[False]向量
[False, False]矩阵
[False]*nnD张量
[True, False]行(M*1矩阵)
[False, True]列(1*M矩阵)
[False, True, False]一个M*1*P张量(a)
[True, False, False]一个1*N*P张量(b)
[False, False, False]一个M*N*P张量(a+b的模式)

维度广播是Flase的,长度可以是1或更多。True的一定要是1。
当两个有不同维度的参数使用元素依次操作(element-wise),广播通过在最左扩展True属性。例如[False]会被扩展成[True, False]。
middle_broadcast = TensorType('complex64', [False, True, False])

  • ndim
    变量值的维度数,在构建表达图前一定要知道

  • dtype
    `int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32, float64, complex64, complex128’

  • __init__(se;f, dtype, broadcastable)

TensorVariable

class theano.tensor.TensorVariable(Variable, _tensor_py_operators)
class theano.tensor.TensorConstant(Variable, _tensor_py_operators)
class theano.tensor.TensorSharedVariable(Variable, tensor_py_operators)

class theano.tensor.__tensor_py_operators
这个混杂类有方便的属性,方法并且支持TensorVariable, TensorConstant和TensorSharedVariable。

  • type
  • ndim
  • reshape(shape, ndim=None)
  • dumshuffe(*pattern)
    pattern的一些例子:
    (‘x’) -> 令一个0维(标量)变成1为向量
    (0,1) -> 2维向量
    (1,0) -> 第一第二维反转
    (‘x’,0) -> N变成1*N
    (0,’x’) -> N变成N*1
    (2,0,1) -> A*B*C变成C*A*B
    (0,’x’,1) -> A*B变成A*1*B
    (1,’x’,0) -> A*B 变成 B*1*A
    (1,) -> 1*A 变成 A

  • flatten(ndim=1)

未完待续,实在太多了,而且最近TI比赛多,看比赛去了。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值