未验证 提交 55ec0e2a 编写于 作者: W whs 提交者: GitHub

Merge pull request #7649 from wanghaoshuang/fix_edit

Change input data type to int64_t
...@@ -49,10 +49,10 @@ class EditDistanceOpMaker : public framework::OpProtoAndCheckerMaker { ...@@ -49,10 +49,10 @@ class EditDistanceOpMaker : public framework::OpProtoAndCheckerMaker {
EditDistanceOpMaker(OpProto *proto, OpAttrChecker *op_checker) EditDistanceOpMaker(OpProto *proto, OpAttrChecker *op_checker)
: OpProtoAndCheckerMaker(proto, op_checker) { : OpProtoAndCheckerMaker(proto, op_checker) {
AddInput("Hyps", AddInput("Hyps",
"(2-D LoDTensor<int>, 2nd dim. equal to 1) " "(2-D LoDTensor<int64_t>, 2nd dim. equal to 1) "
"The indices for hypothesis strings."); "The indices for hypothesis strings.");
AddInput("Refs", AddInput("Refs",
"(2-D LoDTensor<int>, 2nd dim. equal to 1) " "(2-D LoDTensor<int64_t>, 2nd dim. equal to 1) "
"The indices for reference strings."); "The indices for reference strings.");
AddAttr<bool>("normalized", AddAttr<bool>("normalized",
"(bool, default false) Indicated whether to normalize " "(bool, default false) Indicated whether to normalize "
......
...@@ -39,8 +39,8 @@ __global__ void FillFirstColumn(T* dist, const int M, const int N) { ...@@ -39,8 +39,8 @@ __global__ void FillFirstColumn(T* dist, const int M, const int N) {
} }
template <typename T> template <typename T>
__global__ void Levenshtein(T* dist, const int* x1, const int* x2, const int M, __global__ void Levenshtein(T* dist, const int64_t* x1, const int64_t* x2,
const int N, const int start) { const int M, const int N, const int start) {
int idx = blockDim.x * blockIdx.x + threadIdx.x; int idx = blockDim.x * blockIdx.x + threadIdx.x;
int offset = N; int offset = N;
int index = start + idx * offset; int index = start + idx * offset;
...@@ -113,8 +113,8 @@ class EditDistanceGPUKernel : public framework::OpKernel<T> { ...@@ -113,8 +113,8 @@ class EditDistanceGPUKernel : public framework::OpKernel<T> {
dist_t.Resize({m + 1, n + 1}); dist_t.Resize({m + 1, n + 1});
dist_t.mutable_data<T>(ctx.GetPlace()); dist_t.mutable_data<T>(ctx.GetPlace());
auto dist = dist_t.data<T>(); auto dist = dist_t.data<T>();
auto x1 = x1_t->data<int>() + hyp_lod[num]; auto x1 = x1_t->data<int64_t>() + hyp_lod[num];
auto x2 = x2_t->data<int>() + ref_lod[num]; auto x2 = x2_t->data<int64_t>() + ref_lod[num];
FillFirstColumn<T><<<1 + m / PADDLE_CUDA_NUM_THREADS, FillFirstColumn<T><<<1 + m / PADDLE_CUDA_NUM_THREADS,
PADDLE_CUDA_NUM_THREADS, 0, stream>>>(dist, m, n); PADDLE_CUDA_NUM_THREADS, 0, stream>>>(dist, m, n);
......
...@@ -60,8 +60,8 @@ class EditDistanceKernel : public framework::OpKernel<T> { ...@@ -60,8 +60,8 @@ class EditDistanceKernel : public framework::OpKernel<T> {
dist_t.Resize({m + 1, n + 1}); dist_t.Resize({m + 1, n + 1});
dist_t.mutable_data<T>(ctx.GetPlace()); dist_t.mutable_data<T>(ctx.GetPlace());
auto dist = dist_t.data<T>(); auto dist = dist_t.data<T>();
auto x1 = x1_t->data<int>() + hyp_lod[num]; auto x1 = x1_t->data<int64_t>() + hyp_lod[num];
auto x2 = x2_t->data<int>() + ref_lod[num]; auto x2 = x2_t->data<int64_t>() + ref_lod[num];
for (int64_t i = 0; i < m + 1; ++i) { for (int64_t i = 0; i < m + 1; ++i) {
dist[i * (n + 1)] = i; dist[i * (n + 1)] = i;
} }
......
...@@ -51,8 +51,8 @@ class TestEditDistanceOp(OpTest): ...@@ -51,8 +51,8 @@ class TestEditDistanceOp(OpTest):
def setUp(self): def setUp(self):
self.op_type = "edit_distance" self.op_type = "edit_distance"
normalized = False normalized = False
x1 = np.array([[0, 12, 3, 5, 8, 2]]).astype("int32") x1 = np.array([[0, 12, 3, 5, 8, 2]]).astype("int64")
x2 = np.array([[0, 12, 4, 7, 8]]).astype("int32") x2 = np.array([[0, 12, 4, 7, 8]]).astype("int64")
x1 = np.transpose(x1) x1 = np.transpose(x1)
x2 = np.transpose(x2) x2 = np.transpose(x2)
x1_lod = [0, 1, 5] x1_lod = [0, 1, 5]
...@@ -79,8 +79,8 @@ class TestEditDistanceOpNormalized(OpTest): ...@@ -79,8 +79,8 @@ class TestEditDistanceOpNormalized(OpTest):
def setUp(self): def setUp(self):
self.op_type = "edit_distance" self.op_type = "edit_distance"
normalized = True normalized = True
x1 = np.array([[0, 10, 3, 6, 5, 8, 2]]).astype("int32") x1 = np.array([[0, 10, 3, 6, 5, 8, 2]]).astype("int64")
x2 = np.array([[0, 10, 4, 6, 7, 8]]).astype("int32") x2 = np.array([[0, 10, 4, 6, 7, 8]]).astype("int64")
x1 = np.transpose(x1) x1 = np.transpose(x1)
x2 = np.transpose(x2) x2 = np.transpose(x2)
x1_lod = [0, 1, 3, 6] x1_lod = [0, 1, 3, 6]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册