提交 48a3cc39 authored 作者: Gijs van Tulder's avatar Gijs van Tulder

Add functions to create tensor5, dtensor5 etc.

上级 c5d3942b
...@@ -17,17 +17,18 @@ shapes = [ ...@@ -17,17 +17,18 @@ shapes = [
('col', (False, True)), ('col', (False, True)),
('matrix', (False,False)), ('matrix', (False,False)),
('tensor3', (False,False,False)), ('tensor3', (False,False,False)),
('tensor4', (False,False,False,False)),] ('tensor4', (False,False,False,False)),
('tensor5', (False,False,False,False,False)),]
hdr = '============ =========== ==== =========== =================================' hdr = '============ =========== ==== ============ ==================================='
print(hdr) print(hdr)
print('Constructor dtype ndim shape broadcastable') print('Constructor dtype ndim shape broadcastable')
print(hdr) print(hdr)
for letter in letters: for letter in letters:
for shape in shapes: for shape in shapes:
suff = ',)' if len(shape[1])==1 else ')' suff = ',)' if len(shape[1])==1 else ')'
s = '(' + ','.join('1' if b else '?' for b in shape[1]) + suff s = '(' + ','.join('1' if b else '?' for b in shape[1]) + suff
print('%s%-10s %-10s %-4s %-10s %-20s' %( print('%s%-10s %-10s %-4s %-11s %-20s' %(
letter[0], shape[0], letter[1], len(shape[1]), s, shape[1] letter[0], shape[0], letter[1], len(shape[1]), s, shape[1]
)) ))
print(hdr) print(hdr)
...@@ -85,6 +85,10 @@ floating-point precision. ...@@ -85,6 +85,10 @@ floating-point precision.
Return a Variable for a 4-dimensional ndarray Return a Variable for a 4-dimensional ndarray
.. function:: tensor5(name=None, dtype=config.floatX)
Return a Variable for a 5-dimensional ndarray
.. #COMMENT .. #COMMENT
Each of the types described above can be constructed by two methods: Each of the types described above can be constructed by two methods:
a singular version (e.g., :ref:`dmatrix <libdoc_tensor_creation>`) a singular version (e.g., :ref:`dmatrix <libdoc_tensor_creation>`)
...@@ -112,66 +116,74 @@ They are all callable, and accept an optional ``name`` argument. So for example ...@@ -112,66 +116,74 @@ They are all callable, and accept an optional ``name`` argument. So for example
table generated by table generated by
$ python Theano/doc/generate_dtype_tensor_table.py $ python Theano/doc/generate_dtype_tensor_table.py
============ =========== ==== =========== ================================= ============ =========== ==== ============ ===================================
Constructor dtype ndim shape broadcastable Constructor dtype ndim shape broadcastable
============ =========== ==== =========== ================================= ============ =========== ==== ============ ===================================
bscalar int8 0 () () bscalar int8 0 () ()
bvector int8 1 (?,) (False,) bvector int8 1 (?,) (False,)
brow int8 2 (1,?) (True, False) brow int8 2 (1,?) (True, False)
bcol int8 2 (?,1) (False, True) bcol int8 2 (?,1) (False, True)
bmatrix int8 2 (?,?) (False, False) bmatrix int8 2 (?,?) (False, False)
btensor3 int8 3 (?,?,?) (False, False, False) btensor3 int8 3 (?,?,?) (False, False, False)
btensor4 int8 4 (?,?,?,?) (False, False, False, False) btensor4 int8 4 (?,?,?,?) (False, False, False, False)
wscalar int16 0 () () btensor5 int8 5 (?,?,?,?,?) (False, False, False, False, False)
wvector int16 1 (?,) (False,) wscalar int16 0 () ()
wrow int16 2 (1,?) (True, False) wvector int16 1 (?,) (False,)
wcol int16 2 (?,1) (False, True) wrow int16 2 (1,?) (True, False)
wmatrix int16 2 (?,?) (False, False) wcol int16 2 (?,1) (False, True)
wtensor3 int16 3 (?,?,?) (False, False, False) wmatrix int16 2 (?,?) (False, False)
wtensor4 int16 4 (?,?,?,?) (False, False, False, False) wtensor3 int16 3 (?,?,?) (False, False, False)
iscalar int32 0 () () wtensor4 int16 4 (?,?,?,?) (False, False, False, False)
ivector int32 1 (?,) (False,) wtensor5 int16 5 (?,?,?,?,?) (False, False, False, False, False)
irow int32 2 (1,?) (True, False) iscalar int32 0 () ()
icol int32 2 (?,1) (False, True) ivector int32 1 (?,) (False,)
imatrix int32 2 (?,?) (False, False) irow int32 2 (1,?) (True, False)
itensor3 int32 3 (?,?,?) (False, False, False) icol int32 2 (?,1) (False, True)
itensor4 int32 4 (?,?,?,?) (False, False, False, False) imatrix int32 2 (?,?) (False, False)
lscalar int64 0 () () itensor3 int32 3 (?,?,?) (False, False, False)
lvector int64 1 (?,) (False,) itensor4 int32 4 (?,?,?,?) (False, False, False, False)
lrow int64 2 (1,?) (True, False) itensor5 int32 5 (?,?,?,?,?) (False, False, False, False, False)
lcol int64 2 (?,1) (False, True) lscalar int64 0 () ()
lmatrix int64 2 (?,?) (False, False) lvector int64 1 (?,) (False,)
ltensor3 int64 3 (?,?,?) (False, False, False) lrow int64 2 (1,?) (True, False)
ltensor4 int64 4 (?,?,?,?) (False, False, False, False) lcol int64 2 (?,1) (False, True)
dscalar float64 0 () () lmatrix int64 2 (?,?) (False, False)
dvector float64 1 (?,) (False,) ltensor3 int64 3 (?,?,?) (False, False, False)
drow float64 2 (1,?) (True, False) ltensor4 int64 4 (?,?,?,?) (False, False, False, False)
dcol float64 2 (?,1) (False, True) ltensor5 int64 5 (?,?,?,?,?) (False, False, False, False, False)
dmatrix float64 2 (?,?) (False, False) dscalar float64 0 () ()
dtensor3 float64 3 (?,?,?) (False, False, False) dvector float64 1 (?,) (False,)
dtensor4 float64 4 (?,?,?,?) (False, False, False, False) drow float64 2 (1,?) (True, False)
fscalar float32 0 () () dcol float64 2 (?,1) (False, True)
fvector float32 1 (?,) (False,) dmatrix float64 2 (?,?) (False, False)
frow float32 2 (1,?) (True, False) dtensor3 float64 3 (?,?,?) (False, False, False)
fcol float32 2 (?,1) (False, True) dtensor4 float64 4 (?,?,?,?) (False, False, False, False)
fmatrix float32 2 (?,?) (False, False) dtensor5 float64 5 (?,?,?,?,?) (False, False, False, False, False)
ftensor3 float32 3 (?,?,?) (False, False, False) fscalar float32 0 () ()
ftensor4 float32 4 (?,?,?,?) (False, False, False, False) fvector float32 1 (?,) (False,)
cscalar complex64 0 () () frow float32 2 (1,?) (True, False)
cvector complex64 1 (?,) (False,) fcol float32 2 (?,1) (False, True)
crow complex64 2 (1,?) (True, False) fmatrix float32 2 (?,?) (False, False)
ccol complex64 2 (?,1) (False, True) ftensor3 float32 3 (?,?,?) (False, False, False)
cmatrix complex64 2 (?,?) (False, False) ftensor4 float32 4 (?,?,?,?) (False, False, False, False)
ctensor3 complex64 3 (?,?,?) (False, False, False) ftensor5 float32 5 (?,?,?,?,?) (False, False, False, False, False)
ctensor4 complex64 4 (?,?,?,?) (False, False, False, False) cscalar complex64 0 () ()
zscalar complex128 0 () () cvector complex64 1 (?,) (False,)
zvector complex128 1 (?,) (False,) crow complex64 2 (1,?) (True, False)
zrow complex128 2 (1,?) (True, False) ccol complex64 2 (?,1) (False, True)
zcol complex128 2 (?,1) (False, True) cmatrix complex64 2 (?,?) (False, False)
zmatrix complex128 2 (?,?) (False, False) ctensor3 complex64 3 (?,?,?) (False, False, False)
ztensor3 complex128 3 (?,?,?) (False, False, False) ctensor4 complex64 4 (?,?,?,?) (False, False, False, False)
ztensor4 complex128 4 (?,?,?,?) (False, False, False, False) ctensor5 complex64 5 (?,?,?,?,?) (False, False, False, False, False)
============ =========== ==== =========== ================================= zscalar complex128 0 () ()
zvector complex128 1 (?,) (False,)
zrow complex128 2 (1,?) (True, False)
zcol complex128 2 (?,1) (False, True)
zmatrix complex128 2 (?,?) (False, False)
ztensor3 complex128 3 (?,?,?) (False, False, False)
ztensor4 complex128 4 (?,?,?,?) (False, False, False, False)
ztensor5 complex128 5 (?,?,?,?,?) (False, False, False, False, False)
============ =========== ==== ============ ===================================
Plural Constructors Plural Constructors
-------------------------- --------------------------
...@@ -220,11 +232,11 @@ If you would like to construct a tensor variable with a non-standard ...@@ -220,11 +232,11 @@ If you would like to construct a tensor variable with a non-standard
broadcasting pattern, or a larger number of dimensions you'll need to create broadcasting pattern, or a larger number of dimensions you'll need to create
your own :class:`TensorType` instance. You create such an instance by passing your own :class:`TensorType` instance. You create such an instance by passing
the dtype and broadcasting pattern to the constructor. For example, you the dtype and broadcasting pattern to the constructor. For example, you
can create your own 5-dimensional tensor type can create your own 6-dimensional tensor type
>>> dtensor5 = TensorType('float64', (False,)*5) >>> dtensor6 = TensorType('float64', (False,)*6)
>>> x = dtensor5() >>> x = dtensor6()
>>> z = dtensor5('z') >>> z = dtensor6('z')
You can also redefine some of the provided types and they will interact You can also redefine some of the provided types and they will interact
correctly: correctly:
......
...@@ -175,13 +175,13 @@ by :ref:`broadcasting <libdoc_tensor_broadcastable>`. ...@@ -175,13 +175,13 @@ by :ref:`broadcasting <libdoc_tensor_broadcastable>`.
The following types are available: The following types are available:
* **byte**: ``bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor4`` * **byte**: ``bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor4, btensor5``
* **16-bit integers**: ``wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4`` * **16-bit integers**: ``wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4, wtensor5``
* **32-bit integers**: ``iscalar, ivector, imatrix, irow, icol, itensor3, itensor4`` * **32-bit integers**: ``iscalar, ivector, imatrix, irow, icol, itensor3, itensor4, itensor5``
* **64-bit integers**: ``lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4`` * **64-bit integers**: ``lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4, ltensor5``
* **float**: ``fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4`` * **float**: ``fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4, ftensor5``
* **double**: ``dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4`` * **double**: ``dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4, dtensor5``
* **complex**: ``cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4`` * **complex**: ``cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4, ctensor5``
The previous list is not exhaustive and a guide to all types compatible The previous list is not exhaustive and a guide to all types compatible
with NumPy arrays may be found here: :ref:`tensor creation<libdoc_tensor_creation>`. with NumPy arrays may be found here: :ref:`tensor creation<libdoc_tensor_creation>`.
......
...@@ -1030,6 +1030,34 @@ def tensor4(name=None, dtype=None): ...@@ -1030,6 +1030,34 @@ def tensor4(name=None, dtype=None):
tensor4s, ftensor4s, dtensor4s, itensor4s, ltensor4s = _multi( tensor4s, ftensor4s, dtensor4s, itensor4s, ltensor4s = _multi(
tensor4, ftensor4, dtensor4, itensor4, ltensor4) tensor4, ftensor4, dtensor4, itensor4, ltensor4)
ctensor5 = TensorType('complex64', ((False,) * 5))
ztensor5 = TensorType('complex128', ((False,) * 5))
ftensor5 = TensorType('float32', ((False,) * 5))
dtensor5 = TensorType('float64', ((False,) * 5))
btensor5 = TensorType('int8', ((False,) * 5))
wtensor5 = TensorType('int16', ((False,) * 5))
itensor5 = TensorType('int32', ((False,) * 5))
ltensor5 = TensorType('int64', ((False,) * 5))
def tensor5(name=None, dtype=None):
"""Return a symbolic 5-D variable.
Parameters
----------
dtype: numeric type
None means to use theano.config.floatX.
name
A name to attach to this variable.
"""
if dtype is None:
dtype = config.floatX
type = TensorType(dtype, (False, False, False, False, False))
return type(name)
tensor5s, ftensor5s, dtensor5s, itensor5s, ltensor5s = _multi(
tensor5, ftensor5, dtensor5, itensor5, ltensor5)
Tensor = TensorType Tensor = TensorType
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论