Add asserts to check if self.gradients is None before computing gradients in L_Op

上级 4acd7fc0
...@@ -49,7 +49,6 @@ class GpuConnectionistTemporalClassification(gof.COp): ...@@ -49,7 +49,6 @@ class GpuConnectionistTemporalClassification(gof.COp):
'your system.') 'your system.')
self.compute_grad = compute_grad self.compute_grad = compute_grad
self.gradients = None
# Return only the cost. Gradient will be returned by grad() # Return only the cost. Gradient will be returned by grad()
self.default_output = 0 self.default_output = 0
...@@ -129,6 +128,8 @@ class GpuConnectionistTemporalClassification(gof.COp): ...@@ -129,6 +128,8 @@ class GpuConnectionistTemporalClassification(gof.COp):
def L_op(self, inputs, outputs, output_grads): def L_op(self, inputs, outputs, output_grads):
# Gradients computed by Op # Gradients computed by Op
gradients = self.gradients gradients = self.gradients
assert gradients is not None
# Gradients of original function, to compose chain rule # Gradients of original function, to compose chain rule
grad_op = output_grads[0] grad_op = output_grads[0]
grad_shuffle = GpuDimShuffle(input_broadcastable=(False, False, False,), grad_shuffle = GpuDimShuffle(input_broadcastable=(False, False, False,),
......
...@@ -116,6 +116,8 @@ class ConnectionistTemporalClassification(gof.COp, gof.OpenMPOp): ...@@ -116,6 +116,8 @@ class ConnectionistTemporalClassification(gof.COp, gof.OpenMPOp):
def L_op(self, inputs, outputs, output_grads): def L_op(self, inputs, outputs, output_grads):
gradients = self.gradients gradients = self.gradients
assert gradients is not None
grad_op = output_grads[0] grad_op = output_grads[0]
total_grad = T.basic.batched_dot(grad_op, gradients.dimshuffle(1, 0, 2)).dimshuffle(1, 0, 2) total_grad = T.basic.batched_dot(grad_op, gradients.dimshuffle(1, 0, 2)).dimshuffle(1, 0, 2)
return [total_grad, return [total_grad,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论