|
|
|
@ -49,6 +49,61 @@ class TestSeqAvgPool(OpTest):
|
|
|
|
|
self.check_grad(["X"], "Out")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqSumPool(TestSeqAvgPool):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "SUM"}
|
|
|
|
|
for i in range(4):
|
|
|
|
|
sub_x = x[lod[0][i]:lod[0][i + 1], :]
|
|
|
|
|
out[i] = sub_x.sum(axis=0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqMaxPool(TestSeqAvgPool):
|
|
|
|
|
def set_data(self):
|
|
|
|
|
self.op_type = 'sequence_pool'
|
|
|
|
|
x = np.random.uniform(0.1, 1, [13, 23]).astype('float32')
|
|
|
|
|
lod = [[0, 4, 5, 8, 13]]
|
|
|
|
|
for i in range(4):
|
|
|
|
|
l = lod[0][i + 1] - lod[0][i]
|
|
|
|
|
x[lod[0][i] + np.random.randint(l), :] += 2.0
|
|
|
|
|
|
|
|
|
|
self.inputs = {'X': (x, lod)}
|
|
|
|
|
|
|
|
|
|
out = np.zeros((4, 23)).astype('float32')
|
|
|
|
|
self.outputs = {'Out': out}
|
|
|
|
|
return x, lod, out
|
|
|
|
|
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "MAX"}
|
|
|
|
|
for i in range(4):
|
|
|
|
|
sub_x = x[lod[0][i]:lod[0][i + 1], :]
|
|
|
|
|
out[i] = np.amax(sub_x, axis=0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqSqrtPool(TestSeqAvgPool):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "SQRT"}
|
|
|
|
|
for i in range(4):
|
|
|
|
|
sub_x = x[lod[0][i]:lod[0][i + 1], :]
|
|
|
|
|
len = lod[0][i + 1] - lod[0][i]
|
|
|
|
|
out[i] = sub_x.sum(axis=0) / np.sqrt(len)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqLastPool(TestSeqAvgPool):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "LAST"}
|
|
|
|
|
for i in range(4):
|
|
|
|
|
sub_x = x[lod[0][i]:lod[0][i + 1], :]
|
|
|
|
|
out[i] = sub_x[-1, :]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqFirstPool(TestSeqAvgPool):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "FIRST"}
|
|
|
|
|
for i in range(4):
|
|
|
|
|
sub_x = x[lod[0][i]:lod[0][i + 1], :]
|
|
|
|
|
out[i] = sub_x[0, :]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqAvgPool2D(TestSeqAvgPool):
|
|
|
|
|
def set_data(self):
|
|
|
|
|
self.op_type = 'sequence_pool'
|
|
|
|
@ -68,14 +123,6 @@ class TestSeqAvgPool2D(TestSeqAvgPool):
|
|
|
|
|
out[i] = np.reshape(sub_x.mean(axis=0), (3, 17))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqSumPool(TestSeqAvgPool):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "SUM"}
|
|
|
|
|
for i in range(4):
|
|
|
|
|
sub_x = x[lod[0][i]:lod[0][i + 1], :]
|
|
|
|
|
out[i] = sub_x.sum(axis=0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqSumPool2D(TestSeqAvgPool2D):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "SUM"}
|
|
|
|
@ -84,15 +131,6 @@ class TestSeqSumPool2D(TestSeqAvgPool2D):
|
|
|
|
|
out[i] = np.reshape(sub_x.sum(axis=0), (3, 17))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqSqrtPool(TestSeqAvgPool):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "SQRT"}
|
|
|
|
|
for i in range(4):
|
|
|
|
|
sub_x = x[lod[0][i]:lod[0][i + 1], :]
|
|
|
|
|
len = lod[0][i + 1] - lod[0][i]
|
|
|
|
|
out[i] = sub_x.sum(axis=0) / np.sqrt(len)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqSqrtPool2D(TestSeqAvgPool2D):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "SQRT"}
|
|
|
|
@ -108,28 +146,6 @@ class TestSeqSqrtPool2D(TestSeqAvgPool2D):
|
|
|
|
|
self.check_grad(["X"], "Out", max_relative_error=0.06)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqMaxPool(TestSeqAvgPool):
|
|
|
|
|
def set_data(self):
|
|
|
|
|
self.op_type = 'sequence_pool'
|
|
|
|
|
x = np.random.uniform(0.1, 1, [13, 23]).astype('float32')
|
|
|
|
|
lod = [[0, 4, 5, 8, 13]]
|
|
|
|
|
for i in range(4):
|
|
|
|
|
l = lod[0][i + 1] - lod[0][i]
|
|
|
|
|
x[lod[0][i] + np.random.randint(l), :] += 2.0
|
|
|
|
|
|
|
|
|
|
self.inputs = {'X': (x, lod)}
|
|
|
|
|
|
|
|
|
|
out = np.zeros((4, 23)).astype('float32')
|
|
|
|
|
self.outputs = {'Out': out}
|
|
|
|
|
return x, lod, out
|
|
|
|
|
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "MAX"}
|
|
|
|
|
for i in range(4):
|
|
|
|
|
sub_x = x[lod[0][i]:lod[0][i + 1], :]
|
|
|
|
|
out[i] = np.amax(sub_x, axis=0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqMaxPool2D(TestSeqAvgPool2D):
|
|
|
|
|
def set_data(self):
|
|
|
|
|
self.op_type = 'sequence_pool'
|
|
|
|
@ -151,14 +167,6 @@ class TestSeqMaxPool2D(TestSeqAvgPool2D):
|
|
|
|
|
out[i] = np.reshape(np.amax(sub_x, axis=0), (3, 11))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqLastPool(TestSeqAvgPool):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "LAST"}
|
|
|
|
|
for i in range(4):
|
|
|
|
|
sub_x = x[lod[0][i]:lod[0][i + 1], :]
|
|
|
|
|
out[i] = sub_x[-1, :]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqLastPool2D(TestSeqAvgPool2D):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "LAST"}
|
|
|
|
@ -167,14 +175,6 @@ class TestSeqLastPool2D(TestSeqAvgPool2D):
|
|
|
|
|
out[i] = np.reshape(sub_x[-1, :], (3, 17))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqFirstPool(TestSeqAvgPool):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "FIRST"}
|
|
|
|
|
for i in range(4):
|
|
|
|
|
sub_x = x[lod[0][i]:lod[0][i + 1], :]
|
|
|
|
|
out[i] = sub_x[0, :]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestSeqFirstPool2D(TestSeqAvgPool2D):
|
|
|
|
|
def compute(self, x, lod, out):
|
|
|
|
|
self.attrs = {'pooltype': "FIRST"}
|
|
|
|
|