提交 22822cb1 authored 作者: Frederic Bastien's avatar Frederic Bastien

implemented AdvancedIncSubtensor1.grad(the grad of grad of var[vector of index].

上级 1af69154
...@@ -4058,6 +4058,16 @@ class AdvancedIncSubtensor1(Op): ...@@ -4058,6 +4058,16 @@ class AdvancedIncSubtensor1(Op):
x, y, ilist = ishapes x, y, ilist = ishapes
return [x] return [x]
def grad(self, inputs, grads):
g_output, = grads
x, y = inputs[:2]
idx_list = inputs[2:]
gx = g_output
gy = advanced_subtensor1(g_output, *idx_list)
return [gx, gy] + [None]*len(idx_list)
advanced_inc_subtensor1 = AdvancedIncSubtensor1() advanced_inc_subtensor1 = AdvancedIncSubtensor1()
class AdvancedSubtensor(Op): class AdvancedSubtensor(Op):
......
...@@ -1634,6 +1634,12 @@ class T_subtensor(unittest.TestCase): ...@@ -1634,6 +1634,12 @@ class T_subtensor(unittest.TestCase):
return sum(t[idx_]) return sum(t[idx_])
utt.verify_grad(fct, [data]) utt.verify_grad(fct, [data])
# Test the grad of the grad (e.i. AdvancedIncSubtensor1.grad)
def fct(t):
return grad(sum(t[idx_]),t)
utt.verify_grad(fct, [data])
# Test shape of AdvancedIncSubtensor1 and AdvancedSubtensor1
if idx is idxs[0]: if idx is idxs[0]:
f = function([], [gn.shape, n[idx_].shape], mode=None) f = function([], [gn.shape, n[idx_].shape], mode=None)
topo = f.maker.env.toposort() topo = f.maker.env.toposort()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论