import paddle.fluid as fluid
import numpy as np
zeros = fluid.layers.fill_constant(shape=[5, 3], dtype="float32", value=0.0)
ind = fluid.layers.data("index", shape=[2], dtype="int32", append_batch_size=False)
ori_data = fluid.layers.data("ori_data", shape=[2, 5], dtype="float32", append_batch_size=False)
update = fluid.layers.fc(ori_data, 3, act="relu")
output = fluid.layers.scatter(zeros, ind, update)
pred = fluid.layers.fc(output, 5, act="softmax")
label = fluid.layers.data("label", shape=[5, 1], dtype="int64", append_batch_size=False)
loss = fluid.layers.cross_entropy(input=pred, label=label)
loss = fluid.layers.reduce_mean(loss)
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(program=fluid.default_startup_program())
o = np.random.randn(2, 5)
o = np.array(o, dtype="float32")
adam = fluid.optimizer.Adam(learning_rate=0.01)
adam.minimize(loss)
feed_dict = {"index": np.array([1, 3], dtype="int32"),
"label": np.array([[1], [1], [1], [1], [1]], dtype="int64"),
"ori_data": o
}
ret = exe.run(fluid.default_main_program(),
feed=feed_dict,
fetch_list=[loss], return_numpy=True)
Traceback (most recent call last):
File "paddle_debug.py", line 22, in <module>
adam.minimize(loss)
File "/anaconda2/envs/snorkel/lib/python3.6/site-packages/paddle/fluid/optimizer.py", line 498, in minimize
no_grad_set=no_grad_set)
File "/anaconda2/envs/snorkel/lib/python3.6/site-packages/paddle/fluid/optimizer.py", line 403, in backward
no_grad_set, callbacks)
File "/anaconda2/envs/snorkel/lib/python3.6/site-packages/paddle/fluid/backward.py", line 518, in append_backward
_append_backward_vars_(root_block, fwd_op_num, grad_to_var, grad_info_map)
File "/anaconda2/envs/snorkel/lib/python3.6/site-packages/paddle/fluid/backward.py", line 354, in _append_backward_vars_
op_desc.infer_shape(block.desc)
paddle.fluid.core.EnforceNotMet: Enforce failed. Expected arg_names.size() == 1UL, but received arg_names.size():0 != 1UL:1.
Output(X@GRAD) should hold one element, but now it holds 0 at [/home/teamcity/work/ef54dc8a5b211854/paddle/fluid/framework/op_desc.cc:167]
PaddlePaddle Call Stacks:
0 0x11acfe454p void paddle::platform::EnforceNotMet::Init<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const*, int) + 628
1 0x11acfe180p paddle::platform::EnforceNotMet::EnforceNotMet(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*, int) + 80
2 0x11ae4bdbfp paddle::framework::CompileTimeInferShapeContext::SetOutputDim(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, paddle::framework::DDim const&) + 319
3 0x11b073d05p paddle::operators::ScatterGradOp::InferShape(paddle::framework::InferShapeContext*) const + 485
4 0x11ae4a888p paddle::framework::OpDesc::InferShape(paddle::framework::BlockDesc const&) const + 1464
5 0x11adbba16p void pybind11::cpp_function::initialize<pybind11::cpp_function::cpp_function<void, paddle::framework::OpDesc, paddle::framework::BlockDesc const&, pybind11::name, pybind11::is_method, pybind11::sibling>(void (paddle::framework::OpDesc::*)(paddle::framework::BlockDesc const&) const, pybind11::name const&, pybind11::is_method const&, pybind11::sibling const&)::'lambda'(paddle::framework::OpDesc const*, paddle::framework::BlockDesc const&), void, paddle::framework::OpDesc const*, paddle::framework::BlockDesc const&, pybind11::name, pybind11::is_method, pybind11::sibling>(void&&, paddle::framework::OpDesc (*)(paddle::framework::BlockDesc const&), pybind11::name const&, pybind11::is_method const&, pybind11::sibling const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const + 198
6 0x11acdf308p pybind11::cpp_function::dispatcher(_object*, _object*, _object*) + 3400
7 0x10678f5dap _PyCFunction_FastCallDict + 362
8 0x106715e81p _PyObject_FastCallKeywords + 385
9 0x106866688p call_function + 392
10 0x106864111p _PyEval_EvalFrameDefault + 46817
11 0x10686694cp fast_function + 188
12 0x1068665ecp call_function + 236
13 0x106864111p _PyEval_EvalFrameDefault + 46817
14 0x106857869p _PyEval_EvalCodeWithName + 425
15 0x1068669fap fast_function + 362
16 0x1068665ecp call_function + 236
17 0x106864111p _PyEval_EvalFrameDefault + 46817
18 0x106857869p _PyEval_EvalCodeWithName + 425
19 0x1068669fap fast_function + 362
20 0x1068665ecp call_function + 236
21 0x1068641c1p _PyEval_EvalFrameDefault + 46993
22 0x106857869p _PyEval_EvalCodeWithName + 425
23 0x1068669fap fast_function + 362
24 0x1068665ecp call_function + 236
25 0x106864111p _PyEval_EvalFrameDefault + 46817
26 0x106857869p _PyEval_EvalCodeWithName + 425
27 0x1068b00bcp PyRun_FileExFlags + 252
28 0x1068af594p PyRun_SimpleFileExFlags + 372
29 0x1068d61f6p Py_Main + 3766
30 0x106705d19p main + 313
31 0x7fff64399ed9p start + 1
32 0x2p
PaddlePaddle 1.4.1 CPU版本 MacOs
如下代码报错,估计是scatter对于update无法求导
错误为