def testScan(self): with ops.device("/GPU:0" if test.is_gpu_available() else "/CPU:0"): out = ctc_ops._scan(lambda accum, elem: accum + elem, constant_op.constant([1.0, 2.0, 3.0]), 23.0) self.assertAllEqual([24.0, 26.0, 29.0], out) out = ctc_ops._scan(lambda a, e: a + e, constant_op.constant([1.0, 2.0, 3.0]), 23.0, inclusive=True) self.assertAllEqual([23.0, 24.0, 26.0, 29.0], out) out = ctc_ops._scan(lambda a, e: a + e, constant_op.constant([1.0, 2.0, 3.0]), 23.0, reverse=True) self.assertAllEqual([29.0, 28.0, 26.0], out) out = ctc_ops._scan(lambda a, e: a + e, constant_op.constant([1.0, 2.0, 3.0]), 23.0, reverse=True, inclusive=True) self.assertAllEqual([29.0, 28.0, 26.0, 23.0], out) out = ctc_ops._scan( lambda a, e: a + e, constant_op.constant([[0.0, 1.0], [2.0, 3.0], [4.0, 5.0]]), constant_op.constant([23.0, 24.0])) self.assertAllEqual([[23.0, 25.0], [25.0, 28.0], [29.0, 33.0]], out)
def testScan(self): with ops.device("/GPU:0" if test.is_gpu_available() else "/CPU:0"): out = ctc_ops._scan( lambda accum, elem: accum + elem, constant_op.constant([1.0, 2.0, 3.0]), 23.0) self.assertAllEqual([24.0, 26.0, 29.0], out) out = ctc_ops._scan( lambda a, e: a + e, constant_op.constant([1.0, 2.0, 3.0]), 23.0, inclusive=True) self.assertAllEqual([23.0, 24.0, 26.0, 29.0], out) out = ctc_ops._scan( lambda a, e: a + e, constant_op.constant([1.0, 2.0, 3.0]), 23.0, reverse=True) self.assertAllEqual([29.0, 28.0, 26.0], out) out = ctc_ops._scan( lambda a, e: a + e, constant_op.constant([1.0, 2.0, 3.0]), 23.0, reverse=True, inclusive=True) self.assertAllEqual([29.0, 28.0, 26.0, 23.0], out) out = ctc_ops._scan( lambda a, e: a + e, constant_op.constant([[0.0, 1.0], [2.0, 3.0], [4.0, 5.0]]), constant_op.constant([23.0, 24.0])) self.assertAllEqual([[23.0, 25.0], [25.0, 28.0], [29.0, 33.0]], out)
def testScanCapturesVariables(self): with self.cached_session() as sess: x = random_ops.random_uniform([]) fn = lambda accum, elem: accum + x * elem out = ctc_ops._scan(fn, constant_op.constant([0.0, 1.0, 2.0]), 23.0) self.assertAllEqual(*sess.run([ [23.0 + x * 0.0, 23.0 + x * 1.0, 23.0 + x * 3.0], out ]))
def testScanCapturesVariables(self): with self.cached_session() as sess: x = random_ops.random_uniform([]) fn = lambda accum, elem: accum + x * elem out = ctc_ops._scan(fn, constant_op.constant([0.0, 1.0, 2.0]), 23.0) self.assertAllClose(*sess.run([ [23.0 + x * 0.0, 23.0 + x * 1.0, 23.0 + x * 3.0], out ]))
def testScanMultipleAccumulators(self): with ops.device("/GPU:0" if test.is_gpu_available() else "/CPU:0"): def fn(accum, elem): accum_a, accum_b = accum return accum_a + elem, accum_b * elem out = ctc_ops._scan( fn, constant_op.constant([1.0, 2.0, 3.0]), (23.0, constant_op.constant([1.0, 2.0]))) a, b = out self.assertAllEqual([24.0, 26.0, 29.0], a) self.assertAllEqual([[1.0, 2.0], [2.0, 4.0], [6.0, 12.0]], b)
def testScanMultipleElements(self): with ops.device("/GPU:0" if test.is_gpu_available() else "/CPU:0"): def fn(accum, elem): elem_a, elem_b = elem return accum + (elem_a * elem_b) elems_a = constant_op.constant([1.0, 2.0, 3.0]) elems_b = constant_op.constant([[1.0, 2.0], [2.0, 3.0], [3.0, 4.0]]) out = ctc_ops._scan( fn, (elems_a, elems_b), initial=constant_op.constant([0.0, 0.0])) self.assertAllEqual( [[1.0, 2.0], [5.0, 8.0], [14.0, 20.0]], out)