提交 07d44ce0 authored 作者: Olivier Breuleux's avatar Olivier Breuleux

merge

...@@ -407,6 +407,9 @@ class T_transpose(unittest.TestCase): ...@@ -407,6 +407,9 @@ class T_transpose(unittest.TestCase):
#test aliasing #test aliasing
tval += 55.0 tval += 55.0
self.failUnless(n.data[0,0,0] == 56.0) self.failUnless(n.data[0,0,0] == 56.0)
def test_grad(self):
verify_grad(self, TransposeInplace, [numpy.random.rand(2, 3)])
verify_grad(self, TransposeInplace, [numpy.ones(3)])
class T_subtensor(unittest.TestCase): class T_subtensor(unittest.TestCase):
def test0_err_invalid(self): def test0_err_invalid(self):
...@@ -838,6 +841,9 @@ class t_dot(unittest.TestCase): ...@@ -838,6 +841,9 @@ class t_dot(unittest.TestCase):
def test_align_3_2(self): self.not_aligned(self.rand(5,4,3), self.rand(6,7)) def test_align_3_2(self): self.not_aligned(self.rand(5,4,3), self.rand(6,7))
def test_align_3_3(self): self.not_aligned(self.rand(5,4,3), self.rand(6,7,8)) def test_align_3_3(self): self.not_aligned(self.rand(5,4,3), self.rand(6,7,8))
def test_grad(self):
verify_grad(self, Dot, [self.rand(2,3), self.rand(3,2)])
class t_gemm(unittest.TestCase): class t_gemm(unittest.TestCase):
def setUp(self): def setUp(self):
numpy.random.seed(44) numpy.random.seed(44)
......
...@@ -43,6 +43,15 @@ class Function: ...@@ -43,6 +43,15 @@ class Function:
linker_cls - the linker class linker_cls - the linker class
linker - the linker allocated from env linker - the linker allocated from env
env - The env passed to the linker env - The env passed to the linker
REMARK Re: Memory ownership, aliasing, re-use
-------------------------------------------
Note that the objects returned by Function.__call__(self, *args) are owned
by self, and that in general these outputs might be overwritten (in-place)
by subsequent calls to self.__call__(*args). Why? This behaviour is
necessary for inplace operations to work, and Function's linker might re-use
memory from one execution to the next in order to make each execution faster.
""" """
def __init__(self, inputs, outputs, def __init__(self, inputs, outputs,
features = [], features = [],
......
"""A Result to store numpy.ndarray with basic accompanying Ops""" """A L{Result} to store L{numpy.ndarray} with basic accompanying L{Op}s"""
import sys # for sys.maxint import sys # for sys.maxint
import inspect import inspect
...@@ -17,12 +17,12 @@ import scalar as scal ...@@ -17,12 +17,12 @@ import scalar as scal
class Tensor(BaseTensor): class Tensor(BaseTensor):
""" """
This subclass of BaseTensor provides operator overloading using implementations This subclass of L{BaseTensor} provides operator overloading using
of Tensor operations contained in this file. implementations of L{Tensor} operations contained in this file.
Operators: Operators:
- most numeric operators are overloaded (to return Ops that perform the - most numeric operators are overloaded (to return L{Op}s that
corresponding calculation) perform the corresponding calculation)
""" """
#UNARY #UNARY
...@@ -72,7 +72,7 @@ s2t.Tensor = Tensor ...@@ -72,7 +72,7 @@ s2t.Tensor = Tensor
# alternate Tensor constructor # alternate Tensor constructor
def astensor(data, broadcastable=None, role=None, name=None): def astensor(data, broadcastable=None, role=None, name=None):
"""Return a Tensor containing given data""" """Return a L{Tensor} containing given data"""
if isinstance(data, Tensor) and broadcastable is None and role is None and name is None: if isinstance(data, Tensor) and broadcastable is None and role is None and name is None:
return data return data
data = numpy.asarray(data) data = numpy.asarray(data)
...@@ -239,7 +239,7 @@ class TransposeInplace(_Op, Viewer): ...@@ -239,7 +239,7 @@ class TransposeInplace(_Op, Viewer):
return [rval] return [rval]
def impl(self, x): def impl(self, x):
return x.T #numpy's transpose return x.T #numpy's transpose
def grad(self, (x,), (gz),): def grad(self, (x,), (gz,)):
return transpose(gz), return transpose(gz),
def c_code(self, (x, ), (z, ), sub): def c_code(self, (x, ), (z, ), sub):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论