训练过程中动态图backward过程出现错误
Created by: liu0haha123
反向传播过程错误
- 版本、环境信息: 1)PaddlePaddle版本:1.8.2 2)CPU: 3)GPU:P100 cuda10.1 4)系统环境:ubuntu16.04
- 训练信息 1)单机单卡 2)显存信息 3)Operator信息
- 复现信息:由于模型结构问题,loss的计算函数和forward函数的前向传播过程是分别写在两个不同的函数中的,训练时调用的是模型的自己编写的cal_loss函数而不是forward函数,是不是这种原因产生的 报错信息:
--------------------------------------------
C++ Call Stacks (More useful to developers):
--------------------------------------------
0 std::string paddle::platform::GetTraceBackString<std::string const&>(std::string const&, char const*, int)
1 paddle::platform::EnforceNotMet::EnforceNotMet(std::string const&, char const*, int)
2 paddle::imperative::DygraphInferShapeContext<paddle::imperative::VariableWrapper>::SetOutputDim(std::string const&, paddle::framework::DDim const&)
3 paddle::operators::LstmUnitGradOp::InferShape(paddle::framework::InferShapeContext*) const
4 paddle::imperative::PreparedOp::Run(std::map<std::string, paddle::imperative::SavedVariableWrapperList, std::less<std::string>, std::allocator<std::pair<std::string const, paddle::imperative::SavedVariableWrapperList> > > const&, std::map<std::string, paddle::imperative::SavedVariableWrapperList, std::less<std::string>, std::allocator<std::pair<std::string const, paddle::imperative::SavedVariableWrapperList> > > const&, std::unordered_map<std::string, boost::variant<boost::blank, int, float, std::string, std::vector<int, std::allocator<int> >, std::vector<float, std::allocator<float> >, std::vector<std::string, std::allocator<std::string> >, bool, std::vector<bool, std::allocator<bool> >, paddle::framework::BlockDesc*, long, std::vector<paddle::framework::BlockDesc*, std::allocator<paddle::framework::BlockDesc*> >, std::vector<long, std::allocator<long> >, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, boost::variant<boost::blank, int, float, std::string, std::vector<int, std::allocator<int> >, std::vector<float, std::allocator<float> >, std::vector<std::string, std::allocator<std::string> >, bool, std::vector<bool, std::allocator<bool> >, paddle::framework::BlockDesc*, long, std::vector<paddle::framework::BlockDesc*, std::allocator<paddle::framework::BlockDesc*> >, std::vector<long, std::allocator<long> >, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> > > > const&)
5 paddle::imperative::OpBase::Run(paddle::framework::OperatorBase const&, std::map<std::string, paddle::imperative::SavedVariableWrapperList, std::less<std::string>, std::allocator<std::pair<std::string const, paddle::imperative::SavedVariableWrapperList> > > const&, std::map<std::string, paddle::imperative::SavedVariableWrapperList, std::less<std::string>, std::allocator<std::pair<std::string const, paddle::imperative::SavedVariableWrapperList> > > const&, std::unordered_map<std::string, boost::variant<boost::blank, int, float, std::string, std::vector<int, std::allocator<int> >, std::vector<float, std::allocator<float> >, std::vector<std::string, std::allocator<std::string> >, bool, std::vector<bool, std::allocator<bool> >, paddle::framework::BlockDesc*, long, std::vector<paddle::framework::BlockDesc*, std::allocator<paddle::framework::BlockDesc*> >, std::vector<long, std::allocator<long> >, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, boost::variant<boost::blank, int, float, std::string, std::vector<int, std::allocator<int> >, std::vector<float, std::allocator<float> >, std::vector<std::string, std::allocator<std::string> >, bool, std::vector<bool, std::allocator<bool> >, paddle::framework::BlockDesc*, long, std::vector<paddle::framework::BlockDesc*, std::allocator<paddle::framework::BlockDesc*> >, std::vector<long, std::allocator<long> >, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> > > > const&, paddle::platform::Place const&)
6 paddle::imperative::BasicEngine::Execute()
----------------------
Error Message Summary:
----------------------
NotFoundError: can not find [C_prev@GRAD] in output
[Hint: Expected it != var_base_map_out_->end(), but received it == var_base_map_out_->end().] at (/paddle/paddle/fluid/imperative/infer_shape_context.h:274)
File "/root/IE_dygraph/train.py", line 69, in train
loss.backward()
File "/root/IE_dygraph/train.py", line 79, in <module>
train(epochs=1)