From 834240333b2782d013e84e77a29d52daa9ba6f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=98=8E=E5=86=AC?= <78149749+winter-wang@users.noreply.github.com> Date: Sun, 12 Sep 2021 16:05:36 +0800 Subject: [PATCH] fix some op extra error, test=develop (#35667) --- paddle/fluid/framework/operator.cc | 4 ++-- paddle/fluid/operators/conv_op.cc | 7 +++++-- paddle/fluid/operators/lstm_op.cc | 4 +--- paddle/fluid/operators/transpose_op.cc | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/paddle/fluid/framework/operator.cc b/paddle/fluid/framework/operator.cc index 17003157b6..0d5db73744 100644 --- a/paddle/fluid/framework/operator.cc +++ b/paddle/fluid/framework/operator.cc @@ -441,7 +441,7 @@ void OperatorBase::CheckAllInputOutputSet() const { if (info_ == nullptr || info_->proto_ == nullptr) return; for (auto& in : info_->Proto().inputs()) { - if (!in.dispensable()) { + if (!in.dispensable() && !in.extra()) { PADDLE_ENFORCE_NE( inputs_.find(in.name()), inputs_.end(), platform::errors::NotFound("Operator %s's input (%s) is not set.", @@ -450,7 +450,7 @@ void OperatorBase::CheckAllInputOutputSet() const { } for (auto& out : info_->Proto().outputs()) { - if (!out.dispensable()) { + if (!out.dispensable() && !out.extra()) { PADDLE_ENFORCE_NE( outputs_.find(out.name()), outputs_.end(), platform::errors::NotFound("Operator %s's output (%s) is not set.", diff --git a/paddle/fluid/operators/conv_op.cc b/paddle/fluid/operators/conv_op.cc index a28f32b6ab..5ce8422c9a 100644 --- a/paddle/fluid/operators/conv_op.cc +++ b/paddle/fluid/operators/conv_op.cc @@ -686,12 +686,15 @@ class Conv2DGradMaker : public framework::SingleGradOpMaker { op->SetType(this->ForwardOpType() + "_grad"); op->SetInput("Input", this->Input("Input")); op->SetInput("Filter", this->Input("Filter")); - op->SetInput("Bias", this->Input("Bias")); op->SetInput(framework::GradVarName("Output"), this->OutputGrad("Output")); op->SetOutput(framework::GradVarName("Input"), this->InputGrad("Input")); op->SetOutput(framework::GradVarName("Filter"), this->InputGrad("Filter")); - op->SetOutput(framework::GradVarName("Bias"), this->InputGrad("Bias")); + + if (this->HasInput("Bias")) { + op->SetInput("Bias", this->Input("Bias")); + op->SetOutput(framework::GradVarName("Bias"), this->InputGrad("Bias")); + } op->SetAttrMap(this->Attrs()); } }; diff --git a/paddle/fluid/operators/lstm_op.cc b/paddle/fluid/operators/lstm_op.cc index 0405578f5d..2ec9de3e3b 100644 --- a/paddle/fluid/operators/lstm_op.cc +++ b/paddle/fluid/operators/lstm_op.cc @@ -186,9 +186,7 @@ class LSTMOpMaker : public framework::OpProtoAndCheckerMaker { "(bool, default: False) " "whether to compute reversed LSTM.") .SetDefault(false); - AddAttr("is_test", "True if in test phase.") - .SetDefault(false) - .AsExtra(); + AddAttr("is_test", "True if in test phase.").SetDefault(false); AddAttr( "gate_activation", "(string, default: sigmoid)" diff --git a/paddle/fluid/operators/transpose_op.cc b/paddle/fluid/operators/transpose_op.cc index aa606693fe..2b02d76d08 100644 --- a/paddle/fluid/operators/transpose_op.cc +++ b/paddle/fluid/operators/transpose_op.cc @@ -223,7 +223,7 @@ class Transpose2Op : public TransposeOp { void InferShape(framework::InferShapeContext *ctx) const override { TransposeOp::InferShape(ctx); - OP_INOUT_CHECK(ctx->HasOutput("XShape"), "Output", "XShape", "Transpose2"); + if (!ctx->HasOutput("XShape")) return; const auto &in_dims = ctx->GetInputDim("X"); std::vector x_shape_dim(in_dims.size() + 1); x_shape_dim[0] = 0; -- GitLab