diff --git a/paddle/fluid/operators/sequence_ops/sequence_unpad_op.h b/paddle/fluid/operators/sequence_ops/sequence_unpad_op.h index fe8ca41b698159a782547ce673a374d074d3b73d..70f26055b7cc0516b051fab2c8094752d5a9f9f1 100644 --- a/paddle/fluid/operators/sequence_ops/sequence_unpad_op.h +++ b/paddle/fluid/operators/sequence_ops/sequence_unpad_op.h @@ -33,7 +33,6 @@ class SequenceUnpadOpKernel : public framework::OpKernel { auto* x_t = ctx.Input("X"); auto* len_t = ctx.Input("Length"); auto* out_t = ctx.Output("Out"); - out_t->mutable_data(ctx.GetPlace()); const int64_t* seq_len_ptr = nullptr; if (platform::is_gpu_place(ctx.GetPlace())) { @@ -67,6 +66,9 @@ class SequenceUnpadOpKernel : public framework::OpKernel { } out_t->Resize(framework::make_ddim(out_dims_vec)); + // after set the lod of output, allocate the memory + out_t->mutable_data(ctx.GetPlace()); + int64_t padded_length = x_t->dims()[1]; math::UnpaddingLoDTensorFunctor()( ctx.template device_context(), *x_t, out_t,