def test4DRaggedTensorWithTwoRaggedDimensions(self): rt = ragged.constant([[[[1, 2], [3, 4]], [[5, 6], [7, 8], [9, 10]]], [[[11, 12]], [], [[13, 14]]], []], ragged_rank=2) with self.test_session(): st = ragged.to_sparse(rt).eval() self.assertAllEqual( st.indices, [ [0, 0, 0, 0], # index for value=1 [0, 0, 0, 1], # index for value=2 [0, 0, 1, 0], # index for value=3 [0, 0, 1, 1], # index for value=4 [0, 1, 0, 0], # index for value=5 [0, 1, 0, 1], # index for value=6 [0, 1, 1, 0], # index for value=7 [0, 1, 1, 1], # index for value=8 [0, 1, 2, 0], # index for value=9 [0, 1, 2, 1], # index for value=10 [1, 0, 0, 0], # index for value=11 [1, 0, 0, 1], # index for value=12 [1, 2, 0, 0], # index for value=13 [1, 2, 0, 1], # index for value=14 ]) self.assertAllEqual( st.values, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) self.assertAllEqual(st.dense_shape, [3, 3, 3, 2])
def test4DRaggedTensorWithTwoRaggedDimensions(self): rt = ragged.constant([[[[1, 2], [3, 4]], [[5, 6], [7, 8], [9, 10]]], [[[11, 12]], [], [[13, 14]]], []], ragged_rank=2) with self.test_session(): st = ragged.to_sparse(rt).eval() self.assertAllEqual( st.indices, [ [0, 0, 0, 0], # index for value=1 [0, 0, 0, 1], # index for value=2 [0, 0, 1, 0], # index for value=3 [0, 0, 1, 1], # index for value=4 [0, 1, 0, 0], # index for value=5 [0, 1, 0, 1], # index for value=6 [0, 1, 1, 0], # index for value=7 [0, 1, 1, 1], # index for value=8 [0, 1, 2, 0], # index for value=9 [0, 1, 2, 1], # index for value=10 [1, 0, 0, 0], # index for value=11 [1, 0, 0, 1], # index for value=12 [1, 2, 0, 0], # index for value=13 [1, 2, 0, 1], # index for value=14 ]) self.assertAllEqual(st.values, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) self.assertAllEqual(st.dense_shape, [3, 3, 3, 2])
def test2DRaggedTensorWithOneRaggedDimension(self): rt = ragged.constant([['a', 'b'], ['c', 'd', 'e'], ['f'], [], ['g']]) with self.test_session(): st = ragged.to_sparse(rt).eval() self.assertAllEqual( st.indices, [[0, 0], [0, 1], [1, 0], [1, 1], [1, 2], [2, 0], [4, 0]]) self.assertAllEqual(st.values, b'a b c d e f g'.split()) self.assertAllEqual(st.dense_shape, [5, 3])
def testDocStringExample(self): rt = ragged.constant([[1, 2, 3], [4], [], [5, 6]]) st = ragged.to_sparse(rt) expected = ('SparseTensorValue(indices=' 'array([[0, 0], [0, 1], [0, 2], [1, 0], [3, 0], [3, 1]]), ' 'values=array([1, 2, 3, 4, 5, 6], dtype=int32), ' 'dense_shape=array([4, 3]))') with self.test_session(): self.assertEqual(' '.join(repr(st.eval()).split()), expected)
def testShape(self): rt = ragged.constant([[1, 2], [3, 4, 5], [6], [], [7]]) st = ragged.to_sparse(rt) self.assertEqual(st.indices.shape.as_list(), [7, 2]) self.assertEqual(st.values.shape.as_list(), [7]) self.assertEqual(st.dense_shape.shape.as_list(), [2]) rt = ragged.constant([[[1, 2]], [], [[3, 4]], []], ragged_rank=1) st = ragged.to_sparse(rt) self.assertEqual(st.indices.shape.as_list(), [4, 3]) self.assertEqual(st.values.shape.as_list(), [4]) self.assertEqual(st.dense_shape.shape.as_list(), [3]) rt = ragged.constant([[[1], [2, 3, 4, 5, 6, 7]], [[]]]) st = ragged.to_sparse(rt) self.assertEqual(st.indices.shape.as_list(), [7, 3]) self.assertEqual(st.values.shape.as_list(), [7]) self.assertEqual(st.dense_shape.shape.as_list(), [3])
def testKernelErrors(self): # An empty vector, defined using a placeholder to ensure that we can't # determine that it's invalid at graph-construction time. empty_vector = array_ops.placeholder_with_default(array_ops.zeros( [0], dtypes.int64), shape=None) bad_rt1 = ragged.from_row_splits(row_splits=[2, 3], values=[1, 2, 3]) with self.test_session(): bad_split0_error = r'First value of ragged splits must be 0.*' self.assertRaisesRegexp(errors.InvalidArgumentError, bad_split0_error, ragged.to_sparse(bad_rt1).eval) bad_rt2 = ragged.from_row_splits(row_splits=[0, 5], values=empty_vector) bad_rt3 = ragged.from_row_splits(row_splits=[0, 1], values=ragged.from_row_splits( row_splits=[0, 5], values=empty_vector)) with self.test_session(): split_mismatch1_error = r'Final value of ragged splits must match.*' for rt in [bad_rt2, bad_rt3]: self.assertRaisesRegexp(errors.InvalidArgumentError, split_mismatch1_error, ragged.to_sparse(rt).eval) bad_rt4 = ragged.from_row_splits(row_splits=[0, 5], values=ragged.from_row_splits( row_splits=[0], values=empty_vector)) with self.test_session(): split_mismatch2_error = r'Final value of ragged splits must match.*' self.assertRaisesRegexp(errors.InvalidArgumentError, split_mismatch2_error, ragged.to_sparse(bad_rt4).eval) bad_rt5 = ragged.from_row_splits(row_splits=empty_vector, values=[]) with self.test_session(): empty_splits_error = (r'ragged splits may not be empty.*') self.assertRaisesRegexp(errors.InvalidArgumentError, empty_splits_error, ragged.to_sparse(bad_rt5).eval)
def test3DRaggedTensorWithOneRaggedDimension(self): rt = ragged.constant([[[1, 2], [3, 4]], [[5, 6], [7, 8], [9, 10]], [[11, 12]], [], [[13, 14]]], ragged_rank=1) with self.test_session(): st = ragged.to_sparse(rt).eval() self.assertAllEqual( st.indices, [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1], [1, 2, 0], [1, 2, 1], [2, 0, 0], [2, 0, 1], [4, 0, 0], [4, 0, 1]]) self.assertAllEqual(st.values, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) self.assertAllEqual(st.dense_shape, [5, 3, 2])
def test3DRaggedTensorWithOneRaggedDimension(self): rt = ragged.constant([[[1, 2], [3, 4]], [[5, 6], [7, 8], [9, 10]], [[11, 12]], [], [[13, 14]]], ragged_rank=1) with self.test_session(): st = ragged.to_sparse(rt).eval() self.assertAllEqual( st.indices, [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1], [1, 2, 0], [1, 2, 1], [2, 0, 0], [2, 0, 1], [4, 0, 0], [4, 0, 1]]) self.assertAllEqual( st.values, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) self.assertAllEqual(st.dense_shape, [5, 3, 2])
def testKernelErrors(self): # An empty vector, defined using a placeholder to ensure that we can't # determine that it's invalid at graph-construction time. empty_vector = array_ops.placeholder_with_default( array_ops.zeros([0], dtypes.int64), shape=None) bad_rt1 = ragged.from_row_splits(row_splits=[2, 3], values=[1, 2, 3]) with self.test_session(): bad_split0_error = r'First value of ragged splits must be 0.*' self.assertRaisesRegexp(errors.InvalidArgumentError, bad_split0_error, ragged.to_sparse(bad_rt1).eval) bad_rt2 = ragged.from_row_splits(row_splits=[0, 5], values=empty_vector) bad_rt3 = ragged.from_row_splits( row_splits=[0, 1], values=ragged.from_row_splits(row_splits=[0, 5], values=empty_vector)) with self.test_session(): split_mismatch1_error = r'Final value of ragged splits must match.*' for rt in [bad_rt2, bad_rt3]: self.assertRaisesRegexp(errors.InvalidArgumentError, split_mismatch1_error, ragged.to_sparse(rt).eval) bad_rt4 = ragged.from_row_splits( row_splits=[0, 5], values=ragged.from_row_splits(row_splits=[0], values=empty_vector)) with self.test_session(): split_mismatch2_error = r'Final value of ragged splits must match.*' self.assertRaisesRegexp(errors.InvalidArgumentError, split_mismatch2_error, ragged.to_sparse(bad_rt4).eval) bad_rt5 = ragged.from_row_splits(row_splits=empty_vector, values=[]) with self.test_session(): empty_splits_error = (r'ragged splits may not be empty.*') self.assertRaisesRegexp(errors.InvalidArgumentError, empty_splits_error, ragged.to_sparse(bad_rt5).eval)
def testGradient(self): # rt1.shape == rt2.shape == [2, (D2), (D3), 2]. rt1 = ragged.constant([[[[1.0, 2.0], [3.0, 4.0]], [[5.0, 6.0]]]], ragged_rank=2) rt2 = ragged.constant([[[[9.0, 8.0], [7.0, 6.0]], [[5.0, 4.0]]]], ragged_rank=2) rt = ragged.map_inner_values(math_ops.add, rt1, rt2 * 2.0) st = ragged.to_sparse(rt) g1, g2 = gradients_impl.gradients(st.values, [rt1.inner_values, rt2.inner_values]) print(g1, g2) with self.test_session(): self.assertEqual(g1.eval().tolist(), [[1.0, 1.0], [1.0, 1.0], [1.0, 1.0]]) self.assertEqual(g2.eval().tolist(), [[2.0, 2.0], [2.0, 2.0], [2.0, 2.0]])
def testGradient(self): # rt1.shape == rt2.shape == [2, (D2), (D3), 2]. rt1 = ragged.constant([[[[1.0, 2.0], [3.0, 4.0]], [[5.0, 6.0]]]], ragged_rank=2) rt2 = ragged.constant([[[[9.0, 8.0], [7.0, 6.0]], [[5.0, 4.0]]]], ragged_rank=2) rt = rt1 + rt2 * 2.0 st = ragged.to_sparse(rt) g1, g2 = gradients_impl.gradients(st.values, [rt1.inner_values, rt2.inner_values]) print(g1, g2) with self.test_session(): self.assertEqual(g1.eval().tolist(), [[1.0, 1.0], [1.0, 1.0], [1.0, 1.0]]) self.assertEqual(g2.eval().tolist(), [[2.0, 2.0], [2.0, 2.0], [2.0, 2.0]])