提交 d36528cb authored 作者: James Bergstra's avatar James Bergstra

moved tensor.basic.Outer -> sandbox.blas_ger.GER

上级 53069317
"""
Optimization to specialize gemm -> ger are not written
Scipy implementation is not written
C implementation is not written.
Tests are not written.
"""
class GER(Op):
"""
General rank-1 update
A <- A + a x' y
For matrix A, vectors x, y, and scalar a.
"""
def __init__(self, inplace):
self.inplace = bool(inplace)
if self.inplace:
self.destroy_map = {0: [0]}
def __hash__(self):
return hash((type(self), self.inplace))
def __eq__(self, other):
return hash((type(self), self.inplace))
def make_node(self, *inputs):
inputs = map(as_tensor_variable, inputs)
A, a, x, y = inputs
nx = x.type.ndim
ny = y.type.ndim
if nx != 1: raise TypeError('non-vector arg0 to outer()', x)
if ny != 1: raise TypeError('not-vector arg1 to outer()', y)
if A.dtype != a.dtype:
raise TypeError('dtype mismatch', (A.dtype, a.dtype))
if A.dtype != x.dtype:
raise TypeError('dtype mismatch', (A.dtype, x.dtype))
if A.dtype != y.dtype:
raise TypeError('dtype mismatch', (A.dtype, y.dtype))
return Apply(self, inputs, [A.type()])
def perform(self, node, inp, out):
A, a, x, y = inp
if not self.inplace:
A = A.copy()
A += a * numpy.outer(x, y)
out[0][0] = A
# grad not needed because this is put in during optimization
def __str__(self):
return "GER"
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论