提交 159a0597 authored 作者: Olivier Breuleux's avatar Olivier Breuleux

bla

上级 04ab186e
...@@ -145,13 +145,16 @@ class omega_op(gof.PythonOp): ...@@ -145,13 +145,16 @@ class omega_op(gof.PythonOp):
return UNDEFINED return UNDEFINED
def scalar_switch(normal_f, scalar_f, scalar_f_reverse): def scalar_switch(normal_f, scalar_f, scalar_f_reverse = None):
def f(x, y): def f(x, y):
x, y = wrap(x), wrap(y) x, y = wrap(x), wrap(y)
if x.constant and not x.data.shape:
return scalar_f_reverse(y, x)
if y.constant and not y.data.shape: if y.constant and not y.data.shape:
return scalar_f(x, y) return scalar_f(x, y)
if x.constant and not x.data.shape:
if scalar_f_reverse:
return scalar_f_reverse(y, x)
else:
raise TypeError("You cannot do this operation on a scalar.")
return normal_f(x, y) return normal_f(x, y)
return f return f
...@@ -286,8 +289,8 @@ def sub_scalar_l(x, a): ...@@ -286,8 +289,8 @@ def sub_scalar_l(x, a):
def isub_scalar_r(x, a): def isub_scalar_r(x, a):
return iadd_scalar(x, -a) return iadd_scalar(x, -a)
def isub_scalar_l(x, a): # def isub_scalar_l(x, a):
return iadd_scalar(-x, a) # return iadd_scalar(ineg(x), a)
## Element-wise multiplication ## ## Element-wise multiplication ##
...@@ -363,8 +366,8 @@ def div_scalar_l(x, a): ...@@ -363,8 +366,8 @@ def div_scalar_l(x, a):
def idiv_scalar_r(x, a): def idiv_scalar_r(x, a):
return iscale(x, inv_elemwise(a)) return iscale(x, inv_elemwise(a))
def idiv_scalar_l(x, a): # def idiv_scalar_l(x, a):
return iscale(inv_elemwise(x), a) # return iscale(inv_elemwise(x), a)
...@@ -485,16 +488,16 @@ class sum(omega_op): ...@@ -485,16 +488,16 @@ class sum(omega_op):
add = scalar_switch(add_elemwise, add_scalar, add_scalar) add = scalar_switch(add_elemwise, add_scalar, add_scalar)
iadd = scalar_switch(iadd_elemwise, iadd_scalar, iadd_scalar) iadd = scalar_switch(iadd_elemwise, iadd_scalar)
sub = scalar_switch(sub_elemwise, sub_scalar_r, sub_scalar_l) sub = scalar_switch(sub_elemwise, sub_scalar_r, sub_scalar_l)
isub = scalar_switch(isub_elemwise, isub_scalar_r, isub_scalar_l) isub = scalar_switch(isub_elemwise, isub_scalar_r)
mul = scalar_switch(mul_elemwise, scale, scale) mul = scalar_switch(mul_elemwise, scale, scale)
imul = scalar_switch(imul_elemwise, iscale, iscale) imul = scalar_switch(imul_elemwise, iscale)
div = scalar_switch(div_elemwise, div_scalar_r, div_scalar_l) div = scalar_switch(div_elemwise, div_scalar_r, div_scalar_l)
idiv = scalar_switch(idiv_elemwise, idiv_scalar_r, idiv_scalar_l) idiv = scalar_switch(idiv_elemwise, idiv_scalar_r)
pow = scalar_switch(pow_elemwise, pow_scalar_r, pow_scalar_l) pow = scalar_switch(pow_elemwise, pow_scalar_r, pow_scalar_l)
ipow = scalar_switch(ipow_elemwise, ipow_scalar_r, ipow_scalar_l) ipow = scalar_switch(ipow_elemwise, ipow_scalar_r, ipow_scalar_l)
......
...@@ -179,6 +179,9 @@ core.pop_mode() ...@@ -179,6 +179,9 @@ core.pop_mode()
# @omega_compile # @omega_compile
def autoassociator(w, x): def autoassociator(w, x):
forward = sigmoid(core.dot(sigmoid(core.dot(x, w)), w.T)) forward = sigmoid(core.dot(sigmoid(core.dot(x, w)), w.T))
rec_error = core.sum(core.sqr(x - forward)) rec_error = core.sum(core.sqr(x - forward))
...@@ -249,3 +252,6 @@ x += y.T ...@@ -249,3 +252,6 @@ x += y.T
print x print x
core.pop_mode() core.pop_mode()
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论