def testSigmoidGrad(self): with ops.device("/device:IPU:0"): pa = array_ops.placeholder(np.float32, [3], name="grad") pb = array_ops.placeholder(np.float32, [3], name="in") c = gen_math_ops.sigmoid_grad(pa, pb) with ops.device('cpu'): report = gen_ipu_ops.ipu_event_trace() tu.configure_ipu_system() with tu.ipu_session() as sess: sess.run(report) fd = {pa: [2.0, 0.5, 1.0], pb: [-1.0, 1.0, 6.0]} result = sess.run(c, fd) self.assertAllClose(result, [2.0, 0.25, 0.0]) result = sess.run(report) self.assertTrue(len(result) == 3) s = tu.extract_all_strings_from_event_trace(result) cs_list = tu.get_compute_sets_from_report(s) ok = ['__seed*', 'SigmoidGrad/custom-call/NonLinearityGrad'] self.assertTrue(tu.check_all_compute_sets_and_list(cs_list, ok))
def test_sigmoidgrad_3d(self): y = constant_op.constant(self.generate_random_numbers(450, 1.0, 15.0), shape=[10, 3, 15]) y_delta = constant_op.constant(self.generate_random_numbers( 450, -3.0, 10.0), shape=[10, 3, 15]) out = sigmoid_grad(y, y_delta) def run_test(sess): return sess.run(out) assert np.allclose(self.with_ngraph(run_test), self.without_ngraph(run_test))
def testSigmoidGrad(self): with self.session() as sess: with ops.device("/device:IPU:0"): pa = array_ops.placeholder(np.float32, [3], name="grad") pb = array_ops.placeholder(np.float32, [3], name="in") c = gen_math_ops.sigmoid_grad(pa, pb) report = tu.ReportJSON(self, sess) report.reset() fd = {pa: [2.0, 0.5, 1.0], pb: [-1.0, 1.0, 6.0]} result = sess.run(c, fd) self.assertAllClose(result, [2.0, 0.25, 0.0]) report.parse_log(assert_len=4) ok = ['__seed*', 'SigmoidGrad/sigmoid-grad/NonLinearityGrad'] report.assert_all_compute_sets_and_list(ok)
def _SigmoidGradGrad(op, grad): with ops.control_dependencies([grad]): a = math_ops.conj(op.inputs[0]) b = math_ops.conj(op.inputs[1]) gb = grad * b return gb - 2.0 * gb * a, gen_math_ops.sigmoid_grad(a, grad)
def _SigmoidGrad(op, grad): """Returns grad * sigmoid(x) * (1 - sigmoid(x)).""" y = op.outputs[0] # y = sigmoid(x) with ops.control_dependencies([grad]): y = math_ops.conj(y) return gen_math_ops.sigmoid_grad(y, grad)