未验证 提交 13add823 编写于 作者: zhouweiwei2014's avatar zhouweiwei2014 提交者: GitHub

Unify sparse api in paddle.incubate (#43122)

上级 664758fa
...@@ -75,7 +75,6 @@ import paddle.onnx # noqa: F401 ...@@ -75,7 +75,6 @@ import paddle.onnx # noqa: F401
import paddle.reader # noqa: F401 import paddle.reader # noqa: F401
import paddle.static # noqa: F401 import paddle.static # noqa: F401
import paddle.vision # noqa: F401 import paddle.vision # noqa: F401
import paddle.sparse # noqa: F401
from .tensor.attribute import is_complex # noqa: F401 from .tensor.attribute import is_complex # noqa: F401
from .tensor.attribute import is_integer # noqa: F401 from .tensor.attribute import is_integer # noqa: F401
......
...@@ -902,7 +902,7 @@ def monkey_patch_varbase(): ...@@ -902,7 +902,7 @@ def monkey_patch_varbase():
indices = [[0, 0, 1, 2, 2], [1, 3, 2, 0, 1]] indices = [[0, 0, 1, 2, 2], [1, 3, 2, 0, 1]]
values = [1, 2, 3, 4, 5] values = [1, 2, 3, 4, 5]
dense_shape = [3, 4] dense_shape = [3, 4]
sparse_x = paddle.sparse.sparse_coo_tensor(paddle.to_tensor(indices, dtype='int32'), paddle.to_tensor(values, dtype='float32'), shape=dense_shape) sparse_x = paddle.incubate.sparse.sparse_coo_tensor(paddle.to_tensor(indices, dtype='int32'), paddle.to_tensor(values, dtype='float32'), shape=dense_shape)
print(sparse_x.values()) print(sparse_x.values())
#[1, 2, 3, 4, 5] #[1, 2, 3, 4, 5]
""" """
...@@ -932,7 +932,7 @@ def monkey_patch_varbase(): ...@@ -932,7 +932,7 @@ def monkey_patch_varbase():
indices = [[0, 0, 1, 2, 2], [1, 3, 2, 0, 1]] indices = [[0, 0, 1, 2, 2], [1, 3, 2, 0, 1]]
values = [1, 2, 3, 4, 5] values = [1, 2, 3, 4, 5]
dense_shape = [3, 4] dense_shape = [3, 4]
sparse_x = paddle.sparse.sparse_coo_tensor(paddle.to_tensor(indices, dtype='int64'), paddle.to_tensor(values, dtype='float32'), shape=dense_shape) sparse_x = paddle.incubate.sparse.sparse_coo_tensor(paddle.to_tensor(indices, dtype='int64'), paddle.to_tensor(values, dtype='float32'), shape=dense_shape)
dense_x = sparse_x.to_dense() dense_x = sparse_x.to_dense()
#[[0., 1., 0., 2.], #[[0., 1., 0., 2.],
# [0., 0., 3., 0.], # [0., 0., 3., 0.],
......
...@@ -41,7 +41,7 @@ class TestSparseConv(unittest.TestCase): ...@@ -41,7 +41,7 @@ class TestSparseConv(unittest.TestCase):
correct_out_values = [[5], [11]] correct_out_values = [[5], [11]]
sparse_input = core.eager.sparse_coo_tensor(indices, values, sparse_input = core.eager.sparse_coo_tensor(indices, values,
dense_shape, False) dense_shape, False)
out = paddle.sparse.functional.conv3d( out = paddle.incubate.sparse.nn.functional.conv3d(
sparse_input, sparse_input,
dense_kernel, dense_kernel,
bias=paddle.to_tensor( bias=paddle.to_tensor(
...@@ -61,10 +61,11 @@ class TestSparseConv(unittest.TestCase): ...@@ -61,10 +61,11 @@ class TestSparseConv(unittest.TestCase):
indices = paddle.to_tensor(indices, dtype='int32') indices = paddle.to_tensor(indices, dtype='int32')
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
dense_shape = [1, 1, 3, 4, 1] dense_shape = [1, 1, 3, 4, 1]
sparse_x = paddle.sparse.sparse_coo_tensor( sparse_x = paddle.incubate.sparse.sparse_coo_tensor(
indices, values, dense_shape, stop_gradient=True) indices, values, dense_shape, stop_gradient=True)
weight = paddle.randn((1, 3, 3, 1, 1), dtype='float32') weight = paddle.randn((1, 3, 3, 1, 1), dtype='float32')
y = paddle.sparse.functional.subm_conv3d(sparse_x, weight) y = paddle.incubate.sparse.nn.functional.subm_conv3d(sparse_x,
weight)
assert np.array_equal(sparse_x.indices().numpy(), assert np.array_equal(sparse_x.indices().numpy(),
y.indices().numpy()) y.indices().numpy())
...@@ -78,16 +79,16 @@ class TestSparseConv(unittest.TestCase): ...@@ -78,16 +79,16 @@ class TestSparseConv(unittest.TestCase):
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
dense_shape = [1, 1, 3, 4, 1] dense_shape = [1, 1, 3, 4, 1]
correct_out_values = [[4], [10]] correct_out_values = [[4], [10]]
sparse_input = paddle.sparse.sparse_coo_tensor(indices, values, sparse_input = paddle.incubate.sparse.sparse_coo_tensor(
dense_shape, False) indices, values, dense_shape, False)
sparse_conv3d = paddle.sparse.Conv3D( sparse_conv3d = paddle.incubate.sparse.nn.Conv3D(
1, 1, (1, 3, 3), data_format='NDHWC') 1, 1, (1, 3, 3), data_format='NDHWC')
sparse_out = sparse_conv3d(sparse_input) sparse_out = sparse_conv3d(sparse_input)
#test errors #test errors
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
#Currently, only support data_format='NDHWC' #Currently, only support data_format='NDHWC'
conv3d = paddle.sparse.SubmConv3D( conv3d = paddle.incubate.sparse.nn.SubmConv3D(
1, 1, (1, 3, 3), data_format='NCDHW') 1, 1, (1, 3, 3), data_format='NCDHW')
def test_SubmConv3D(self): def test_SubmConv3D(self):
...@@ -98,10 +99,10 @@ class TestSparseConv(unittest.TestCase): ...@@ -98,10 +99,10 @@ class TestSparseConv(unittest.TestCase):
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
dense_shape = [1, 1, 3, 4, 1] dense_shape = [1, 1, 3, 4, 1]
correct_out_values = [[4], [10]] correct_out_values = [[4], [10]]
sparse_input = paddle.sparse.sparse_coo_tensor(indices, values, sparse_input = paddle.incubate.sparse.sparse_coo_tensor(
dense_shape, False) indices, values, dense_shape, False)
subm_conv3d = paddle.sparse.SubmConv3D( subm_conv3d = paddle.incubate.sparse.nn.SubmConv3D(
1, 1, (1, 3, 3), data_format='NDHWC') 1, 1, (1, 3, 3), data_format='NDHWC')
# test extra_repr # test extra_repr
print(subm_conv3d.extra_repr()) print(subm_conv3d.extra_repr())
...@@ -113,5 +114,5 @@ class TestSparseConv(unittest.TestCase): ...@@ -113,5 +114,5 @@ class TestSparseConv(unittest.TestCase):
#test errors #test errors
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
#Currently, only support data_format='NDHWC' #Currently, only support data_format='NDHWC'
conv3d = paddle.sparse.SubmConv3D( conv3d = paddle.incubate.sparse.nn.SubmConv3D(
1, 1, (1, 3, 3), data_format='NCDHW') 1, 1, (1, 3, 3), data_format='NCDHW')
...@@ -38,7 +38,7 @@ class TestSparseBatchNorm(unittest.TestCase): ...@@ -38,7 +38,7 @@ class TestSparseBatchNorm(unittest.TestCase):
dense_x2 = copy.deepcopy(dense_x) dense_x2 = copy.deepcopy(dense_x)
dense_x2.stop_gradient = False dense_x2.stop_gradient = False
sparse_x = dense_x2.to_sparse_coo(sparse_dim) sparse_x = dense_x2.to_sparse_coo(sparse_dim)
sparse_batch_norm = paddle.sparse.BatchNorm(channels) sparse_batch_norm = paddle.incubate.sparse.nn.BatchNorm(channels)
# set same params # set same params
sparse_batch_norm._mean.set_value(batch_norm._mean) sparse_batch_norm._mean.set_value(batch_norm._mean)
sparse_batch_norm._variance.set_value(batch_norm._variance) sparse_batch_norm._variance.set_value(batch_norm._variance)
...@@ -66,7 +66,7 @@ class TestSparseBatchNorm(unittest.TestCase): ...@@ -66,7 +66,7 @@ class TestSparseBatchNorm(unittest.TestCase):
shape = [2, 3, 6, 6, 3] shape = [2, 3, 6, 6, 3]
x = paddle.randn(shape) x = paddle.randn(shape)
sparse_x = x.to_sparse_coo(4) sparse_x = x.to_sparse_coo(4)
sparse_batch_norm = paddle.sparse.BatchNorm( sparse_batch_norm = paddle.incubate.sparse.nn.BatchNorm(
3, data_format='NCDHW') 3, data_format='NCDHW')
sparse_batch_norm(sparse_x) sparse_batch_norm(sparse_x)
...@@ -77,7 +77,7 @@ class TestSparseBatchNorm(unittest.TestCase): ...@@ -77,7 +77,7 @@ class TestSparseBatchNorm(unittest.TestCase):
x_data = paddle.randn((1, 6, 6, 6, channels)).astype('float32') x_data = paddle.randn((1, 6, 6, 6, channels)).astype('float32')
dense_x = paddle.to_tensor(x_data) dense_x = paddle.to_tensor(x_data)
sparse_x = dense_x.to_sparse_coo(4) sparse_x = dense_x.to_sparse_coo(4)
batch_norm = paddle.sparse.BatchNorm(channels) batch_norm = paddle.incubate.sparse.nn.BatchNorm(channels)
batch_norm_out = batch_norm(sparse_x) batch_norm_out = batch_norm(sparse_x)
print(batch_norm_out.shape) print(batch_norm_out.shape)
# [1, 6, 6, 6, 3] # [1, 6, 6, 6, 3]
......
...@@ -47,7 +47,7 @@ class TestMaxPool3DFunc(unittest.TestCase): ...@@ -47,7 +47,7 @@ class TestMaxPool3DFunc(unittest.TestCase):
self.setUp() self.setUp()
self.dense_x.stop_gradient = False self.dense_x.stop_gradient = False
sparse_x = self.dense_x.to_sparse_coo(4) sparse_x = self.dense_x.to_sparse_coo(4)
sparse_out = paddle.sparse.functional.max_pool3d( sparse_out = paddle.incubate.sparse.nn.functional.max_pool3d(
sparse_x, sparse_x,
self.kernel_sizes, self.kernel_sizes,
stride=self.strides, stride=self.strides,
...@@ -104,7 +104,7 @@ class TestMaxPool3DAPI(unittest.TestCase): ...@@ -104,7 +104,7 @@ class TestMaxPool3DAPI(unittest.TestCase):
with _test_eager_guard(): with _test_eager_guard():
dense_x = paddle.randn((2, 3, 6, 6, 3)) dense_x = paddle.randn((2, 3, 6, 6, 3))
sparse_x = dense_x.to_sparse_coo(4) sparse_x = dense_x.to_sparse_coo(4)
max_pool3d = paddle.sparse.MaxPool3D( max_pool3d = paddle.incubate.sparse.nn.MaxPool3D(
kernel_size=3, data_format='NDHWC') kernel_size=3, data_format='NDHWC')
out = max_pool3d(sparse_x) out = max_pool3d(sparse_x)
out = out.to_dense() out = out.to_dense()
......
...@@ -67,15 +67,15 @@ class TestSparseUnary(unittest.TestCase): ...@@ -67,15 +67,15 @@ class TestSparseUnary(unittest.TestCase):
x, x,
lambda x: x.to_sparse_coo(sparse_dim), lambda x: x.to_sparse_coo(sparse_dim),
paddle.nn.ReLU(), paddle.nn.ReLU(),
paddle.sparse.ReLU(), paddle.incubate.sparse.nn.ReLU(),
True, ) True, )
self.compare_with_dense( self.compare_with_dense(
x, x,
lambda x: x.to_sparse_csr(), lambda x: x.to_sparse_csr(),
paddle.nn.ReLU(), paddle.nn.ReLU(),
paddle.sparse.ReLU(), paddle.incubate.sparse.nn.ReLU(),
False, ) False, )
self.assert_raises_on_dense_tensor(paddle.sparse.ReLU()) self.assert_raises_on_dense_tensor(paddle.incubate.sparse.nn.ReLU())
def test_sparse_sqrt(self): def test_sparse_sqrt(self):
x = [[0, 16, 0, 0], [0, 0, 0, 0], [0, 4, 2, 0]] x = [[0, 16, 0, 0], [0, 0, 0, 0], [0, 4, 2, 0]]
...@@ -84,15 +84,15 @@ class TestSparseUnary(unittest.TestCase): ...@@ -84,15 +84,15 @@ class TestSparseUnary(unittest.TestCase):
x, x,
lambda x: x.to_sparse_coo(sparse_dim), lambda x: x.to_sparse_coo(sparse_dim),
paddle.sqrt, paddle.sqrt,
paddle.sparse.sqrt, paddle.incubate.sparse.sqrt,
True, ) True, )
self.compare_with_dense( self.compare_with_dense(
x, x,
lambda x: x.to_sparse_csr(), lambda x: x.to_sparse_csr(),
paddle.sqrt, paddle.sqrt,
paddle.sparse.sqrt, paddle.incubate.sparse.sqrt,
False, ) False, )
self.assert_raises_on_dense_tensor(paddle.sparse.sqrt) self.assert_raises_on_dense_tensor(paddle.incubate.sparse.sqrt)
def test_sparse_sin(self): def test_sparse_sin(self):
x = [[0, 16, 0, 0], [0, 0, 0, 0], [0, 4, 2, 0]] x = [[0, 16, 0, 0], [0, 0, 0, 0], [0, 4, 2, 0]]
...@@ -101,15 +101,15 @@ class TestSparseUnary(unittest.TestCase): ...@@ -101,15 +101,15 @@ class TestSparseUnary(unittest.TestCase):
x, x,
lambda x: x.to_sparse_coo(sparse_dim), lambda x: x.to_sparse_coo(sparse_dim),
paddle.sin, paddle.sin,
paddle.sparse.sin, paddle.incubate.sparse.sin,
True, ) True, )
self.compare_with_dense( self.compare_with_dense(
x, x,
lambda x: x.to_sparse_csr(), lambda x: x.to_sparse_csr(),
paddle.sin, paddle.sin,
paddle.sparse.sin, paddle.incubate.sparse.sin,
False, ) False, )
self.assert_raises_on_dense_tensor(paddle.sparse.sin) self.assert_raises_on_dense_tensor(paddle.incubate.sparse.sin)
def test_sparse_tanh(self): def test_sparse_tanh(self):
x = [[0, 16, 0, 0], [0, 0, 0, 0], [0, -4, 2, 0]] x = [[0, 16, 0, 0], [0, 0, 0, 0], [0, -4, 2, 0]]
...@@ -118,15 +118,15 @@ class TestSparseUnary(unittest.TestCase): ...@@ -118,15 +118,15 @@ class TestSparseUnary(unittest.TestCase):
x, x,
lambda x: x.to_sparse_coo(sparse_dim), lambda x: x.to_sparse_coo(sparse_dim),
paddle.tanh, paddle.tanh,
paddle.sparse.tanh, paddle.incubate.sparse.tanh,
True, ) True, )
self.compare_with_dense( self.compare_with_dense(
x, x,
lambda x: x.to_sparse_csr(), lambda x: x.to_sparse_csr(),
paddle.tanh, paddle.tanh,
paddle.sparse.tanh, paddle.incubate.sparse.tanh,
False, ) False, )
self.assert_raises_on_dense_tensor(paddle.sparse.tanh) self.assert_raises_on_dense_tensor(paddle.incubate.sparse.tanh)
if __name__ == "__main__": if __name__ == "__main__":
......
...@@ -30,7 +30,7 @@ class TestSparseCreate(unittest.TestCase): ...@@ -30,7 +30,7 @@ class TestSparseCreate(unittest.TestCase):
dense_shape = [3, 4] dense_shape = [3, 4]
dense_indices = paddle.to_tensor(indices) dense_indices = paddle.to_tensor(indices)
dense_elements = paddle.to_tensor(values, dtype='float32') dense_elements = paddle.to_tensor(values, dtype='float32')
coo = paddle.sparse.sparse_coo_tensor( coo = paddle.incubate.sparse.sparse_coo_tensor(
dense_indices, dense_elements, dense_shape, stop_gradient=False) dense_indices, dense_elements, dense_shape, stop_gradient=False)
# test the to_string.py # test the to_string.py
print(coo) print(coo)
...@@ -42,7 +42,8 @@ class TestSparseCreate(unittest.TestCase): ...@@ -42,7 +42,8 @@ class TestSparseCreate(unittest.TestCase):
indices = [[0, 1, 2], [1, 2, 0]] indices = [[0, 1, 2], [1, 2, 0]]
values = [1.0, 2.0, 3.0] values = [1.0, 2.0, 3.0]
dense_shape = [3, 3] dense_shape = [3, 3]
coo = paddle.sparse.sparse_coo_tensor(indices, values, dense_shape) coo = paddle.incubate.sparse.sparse_coo_tensor(indices, values,
dense_shape)
assert np.array_equal(indices, coo.indices().numpy()) assert np.array_equal(indices, coo.indices().numpy())
assert np.array_equal(values, coo.values().numpy()) assert np.array_equal(values, coo.values().numpy())
...@@ -56,7 +57,7 @@ class TestSparseCreate(unittest.TestCase): ...@@ -56,7 +57,7 @@ class TestSparseCreate(unittest.TestCase):
dense_cols = paddle.to_tensor(cols) dense_cols = paddle.to_tensor(cols)
dense_elements = paddle.to_tensor(values, dtype='float32') dense_elements = paddle.to_tensor(values, dtype='float32')
stop_gradient = False stop_gradient = False
csr = paddle.sparse.sparse_csr_tensor( csr = paddle.incubate.sparse.sparse_csr_tensor(
dense_crows, dense_crows,
dense_cols, dense_cols,
dense_elements, dense_elements,
...@@ -69,8 +70,8 @@ class TestSparseCreate(unittest.TestCase): ...@@ -69,8 +70,8 @@ class TestSparseCreate(unittest.TestCase):
cols = [1, 3, 2, 0, 1] cols = [1, 3, 2, 0, 1]
values = [1, 2, 3, 4, 5] values = [1, 2, 3, 4, 5]
dense_shape = [3, 4] dense_shape = [3, 4]
csr = paddle.sparse.sparse_csr_tensor(crows, cols, values, csr = paddle.incubate.sparse.sparse_csr_tensor(crows, cols, values,
dense_shape) dense_shape)
# test the to_string.py # test the to_string.py
print(csr) print(csr)
assert np.array_equal(crows, csr.crows().numpy()) assert np.array_equal(crows, csr.crows().numpy())
...@@ -83,7 +84,7 @@ class TestSparseCreate(unittest.TestCase): ...@@ -83,7 +84,7 @@ class TestSparseCreate(unittest.TestCase):
indices = [[0, 1], [0, 1]] indices = [[0, 1], [0, 1]]
values = [1.0, 2.0] values = [1.0, 2.0]
dense_shape = [2, 2] dense_shape = [2, 2]
coo = paddle.sparse.sparse_coo_tensor( coo = paddle.incubate.sparse.sparse_coo_tensor(
indices, values, dense_shape, place=place) indices, values, dense_shape, place=place)
assert coo.place.is_cpu_place() assert coo.place.is_cpu_place()
assert coo.values().place.is_cpu_place() assert coo.values().place.is_cpu_place()
...@@ -92,7 +93,7 @@ class TestSparseCreate(unittest.TestCase): ...@@ -92,7 +93,7 @@ class TestSparseCreate(unittest.TestCase):
crows = [0, 2, 3, 5] crows = [0, 2, 3, 5]
cols = [1, 3, 2, 0, 1] cols = [1, 3, 2, 0, 1]
values = [1.0, 2.0, 3.0, 4.0, 5.0] values = [1.0, 2.0, 3.0, 4.0, 5.0]
csr = paddle.sparse.sparse_csr_tensor( csr = paddle.incubate.sparse.sparse_csr_tensor(
crows, cols, values, [3, 5], place=place) crows, cols, values, [3, 5], place=place)
assert csr.place.is_cpu_place() assert csr.place.is_cpu_place()
assert csr.crows().place.is_cpu_place() assert csr.crows().place.is_cpu_place()
...@@ -106,14 +107,14 @@ class TestSparseCreate(unittest.TestCase): ...@@ -106,14 +107,14 @@ class TestSparseCreate(unittest.TestCase):
dense_shape = [2, 2] dense_shape = [2, 2]
indices = paddle.to_tensor(indices, dtype='int32') indices = paddle.to_tensor(indices, dtype='int32')
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
coo = paddle.sparse.sparse_coo_tensor( coo = paddle.incubate.sparse.sparse_coo_tensor(
indices, values, dense_shape, dtype='float64') indices, values, dense_shape, dtype='float64')
assert coo.dtype == paddle.float64 assert coo.dtype == paddle.float64
crows = [0, 2, 3, 5] crows = [0, 2, 3, 5]
cols = [1, 3, 2, 0, 1] cols = [1, 3, 2, 0, 1]
values = [1.0, 2.0, 3.0, 4.0, 5.0] values = [1.0, 2.0, 3.0, 4.0, 5.0]
csr = paddle.sparse.sparse_csr_tensor( csr = paddle.incubate.sparse.sparse_csr_tensor(
crows, cols, values, [3, 5], dtype='float16') crows, cols, values, [3, 5], dtype='float16')
assert csr.dtype == paddle.float16 assert csr.dtype == paddle.float16
...@@ -123,7 +124,7 @@ class TestSparseCreate(unittest.TestCase): ...@@ -123,7 +124,7 @@ class TestSparseCreate(unittest.TestCase):
values = [1.0, 2.0] values = [1.0, 2.0]
indices = paddle.to_tensor(indices, dtype='int32') indices = paddle.to_tensor(indices, dtype='int32')
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
coo = paddle.sparse.sparse_coo_tensor(indices, values) coo = paddle.incubate.sparse.sparse_coo_tensor(indices, values)
assert [2, 2] == coo.shape assert [2, 2] == coo.shape
...@@ -140,7 +141,7 @@ class TestSparseConvert(unittest.TestCase): ...@@ -140,7 +141,7 @@ class TestSparseConvert(unittest.TestCase):
#test to_sparse_coo_grad backward #test to_sparse_coo_grad backward
out_grad_indices = [[0, 1], [0, 1]] out_grad_indices = [[0, 1], [0, 1]]
out_grad_values = [2.0, 3.0] out_grad_values = [2.0, 3.0]
out_grad = paddle.sparse.sparse_coo_tensor( out_grad = paddle.incubate.sparse.sparse_coo_tensor(
paddle.to_tensor(out_grad_indices), paddle.to_tensor(out_grad_indices),
paddle.to_tensor(out_grad_values), paddle.to_tensor(out_grad_values),
shape=out.shape, shape=out.shape,
...@@ -153,7 +154,7 @@ class TestSparseConvert(unittest.TestCase): ...@@ -153,7 +154,7 @@ class TestSparseConvert(unittest.TestCase):
with _test_eager_guard(): with _test_eager_guard():
indices = [[0, 0, 1, 2, 2], [1, 3, 2, 0, 1]] indices = [[0, 0, 1, 2, 2], [1, 3, 2, 0, 1]]
values = [1.0, 2.0, 3.0, 4.0, 5.0] values = [1.0, 2.0, 3.0, 4.0, 5.0]
sparse_x = paddle.sparse.sparse_coo_tensor( sparse_x = paddle.incubate.sparse.sparse_coo_tensor(
paddle.to_tensor(indices), paddle.to_tensor(indices),
paddle.to_tensor(values), paddle.to_tensor(values),
shape=[3, 4], shape=[3, 4],
...@@ -169,7 +170,7 @@ class TestSparseConvert(unittest.TestCase): ...@@ -169,7 +170,7 @@ class TestSparseConvert(unittest.TestCase):
sparse_x.grad.values().numpy()) sparse_x.grad.values().numpy())
paddle.device.set_device("cpu") paddle.device.set_device("cpu")
sparse_x_cpu = paddle.sparse.sparse_coo_tensor( sparse_x_cpu = paddle.incubate.sparse.sparse_coo_tensor(
paddle.to_tensor(indices), paddle.to_tensor(indices),
paddle.to_tensor(values), paddle.to_tensor(values),
shape=[3, 4], shape=[3, 4],
...@@ -198,7 +199,7 @@ class TestSparseConvert(unittest.TestCase): ...@@ -198,7 +199,7 @@ class TestSparseConvert(unittest.TestCase):
with _test_eager_guard(): with _test_eager_guard():
indices = [[0, 0, 1, 2, 2], [1, 3, 2, 0, 1]] indices = [[0, 0, 1, 2, 2], [1, 3, 2, 0, 1]]
values = [1.0, 2.0, 3.0, 4.0, 5.0] values = [1.0, 2.0, 3.0, 4.0, 5.0]
sparse_x = paddle.sparse.sparse_coo_tensor( sparse_x = paddle.incubate.sparse.sparse_coo_tensor(
paddle.to_tensor(indices), paddle.to_tensor(indices),
paddle.to_tensor(values), paddle.to_tensor(values),
shape=[3, 4], shape=[3, 4],
...@@ -211,7 +212,7 @@ class TestSparseConvert(unittest.TestCase): ...@@ -211,7 +212,7 @@ class TestSparseConvert(unittest.TestCase):
indices = [[0, 0, 1, 2, 2], [1, 3, 2, 0, 1]] indices = [[0, 0, 1, 2, 2], [1, 3, 2, 0, 1]]
values = [[1.0, 1.0], [2.0, 2.0], [3.0, 3.0], [4.0, 4.0], values = [[1.0, 1.0], [2.0, 2.0], [3.0, 3.0], [4.0, 4.0],
[5.0, 5.0]] [5.0, 5.0]]
sparse_x = paddle.sparse.sparse_coo_tensor( sparse_x = paddle.incubate.sparse.sparse_coo_tensor(
paddle.to_tensor(indices), paddle.to_tensor(indices),
paddle.to_tensor(values), paddle.to_tensor(values),
shape=[3, 4, 2], shape=[3, 4, 2],
...@@ -234,13 +235,13 @@ class TestSparseConvert(unittest.TestCase): ...@@ -234,13 +235,13 @@ class TestSparseConvert(unittest.TestCase):
indices = paddle.to_tensor(indices, dtype='int32') indices = paddle.to_tensor(indices, dtype='int32')
values = paddle.to_tensor( values = paddle.to_tensor(
values, dtype='float32', stop_gradient=False) values, dtype='float32', stop_gradient=False)
sparse_x = paddle.sparse.sparse_coo_tensor( sparse_x = paddle.incubate.sparse.sparse_coo_tensor(
indices, values, shape=[2, 2], stop_gradient=False) indices, values, shape=[2, 2], stop_gradient=False)
grad_indices = [[0, 1], [1, 1]] grad_indices = [[0, 1], [1, 1]]
grad_values = [2, 3] grad_values = [2, 3]
grad_indices = paddle.to_tensor(grad_indices, dtype='int32') grad_indices = paddle.to_tensor(grad_indices, dtype='int32')
grad_values = paddle.to_tensor(grad_values, dtype='float32') grad_values = paddle.to_tensor(grad_values, dtype='float32')
sparse_out_grad = paddle.sparse.sparse_coo_tensor( sparse_out_grad = paddle.incubate.sparse.sparse_coo_tensor(
grad_indices, grad_values, shape=[2, 2]) grad_indices, grad_values, shape=[2, 2])
sparse_x.backward(sparse_out_grad) sparse_x.backward(sparse_out_grad)
correct_values_grad = [0, 3] correct_values_grad = [0, 3]
...@@ -251,11 +252,11 @@ class TestSparseConvert(unittest.TestCase): ...@@ -251,11 +252,11 @@ class TestSparseConvert(unittest.TestCase):
values = [[1, 1], [2, 2]] values = [[1, 1], [2, 2]]
values = paddle.to_tensor( values = paddle.to_tensor(
values, dtype='float32', stop_gradient=False) values, dtype='float32', stop_gradient=False)
sparse_x = paddle.sparse.sparse_coo_tensor( sparse_x = paddle.incubate.sparse.sparse_coo_tensor(
indices, values, shape=[2, 2, 2], stop_gradient=False) indices, values, shape=[2, 2, 2], stop_gradient=False)
grad_values = [[2, 2], [3, 3]] grad_values = [[2, 2], [3, 3]]
grad_values = paddle.to_tensor(grad_values, dtype='float32') grad_values = paddle.to_tensor(grad_values, dtype='float32')
sparse_out_grad = paddle.sparse.sparse_coo_tensor( sparse_out_grad = paddle.incubate.sparse.sparse_coo_tensor(
grad_indices, grad_values, shape=[2, 2, 2]) grad_indices, grad_values, shape=[2, 2, 2])
sparse_x.backward(sparse_out_grad) sparse_x.backward(sparse_out_grad)
correct_values_grad = [[0, 0], [3, 3]] correct_values_grad = [[0, 0], [3, 3]]
...@@ -273,7 +274,8 @@ class TestSparseConvert(unittest.TestCase): ...@@ -273,7 +274,8 @@ class TestSparseConvert(unittest.TestCase):
values = [1.0, 2.0, 3.0] values = [1.0, 2.0, 3.0]
indices = paddle.to_tensor(indices, dtype='int32') indices = paddle.to_tensor(indices, dtype='int32')
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
sparse_x = paddle.sparse.sparse_coo_tensor(indices, values) sparse_x = paddle.incubate.sparse.sparse_coo_tensor(indices,
values)
indices_sorted = [[0, 1], [1, 0]] indices_sorted = [[0, 1], [1, 0]]
values_sorted = [5.0, 1.0] values_sorted = [5.0, 1.0]
assert np.array_equal(indices_sorted, assert np.array_equal(indices_sorted,
...@@ -284,7 +286,8 @@ class TestSparseConvert(unittest.TestCase): ...@@ -284,7 +286,8 @@ class TestSparseConvert(unittest.TestCase):
# test the non-zero values is a vector # test the non-zero values is a vector
values = [[1.0, 1.0], [2.0, 2.0], [3.0, 3.0]] values = [[1.0, 1.0], [2.0, 2.0], [3.0, 3.0]]
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
sparse_x = paddle.sparse.sparse_coo_tensor(indices, values) sparse_x = paddle.incubate.sparse.sparse_coo_tensor(indices,
values)
values_sorted = [[5.0, 5.0], [1.0, 1.0]] values_sorted = [[5.0, 5.0], [1.0, 1.0]]
assert np.array_equal(indices_sorted, assert np.array_equal(indices_sorted,
sparse_x.indices().numpy()) sparse_x.indices().numpy())
...@@ -300,7 +303,7 @@ class TestCooError(unittest.TestCase): ...@@ -300,7 +303,7 @@ class TestCooError(unittest.TestCase):
values = [1, 2] values = [1, 2]
# 1. the shape too small # 1. the shape too small
dense_shape = [2, 2] dense_shape = [2, 2]
sparse_x = paddle.sparse.sparse_coo_tensor( sparse_x = paddle.incubate.sparse.sparse_coo_tensor(
indices, values, shape=dense_shape) indices, values, shape=dense_shape)
def test_same_nnz(self): def test_same_nnz(self):
...@@ -309,7 +312,8 @@ class TestCooError(unittest.TestCase): ...@@ -309,7 +312,8 @@ class TestCooError(unittest.TestCase):
# 2. test the nnz of indices must same as nnz of values # 2. test the nnz of indices must same as nnz of values
indices = [[1, 2], [1, 0]] indices = [[1, 2], [1, 0]]
values = [1, 2, 3] values = [1, 2, 3]
sparse_x = paddle.sparse.sparse_coo_tensor(indices, values) sparse_x = paddle.incubate.sparse.sparse_coo_tensor(indices,
values)
def test_same_dimensions(self): def test_same_dimensions(self):
with _test_eager_guard(): with _test_eager_guard():
...@@ -317,7 +321,7 @@ class TestCooError(unittest.TestCase): ...@@ -317,7 +321,7 @@ class TestCooError(unittest.TestCase):
indices = [[1, 2], [1, 0]] indices = [[1, 2], [1, 0]]
values = [1, 2, 3] values = [1, 2, 3]
shape = [2, 3, 4] shape = [2, 3, 4]
sparse_x = paddle.sparse.sparse_coo_tensor( sparse_x = paddle.incubate.sparse.sparse_coo_tensor(
indices, values, shape=shape) indices, values, shape=shape)
def test_indices_dtype(self): def test_indices_dtype(self):
...@@ -325,7 +329,8 @@ class TestCooError(unittest.TestCase): ...@@ -325,7 +329,8 @@ class TestCooError(unittest.TestCase):
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
indices = [[1.0, 2.0], [0, 1]] indices = [[1.0, 2.0], [0, 1]]
values = [1, 2] values = [1, 2]
sparse_x = paddle.sparse.sparse_coo_tensor(indices, values) sparse_x = paddle.incubate.sparse.sparse_coo_tensor(indices,
values)
class TestCsrError(unittest.TestCase): class TestCsrError(unittest.TestCase):
...@@ -336,8 +341,8 @@ class TestCsrError(unittest.TestCase): ...@@ -336,8 +341,8 @@ class TestCsrError(unittest.TestCase):
cols = [0, 1, 2] cols = [0, 1, 2]
values = [1, 2, 3] values = [1, 2, 3]
shape = [3] shape = [3]
sparse_x = paddle.sparse.sparse_csr_tensor(crows, cols, values, sparse_x = paddle.incubate.sparse.sparse_csr_tensor(
shape) crows, cols, values, shape)
def test_dimension2(self): def test_dimension2(self):
with _test_eager_guard(): with _test_eager_guard():
...@@ -346,8 +351,8 @@ class TestCsrError(unittest.TestCase): ...@@ -346,8 +351,8 @@ class TestCsrError(unittest.TestCase):
cols = [0, 1, 2] cols = [0, 1, 2]
values = [1, 2, 3] values = [1, 2, 3]
shape = [3, 3, 3, 3] shape = [3, 3, 3, 3]
sparse_x = paddle.sparse.sparse_csr_tensor(crows, cols, values, sparse_x = paddle.incubate.sparse.sparse_csr_tensor(
shape) crows, cols, values, shape)
def test_same_shape1(self): def test_same_shape1(self):
with _test_eager_guard(): with _test_eager_guard():
...@@ -356,8 +361,8 @@ class TestCsrError(unittest.TestCase): ...@@ -356,8 +361,8 @@ class TestCsrError(unittest.TestCase):
cols = [0, 1, 2, 3] cols = [0, 1, 2, 3]
values = [1, 2, 3] values = [1, 2, 3]
shape = [3, 4] shape = [3, 4]
sparse_x = paddle.sparse.sparse_csr_tensor(crows, cols, values, sparse_x = paddle.incubate.sparse.sparse_csr_tensor(
shape) crows, cols, values, shape)
def test_same_shape2(self): def test_same_shape2(self):
with _test_eager_guard(): with _test_eager_guard():
...@@ -366,8 +371,8 @@ class TestCsrError(unittest.TestCase): ...@@ -366,8 +371,8 @@ class TestCsrError(unittest.TestCase):
cols = [0, 1, 2, 3] cols = [0, 1, 2, 3]
values = [1, 2, 3, 4] values = [1, 2, 3, 4]
shape = [3, 4] shape = [3, 4]
sparse_x = paddle.sparse.sparse_csr_tensor(crows, cols, values, sparse_x = paddle.incubate.sparse.sparse_csr_tensor(
shape) crows, cols, values, shape)
def test_same_shape3(self): def test_same_shape3(self):
with _test_eager_guard(): with _test_eager_guard():
...@@ -376,8 +381,8 @@ class TestCsrError(unittest.TestCase): ...@@ -376,8 +381,8 @@ class TestCsrError(unittest.TestCase):
cols = [0, 1, 2, 3, 0, 1, 2] cols = [0, 1, 2, 3, 0, 1, 2]
values = [1, 2, 3, 4, 0, 1, 2] values = [1, 2, 3, 4, 0, 1, 2]
shape = [2, 3, 4] shape = [2, 3, 4]
sparse_x = paddle.sparse.sparse_csr_tensor(crows, cols, values, sparse_x = paddle.incubate.sparse.sparse_csr_tensor(
shape) crows, cols, values, shape)
def test_crows_first_value(self): def test_crows_first_value(self):
with _test_eager_guard(): with _test_eager_guard():
...@@ -386,8 +391,8 @@ class TestCsrError(unittest.TestCase): ...@@ -386,8 +391,8 @@ class TestCsrError(unittest.TestCase):
cols = [0, 1, 2] cols = [0, 1, 2]
values = [1, 2, 3] values = [1, 2, 3]
shape = [3, 4] shape = [3, 4]
sparse_x = paddle.sparse.sparse_csr_tensor(crows, cols, values, sparse_x = paddle.incubate.sparse.sparse_csr_tensor(
shape) crows, cols, values, shape)
def test_dtype(self): def test_dtype(self):
with _test_eager_guard(): with _test_eager_guard():
...@@ -396,8 +401,8 @@ class TestCsrError(unittest.TestCase): ...@@ -396,8 +401,8 @@ class TestCsrError(unittest.TestCase):
cols = [0, 1, 2] cols = [0, 1, 2]
values = [1, 2, 3] values = [1, 2, 3]
shape = [3] shape = [3]
sparse_x = paddle.sparse.sparse_csr_tensor(crows, cols, values, sparse_x = paddle.incubate.sparse.sparse_csr_tensor(
shape) crows, cols, values, shape)
if __name__ == "__main__": if __name__ == "__main__":
......
...@@ -30,6 +30,7 @@ from .tensor import segment_min ...@@ -30,6 +30,7 @@ from .tensor import segment_min
from .passes import fuse_resnet_unit_pass from .passes import fuse_resnet_unit_pass
import paddle.incubate.autograd import paddle.incubate.autograd
import paddle.incubate.autotune import paddle.incubate.autotune
import paddle.incubate.sparse
from . import nn #noqa: F401 from . import nn #noqa: F401
from . import asp #noqa: F401 from . import asp #noqa: F401
......
...@@ -12,10 +12,19 @@ ...@@ -12,10 +12,19 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from .unary import ReLU from .creation import sparse_coo_tensor
from .norm import BatchNorm from .creation import sparse_csr_tensor
from .conv import Conv3D
from .conv import SubmConv3D
from .pooling import MaxPool3D
__all__ = [] from .unary import sqrt
from .unary import sin
from .unary import tanh
from . import nn
__all__ = [
'sparse_coo_tensor',
'sparse_csr_tensor',
'sqrt',
'sin',
'tanh',
]
...@@ -14,11 +14,10 @@ ...@@ -14,11 +14,10 @@
import paddle import paddle
from paddle import _C_ops from paddle import _C_ops
from ..framework import core, dygraph_only from paddle.fluid.framework import core, dygraph_only
from ..framework import _current_expected_place, _get_paddle_place from paddle.fluid.framework import _current_expected_place, _get_paddle_place
from ..tensor import to_tensor from paddle.tensor import to_tensor, max
from ..tensor import max from paddle.fluid.data_feeder import check_variable_and_dtype, check_type, check_dtype, convert_dtype
from ..fluid.data_feeder import check_variable_and_dtype, check_type, check_dtype, convert_dtype
import numpy as np import numpy as np
...@@ -112,7 +111,7 @@ def sparse_coo_tensor(indices, ...@@ -112,7 +111,7 @@ def sparse_coo_tensor(indices,
indices = [[0, 1, 2], [1, 2, 0]] indices = [[0, 1, 2], [1, 2, 0]]
values = [1.0, 2.0, 3.0] values = [1.0, 2.0, 3.0]
dense_shape = [3, 3] dense_shape = [3, 3]
coo = paddle.sparse.sparse_coo_tensor(indices, values, dense_shape) coo = paddle.incubate.sparse.sparse_coo_tensor(indices, values, dense_shape)
# print(coo) # print(coo)
# Tensor(shape=[2, 3], dtype=paddle.float32, place=Place(gpu:0), stop_gradient=True, # Tensor(shape=[2, 3], dtype=paddle.float32, place=Place(gpu:0), stop_gradient=True,
# indices=[[0, 1, 2], # indices=[[0, 1, 2],
...@@ -222,7 +221,7 @@ def sparse_csr_tensor(crows, ...@@ -222,7 +221,7 @@ def sparse_csr_tensor(crows,
cols = [1, 3, 2, 0, 1] cols = [1, 3, 2, 0, 1]
values = [1, 2, 3, 4, 5] values = [1, 2, 3, 4, 5]
dense_shape = [3, 4] dense_shape = [3, 4]
csr = paddle.sparse.sparse_csr_tensor(crows, cols, values, dense_shape) csr = paddle.incubate.sparse.sparse_csr_tensor(crows, cols, values, dense_shape)
# print(csr) # print(csr)
# Tensor(shape=[3, 4], dtype=paddle.int64, place=Place(gpu:0), stop_gradient=True, # Tensor(shape=[3, 4], dtype=paddle.int64, place=Place(gpu:0), stop_gradient=True,
# crows=[0, 2, 3, 5], # crows=[0, 2, 3, 5],
......
...@@ -12,21 +12,18 @@ ...@@ -12,21 +12,18 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from .creation import sparse_coo_tensor from . import functional
from .creation import sparse_csr_tensor
from .layer import ReLU
from .layer import BatchNorm
from .layer import Conv3D from .layer.activation import ReLU
from .layer import SubmConv3D from .layer.norm import BatchNorm
from .layer.conv import Conv3D
from .layer import MaxPool3D from .layer.conv import SubmConv3D
from .layer.pooling import MaxPool3D
from .functional import sqrt
from .functional import sin
from .functional import tanh
__all__ = [ __all__ = [
'sparse_coo_tensor', 'sparse_csr_tensor', 'ReLU', 'Conv3D', 'SubmConv3D', 'ReLU',
'BatchNorm', 'MaxPool3D', 'sqrt', 'sin', 'tanh' 'BatchNorm',
'Conv3D',
'SubmConv3D',
'MaxPool3D',
] ]
...@@ -12,12 +12,14 @@ ...@@ -12,12 +12,14 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from .unary import relu # noqa: F401
from .unary import tanh # noqa: F401
from .unary import sqrt # noqa: F401
from .unary import sin # noqa: F401
from .conv import conv3d # noqa: F401 from .conv import conv3d # noqa: F401
from .conv import subm_conv3d # noqa: F401 from .conv import subm_conv3d # noqa: F401
from .pooling import max_pool3d # noqa: F401 from .pooling import max_pool3d # noqa: F401
from .activation import relu # noqa: F401
__all__ = ['relu', 'tanh', 'conv3d', 'subm_conv3d', 'max_pool3d', 'sqrt', 'sin'] __all__ = [
'conv3d',
'subm_conv3d',
'max_pool3d',
'relu',
]
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
__all__ = []
from paddle import _C_ops, in_dynamic_mode
def relu(x, name=None):
"""
sparse relu activation, requiring x to be a sparse coo or sparse csr tensor.
.. math::
out = max(x, 0)
Parameters:
x (Tensor): The input Sparse Tensor with data type float32, float64.
name (str, optional): Name for the operation (optional, default is None).
For more information, please refer to :ref:`api_guide_Name`.
Returns:
A Sparse Tensor with the same data type and shape as ``x`` .
Examples:
.. code-block:: python
import paddle
from paddle.fluid.framework import _test_eager_guard
with _test_eager_guard():
dense_x = paddle.to_tensor([-2, 0, 1], dtype='float32')
sparse_x = dense_x.to_sparse_coo(1)
out = paddle.incubate.sparse.nn.functional.relu(sparse_x)
"""
assert in_dynamic_mode(), "Currently, Sparse API only support dynamic mode"
if x.is_sparse_coo() or x.is_sparse_csr():
return _C_ops.final_state_sparse_relu(x)
else:
raise ValueError(
"Currently, sparse.relu only support the input of SparseCooTensor or SparseCsrTensor"
)
...@@ -15,9 +15,9 @@ ...@@ -15,9 +15,9 @@
__all__ = [] __all__ = []
from paddle import _C_ops, in_dynamic_mode from paddle import _C_ops, in_dynamic_mode
from ...fluid.layers.utils import convert_to_list from paddle.fluid.layers.utils import convert_to_list
from ...fluid.layers.nn import elementwise_add from paddle.fluid.layers.nn import elementwise_add
from .. import sparse_coo_tensor from ...creation import sparse_coo_tensor
from paddle.nn.functional.conv import _update_padding_nd from paddle.nn.functional.conv import _update_padding_nd
...@@ -180,9 +180,9 @@ def conv3d(x, ...@@ -180,9 +180,9 @@ def conv3d(x,
indices = paddle.to_tensor(indices, dtype='int32') indices = paddle.to_tensor(indices, dtype='int32')
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
dense_shape = [1, 1, 3, 4, 1] dense_shape = [1, 1, 3, 4, 1]
sparse_x = paddle.sparse.sparse_coo_tensor(indices, values, dense_shape, stop_gradient=True) sparse_x = paddle.incubate.sparse.sparse_coo_tensor(indices, values, dense_shape, stop_gradient=True)
weight = paddle.randn((1, 3, 3, 1, 1), dtype='float32') weight = paddle.randn((1, 3, 3, 1, 1), dtype='float32')
y = paddle.sparse.functional.conv3d(sparse_x, weight) y = paddle.incubate.sparse.nn.functional.conv3d(sparse_x, weight)
print(y.shape) print(y.shape)
# (1, 1, 1, 2, 1) # (1, 1, 1, 2, 1)
""" """
...@@ -295,9 +295,9 @@ def subm_conv3d(x, ...@@ -295,9 +295,9 @@ def subm_conv3d(x,
indices = paddle.to_tensor(indices, dtype='int32') indices = paddle.to_tensor(indices, dtype='int32')
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
dense_shape = [1, 1, 3, 4, 1] dense_shape = [1, 1, 3, 4, 1]
sparse_x = paddle.sparse.sparse_coo_tensor(indices, values, dense_shape, stop_gradient=True) sparse_x = paddle.incubate.sparse.sparse_coo_tensor(indices, values, dense_shape, stop_gradient=True)
weight = paddle.randn((1, 3, 3, 1, 1), dtype='float32') weight = paddle.randn((1, 3, 3, 1, 1), dtype='float32')
y = paddle.sparse.functional.subm_conv3d(sparse_x, weight) y = paddle.incubate.sparse.nn.functional.subm_conv3d(sparse_x, weight)
print(y.shape) print(y.shape)
#(1, 1, 3, 4, 1) #(1, 1, 3, 4, 1)
""" """
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from ...fluid.layers import utils from paddle.fluid.layers import utils
from paddle import _C_ops, in_dynamic_mode from paddle import _C_ops, in_dynamic_mode
from paddle.nn.functional.pooling import _update_padding_nd from paddle.nn.functional.pooling import _update_padding_nd
...@@ -70,7 +70,7 @@ def max_pool3d(x, ...@@ -70,7 +70,7 @@ def max_pool3d(x,
kernel_sizes = [3, 3, 3] kernel_sizes = [3, 3, 3]
paddings = [0, 0, 0] paddings = [0, 0, 0]
strides = [1, 1, 1] strides = [1, 1, 1]
out = paddle.sparse.functional.max_pool3d(sparse_x, kernel_sizes, stride=strides, padding=paddings) out = paddle.incubate.sparse.nn.functional.max_pool3d(sparse_x, kernel_sizes, stride=strides, padding=paddings)
#[1, 2, 2, 2, 3] #[1, 2, 2, 2, 3]
""" """
......
...@@ -44,7 +44,7 @@ class ReLU(Layer): ...@@ -44,7 +44,7 @@ class ReLU(Layer):
dense_x = paddle.to_tensor(x, dtype='float32') dense_x = paddle.to_tensor(x, dtype='float32')
sparse_dim = 2 sparse_dim = 2
sparse_x = dense_x.to_sparse_coo(sparse_dim) sparse_x = dense_x.to_sparse_coo(sparse_dim)
relu = paddle.sparse.ReLU() relu = paddle.incubate.sparse.nn.ReLU()
out = relu(sparse_x) out = relu(sparse_x)
#out.values: [0., 2., 0., 4., 5.] #out.values: [0., 2., 0., 4., 5.]
""" """
......
...@@ -16,8 +16,8 @@ import numpy as np ...@@ -16,8 +16,8 @@ import numpy as np
from .. import functional as F from .. import functional as F
from paddle.nn import Layer from paddle.nn import Layer
from paddle.nn.initializer import Normal from paddle.nn.initializer import Normal
from ..functional.conv import _update_padding_nd from paddle.nn.functional.conv import _update_padding_nd
from ...fluid.layers import utils from paddle.fluid.layers import utils
__all__ = [] __all__ = []
...@@ -213,8 +213,8 @@ class Conv3D(_Conv3D): ...@@ -213,8 +213,8 @@ class Conv3D(_Conv3D):
indices = paddle.to_tensor(indices, dtype='int32') indices = paddle.to_tensor(indices, dtype='int32')
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
dense_shape = [1, 1, 3, 4, 1] dense_shape = [1, 1, 3, 4, 1]
sparse_x = paddle.sparse.sparse_coo_tensor(indices, values, dense_shape, stop_gradient=True) sparse_x = paddle.incubate.sparse.sparse_coo_tensor(indices, values, dense_shape, stop_gradient=True)
conv = paddle.sparse.Conv3D(1, 1, (1, 3, 3)) conv = paddle.incubate.sparse.nn.Conv3D(1, 1, (1, 3, 3))
y = conv(sparse_x) y = conv(sparse_x)
print(y.shape) print(y.shape)
# (1, 1, 1, 2, 1) # (1, 1, 1, 2, 1)
...@@ -346,8 +346,8 @@ class SubmConv3D(_Conv3D): ...@@ -346,8 +346,8 @@ class SubmConv3D(_Conv3D):
dense_shape = [1, 1, 3, 4, 1] dense_shape = [1, 1, 3, 4, 1]
indices = paddle.to_tensor(indices, dtype='int32') indices = paddle.to_tensor(indices, dtype='int32')
values = paddle.to_tensor(values, dtype='float32') values = paddle.to_tensor(values, dtype='float32')
sparse_x = paddle.sparse.sparse_coo_tensor(indices, values, dense_shape, stop_gradient=True) sparse_x = paddle.incubate.sparse.sparse_coo_tensor(indices, values, dense_shape, stop_gradient=True)
subm_conv = paddle.sparse.SubmConv3D(1, 1, (1, 3, 3)) subm_conv = paddle.incubate.sparse.nn.SubmConv3D(1, 1, (1, 3, 3))
y = subm_conv(sparse_x) y = subm_conv(sparse_x)
print(y.shape) print(y.shape)
# (1, 1, 3, 4, 1) # (1, 1, 3, 4, 1)
......
...@@ -100,7 +100,7 @@ class BatchNorm(paddle.nn.BatchNorm1D): ...@@ -100,7 +100,7 @@ class BatchNorm(paddle.nn.BatchNorm1D):
x_data = paddle.randn((1, 6, 6, 6, channels)).astype('float32') x_data = paddle.randn((1, 6, 6, 6, channels)).astype('float32')
dense_x = paddle.to_tensor(x_data) dense_x = paddle.to_tensor(x_data)
sparse_x = dense_x.to_sparse_coo(4) sparse_x = dense_x.to_sparse_coo(4)
batch_norm = paddle.sparse.BatchNorm(channels) batch_norm = paddle.incubate.sparse.nn.BatchNorm(channels)
batch_norm_out = batch_norm(sparse_x) batch_norm_out = batch_norm(sparse_x)
print(batch_norm_out.shape) print(batch_norm_out.shape)
# [1, 6, 6, 6, 3] # [1, 6, 6, 6, 3]
...@@ -153,7 +153,7 @@ class BatchNorm(paddle.nn.BatchNorm1D): ...@@ -153,7 +153,7 @@ class BatchNorm(paddle.nn.BatchNorm1D):
data_format='NC', data_format='NC',
use_global_stats=self._use_global_stats) use_global_stats=self._use_global_stats)
return paddle.sparse.sparse_coo_tensor( return paddle.incubate.sparse.sparse_coo_tensor(
input.indices(), input.indices(),
batch_norm_out, batch_norm_out,
shape=input.shape, shape=input.shape,
......
...@@ -66,7 +66,7 @@ class MaxPool3D(Layer): ...@@ -66,7 +66,7 @@ class MaxPool3D(Layer):
with _test_eager_guard(): with _test_eager_guard():
dense_x = paddle.randn((2, 3, 6, 6, 3)) dense_x = paddle.randn((2, 3, 6, 6, 3))
sparse_x = dense_x.to_sparse_coo(4) sparse_x = dense_x.to_sparse_coo(4)
max_pool3d = paddle.sparse.MaxPool3D( max_pool3d = paddle.incubate.sparse.nn.MaxPool3D(
kernel_size=3, data_format='NDHWC') kernel_size=3, data_format='NDHWC')
out = max_pool3d(sparse_x) out = max_pool3d(sparse_x)
#shape=[2, 1, 2, 2, 3] #shape=[2, 1, 2, 2, 3]
......
...@@ -17,44 +17,6 @@ __all__ = [] ...@@ -17,44 +17,6 @@ __all__ = []
from paddle import _C_ops, in_dynamic_mode from paddle import _C_ops, in_dynamic_mode
def relu(x, name=None):
"""
sparse relu activation, requiring x to be a sparse coo or sparse csr tensor.
.. math::
out = max(x, 0)
Parameters:
x (Tensor): The input Sparse Tensor with data type float32, float64.
name (str, optional): Name for the operation (optional, default is None).
For more information, please refer to :ref:`api_guide_Name`.
Returns:
A Sparse Tensor with the same data type and shape as ``x`` .
Examples:
.. code-block:: python
import paddle
from paddle.fluid.framework import _test_eager_guard
with _test_eager_guard():
dense_x = paddle.to_tensor([-2, 0, 1], dtype='float32')
sparse_x = dense_x.to_sparse_coo(1)
out = paddle.sparse.functional.relu(sparse_x)
"""
assert in_dynamic_mode(), "Currently, Sparse API only support dynamic mode"
if x.is_sparse_coo() or x.is_sparse_csr():
return _C_ops.final_state_sparse_relu(x)
else:
raise ValueError(
"Currently, sparse.relu only support the input of SparseCooTensor or SparseCsrTensor"
)
def tanh(x, name=None): def tanh(x, name=None):
""" """
sparse tanh activation, requiring x to be a sparse coo or sparse csr tensor. sparse tanh activation, requiring x to be a sparse coo or sparse csr tensor.
...@@ -80,7 +42,7 @@ def tanh(x, name=None): ...@@ -80,7 +42,7 @@ def tanh(x, name=None):
with _test_eager_guard(): with _test_eager_guard():
dense_x = paddle.to_tensor([-2, 0, 1], dtype='float32') dense_x = paddle.to_tensor([-2, 0, 1], dtype='float32')
sparse_x = dense_x.to_sparse_coo(1) sparse_x = dense_x.to_sparse_coo(1)
out = paddle.sparse.tanh(sparse_x) out = paddle.incubate.sparse.tanh(sparse_x)
""" """
assert in_dynamic_mode(), "Currently, Sparse API only support dynamic mode" assert in_dynamic_mode(), "Currently, Sparse API only support dynamic mode"
...@@ -118,7 +80,7 @@ def sqrt(x, name=None): ...@@ -118,7 +80,7 @@ def sqrt(x, name=None):
with _test_eager_guard(): with _test_eager_guard():
dense_x = paddle.to_tensor([4, 0, 1], dtype='float32') dense_x = paddle.to_tensor([4, 0, 1], dtype='float32')
sparse_x = dense_x.to_sparse_coo(1) sparse_x = dense_x.to_sparse_coo(1)
out = paddle.sparse.sqrt(sparse_x) out = paddle.incubate.sparse.sqrt(sparse_x)
""" """
assert in_dynamic_mode(), "Currently, Sparse API only support dynamic mode" assert in_dynamic_mode(), "Currently, Sparse API only support dynamic mode"
...@@ -156,7 +118,7 @@ def sin(x, name=None): ...@@ -156,7 +118,7 @@ def sin(x, name=None):
with _test_eager_guard(): with _test_eager_guard():
dense_x = paddle.to_tensor([-2, 0, 3], dtype='float32') dense_x = paddle.to_tensor([-2, 0, 3], dtype='float32')
sparse_x = dense_x.to_sparse_coo(1) sparse_x = dense_x.to_sparse_coo(1)
out = paddle.sparse.sin(sparse_x) out = paddle.incubate.sparse.sin(sparse_x)
""" """
assert in_dynamic_mode(), "Currently, Sparse API only support dynamic mode" assert in_dynamic_mode(), "Currently, Sparse API only support dynamic mode"
......
...@@ -374,6 +374,10 @@ packages=['paddle', ...@@ -374,6 +374,10 @@ packages=['paddle',
'paddle.incubate.distributed.models', 'paddle.incubate.distributed.models',
'paddle.incubate.distributed.models.moe', 'paddle.incubate.distributed.models.moe',
'paddle.incubate.distributed.models.moe.gate', 'paddle.incubate.distributed.models.moe.gate',
'paddle.incubate.sparse',
'paddle.incubate.sparse.nn',
'paddle.incubate.sparse.nn.layer',
'paddle.incubate.sparse.nn.functional',
'paddle.io', 'paddle.io',
'paddle.optimizer', 'paddle.optimizer',
'paddle.nn', 'paddle.nn',
...@@ -394,9 +398,6 @@ packages=['paddle', ...@@ -394,9 +398,6 @@ packages=['paddle',
'paddle.device.cuda', 'paddle.device.cuda',
'paddle.version', 'paddle.version',
'paddle.profiler', 'paddle.profiler',
'paddle.sparse',
'paddle.sparse.layer',
'paddle.sparse.functional',
] ]
with open('@PADDLE_SOURCE_DIR@/python/requirements.txt') as f: with open('@PADDLE_SOURCE_DIR@/python/requirements.txt') as f:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册