def test_to_sequence_basic(device_id): dev = cntk_device(device_id) x = C.input_variable((C.FreeDimension, 2)) x_seq = C.to_sequence(x) assert len(x_seq.dynamic_axes) == 2 x_data = np.asarray([[[1, 2], [-1000, -1000]], [[3, 4], [5, 6]]], dtype=np.float32) result = x_seq.eval({x : x_data}, device=dev) assert np.array_equal(result, x_data) x = C.input_variable((C.FreeDimension, 2, 3), is_sparse=True) x_seq_lens = C.input_variable(()) x_seq = C.to_sequence(x, x_seq_lens) seq1_data = [[[0, 1, 1], [0, 1, 0]], [[1, 0, 0], [1, 0, 1]]] csr_seq1 = _to_csr(seq1_data) ndarrayview1 = C.NDArrayView.from_csr(csr_seq1, shape=(2, 2, 3), device=C.cpu()) seq2_data = [[0, 1, 1], [1, 1, 0]] csr_seq2 = _to_csr([seq2_data, [[0, 0, 0], [0, 0, 0]]]) ndarrayview2 = C.NDArrayView.from_csr(csr_seq2, shape=(2, 2, 3), device=C.cpu()) x_data = C.Value.create(C.input_variable((2, 2, 3), is_sparse=True), [ndarrayview1, ndarrayview2], device=dev).data x_seq_lens_data = np.asarray([2, 1], dtype=np.float32) result = x_seq.eval({x : x_data, x_seq_lens : x_seq_lens_data}, device=dev, as_numpy=False) result_dense = _to_dense(result, True) assert np.array_equal(result_dense[0], seq1_data) assert np.array_equal(result_dense[1], [seq2_data])
def test_to_sequence_basic(device_id): dev = cntk_device(device_id) x = C.input_variable((C.FreeDimension, 2)) x_seq = C.to_sequence(x) assert len(x_seq.dynamic_axes) == 2 x_data = np.asarray([[[1, 2], [-1000, -1000]], [[3, 4], [5, 6]]], dtype=np.float32) result = x_seq.eval({x : x_data}, device=dev) assert np.array_equal(result, x_data) x = C.input_variable((C.FreeDimension, 2, 3), is_sparse=True) x_seq_lens = C.input_variable(()) x_seq = C.to_sequence(x, x_seq_lens) seq1_data = [[[0, 1, 1], [0, 1, 0]], [[1, 0, 0], [1, 0, 1]]] csr_seq1 = _to_csr(seq1_data) ndarrayview1 = C.NDArrayView.from_csr(csr_seq1, shape=(2, 2, 3), device=C.cpu()) seq2_data = [[0, 1, 1], [1, 1, 0]] csr_seq2 = _to_csr([seq2_data, [[0, 0, 0], [0, 0, 0]]]) ndarrayview2 = C.NDArrayView.from_csr(csr_seq2, shape=(2, 2, 3), device=C.cpu()) x_data = C.Value.create(C.input_variable((2, 2, 3), is_sparse=True), [ndarrayview1, ndarrayview2], device=dev).data x_seq_lens_data = np.asarray([2, 1], dtype=np.float32) result = x_seq.eval({x : x_data, x_seq_lens : x_seq_lens_data}, device=dev, as_numpy=False) result_dense = _to_dense(result, True) assert np.array_equal(result_dense[0], seq1_data) assert np.array_equal(result_dense[1], [seq2_data])
def test_2d_non_sequence_sparse_one_hot(): x = C.input_variable((2,)) num_classes = 3 sparse_one_hot = C.one_hot(x, num_classes, sparse_output=True) indices = np.asarray([[2, 1], [0, 2], [1, 0]]) result = sparse_one_hot.eval({x : indices}, as_numpy=False) result_dense = _to_dense(result) assert np.array_equal(result_dense, np.eye(num_classes, dtype=np.float32)[indices])
def test_2d_non_sequence_sparse_one_hot(): x = C.input_variable((2, )) num_classes = 3 sparse_one_hot = C.one_hot(x, num_classes, sparse_output=True) indices = np.asarray([[2, 1], [0, 2], [1, 0]]) result = sparse_one_hot.eval({x: indices}, as_numpy=False) result_dense = _to_dense(result) assert np.array_equal(result_dense, np.eye(num_classes, dtype=np.float32)[indices])
def test_2d_sparse_sequences_value(device_id): dev = cntk_device(device_id) seq1_data = [[[0, 1, 1], [0, 1, 0]], [[1, 0, 0], [1, 0, 1]]] csr_seq1 = _to_csr(seq1_data) ndarrayview1 = C.NDArrayView.from_csr(csr_seq1, shape=(2, 2, 3), device=C.cpu()) seq2_data = [[0, 1, 1], [1, 1, 0]] csr_seq2 = _to_csr(seq2_data) ndarrayview2 = C.NDArrayView.from_csr(csr_seq2, shape=(1, 2, 3), device=C.cpu()) x = C.sequence.input_variable((2, 3)) sequence_value = C.Value.create(x, [ndarrayview1, ndarrayview2], device=dev) assert np.array_equal(_to_dense(sequence_value.data), [seq1_data, [seq2_data, [[0, 0, 0], [0, 0, 0]]]])
def test_ndarrayview_from_csr(device_id): dev = cntk_device(device_id) data = [[[0, 1, 1], [0, 1, 0]], [[1, 0, 0], [1, 0, 1]]] csr_data = _to_csr(data) ndarrayview = C.NDArrayView.from_csr(csr_data, shape=(2, 2, 3)) assert np.array_equal(_to_dense(ndarrayview), data) with pytest.raises(ValueError): ndarrayview = C.NDArrayView.from_csr(csr_data, shape=(3, 2, 3)) with pytest.raises(ValueError): ndarrayview = C.NDArrayView.from_csr(csr_data, shape=(2, 2, 4))
def test_2d_sequence_sparse_one_hot(): x = C.sequence.input((2, )) num_classes = 3 sparse_one_hot = C.one_hot(x, num_classes, sparse_output=True) indices = [np.asarray([[2, 1], [0, 2]]), np.asarray([[1, 0]])] result = sparse_one_hot.eval({x: indices}, as_numpy=False) result_dense = _to_dense(result, True) assert np.array_equal(result_dense[0], np.eye(num_classes, dtype=np.float32)[indices[0]]) assert np.array_equal(result_dense[1], np.eye(num_classes, dtype=np.float32)[indices[1]])