提交 72fe6d63 编写于 作者: L lfchener

add test for add_position_encoding in dygraph mode

上级 7e02c366
...@@ -17,9 +17,31 @@ import math ...@@ -17,9 +17,31 @@ import math
import paddle.fluid.core as core import paddle.fluid.core as core
from op_test import OpTest from op_test import OpTest
import paddle.fluid as fluid import paddle.fluid as fluid
import paddle
import paddle.nn.functional as F
from paddle.fluid import Program, program_guard from paddle.fluid import Program, program_guard
def add_position_encoding(input, alpha=1.0, beta=1.0):
batch_size = input.shape[0]
max_length = input.shape[1]
enc_size = input.shape[2]
out = np.copy(input)
half_shape = int(enc_size / 2)
for i in range(batch_size):
for j in range(max_length):
for k in range(half_shape):
val = j / pow(10000.0, k * 1.0 / (
half_shape - 1)) if half_shape > 1 else j / 10000.0
out[i, j, k] = \
input[i, j, k] * alpha + math.sin(val) * beta
out[i, j, half_shape + k] = \
input[i, j, half_shape + k] * alpha + math.cos(val) * beta
return out
class TestAddPositionEncodingTensorOp(OpTest): class TestAddPositionEncodingTensorOp(OpTest):
""" """
This class is to test the AddPositionEncodingOp This class is to test the AddPositionEncodingOp
...@@ -56,22 +78,8 @@ class TestAddPositionEncodingTensorOp(OpTest): ...@@ -56,22 +78,8 @@ class TestAddPositionEncodingTensorOp(OpTest):
self.alpha = 0.6 self.alpha = 0.6
self.beta = 0.5 self.beta = 0.5
self.x = np.random.uniform(0.1, 1, [2, 15, 4]).astype(self.dtype) self.x = np.random.uniform(0.1, 1, [2, 15, 4]).astype(self.dtype)
self.out = np.copy(self.x)
batch_size = self.x.shape[0] self.out = add_position_encoding(self.x, self.alpha, self.beta)
max_length = self.x.shape[1]
enc_size = self.x.shape[2]
half_shape = int(enc_size / 2)
for i in range(batch_size):
for j in range(max_length):
for k in range(half_shape):
val = j / pow(10000.0, k * 1.0 / (
half_shape - 1)) if half_shape > 1 else j / 10000.0
self.out[i, j, k] = \
self.x[i, j, k] * self.alpha + math.sin(val) * self.beta
self.out[i, j, half_shape + k] = \
self.x[i, j, half_shape + k] * self.alpha + math.cos(val) * self.beta
class TestAddPositionEncodingLoDTensorOp(OpTest): class TestAddPositionEncodingLoDTensorOp(OpTest):
...@@ -145,5 +153,17 @@ class TestAddPositionEncodingOpError(unittest.TestCase): ...@@ -145,5 +153,17 @@ class TestAddPositionEncodingOpError(unittest.TestCase):
self.assertRaises(TypeError, test_Variable) self.assertRaises(TypeError, test_Variable)
class TestAddPositionEncodingOpDygraph(unittest.TestCase):
def test_dygraph(self):
paddle.disable_static()
tensor = np.random.randn(16, 32, 64)
position_tensor = F.add_position_encoding(
input=paddle.to_tensor(tensor), alpha=1.0, beta=1.0).numpy()
paddle.enable_static()
position_tensor_np = add_position_encoding(tensor, 1.0, 1.0)
self.assertTrue(np.allclose(position_tensor, position_tensor_np))
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册