diff --git a/paddle/fluid/prim/utils/static/composite_grad_desc_maker.h b/paddle/fluid/prim/utils/static/composite_grad_desc_maker.h index b87ac68122bfb..e053d1465e70d 100644 --- a/paddle/fluid/prim/utils/static/composite_grad_desc_maker.h +++ b/paddle/fluid/prim/utils/static/composite_grad_desc_maker.h @@ -198,12 +198,17 @@ class GradCompositeOpMakerBase { std::vector> outputs_opt; std::vector outputs_descs = this->MultiForwardOutput(name); - outputs_opt.resize(outputs_descs.size()); - for (size_t i = 0; i < outputs_descs.size(); ++i) { - if (outputs_descs[i]) { - outputs_opt[i] = paddle::make_optional( - paddle::experimental::Tensor( - std::make_shared(outputs_descs[i]))); + outputs_opt.reserve(outputs_descs.size()); + for (const auto& output_desc : outputs_descs) { + if (output_desc) { + outputs_opt.emplace_back( + paddle::make_optional( + paddle::experimental::Tensor( + std::make_shared(output_desc)))); + } else { + outputs_opt.emplace_back( + paddle::make_optional( + paddle::experimental::Tensor())); } } return outputs_opt; @@ -214,12 +219,17 @@ class GradCompositeOpMakerBase { std::vector> inputs_opt; std::vector inputs_descs = this->MultiForwardInput(name); - inputs_opt.resize(inputs_descs.size()); - for (size_t i = 0; i < inputs_descs.size(); ++i) { - if (inputs_descs[i]) { - inputs_opt[i] = paddle::make_optional( - paddle::experimental::Tensor( - std::make_shared(inputs_descs[i]))); + inputs_opt.reserve(inputs_descs.size()); + for (const auto& input_desc : inputs_descs) { + if (input_desc) { + inputs_opt.emplace_back( + paddle::make_optional( + paddle::experimental::Tensor( + std::make_shared(input_desc)))); + } else { + inputs_opt.emplace_back( + paddle::make_optional( + paddle::experimental::Tensor())); } } return inputs_opt; @@ -230,12 +240,17 @@ class GradCompositeOpMakerBase { std::vector> outputs_grads; std::vector outputs_grads_descs = this->MultiOutputGrad(name); - outputs_grads.resize(outputs_grads_descs.size()); - for (size_t i = 0; i < outputs_grads_descs.size(); ++i) { - if (outputs_grads_descs[i]) { - outputs_grads[i] = paddle::make_optional( - paddle::experimental::Tensor( - std::make_shared(outputs_grads_descs[i]))); + outputs_grads.reserve(outputs_grads_descs.size()); + for (const auto& output_grad_desc : outputs_grads_descs) { + if (output_grad_desc) { + outputs_grads.emplace_back( + paddle::make_optional( + paddle::experimental::Tensor( + std::make_shared(output_grad_desc)))); + } else { + outputs_grads.emplace_back( + paddle::make_optional( + paddle::experimental::Tensor())); } } return outputs_grads;