PaddlePaddle出现Tensor holds the wrong type

  • 问题描述:我根据文档编写机器翻译模型,出现了Tensor holds the wrong type

  • 报错信息:

---------------------------------------------------------------------------
EnforceNotMet                             Traceback (most recent call last)
<ipython-input-11-49ae4ab0d47c> in <module>()
      5         num_epochs=EPOCH_NUM,
      6         event_handler=event_handler,
----> 7         feed_order=feed_order)

~/anaconda3/envs/paddle/lib/python3.5/site-packages/paddle/fluid/contrib/trainer.py in train(self, num_epochs, event_handler, reader, feed_order)
    403         else:
    404             self._train_by_executor(num_epochs, event_handler, reader,
--> 405                                     feed_order)
    406 
    407     def test(self, reader, feed_order):

~/anaconda3/envs/paddle/lib/python3.5/site-packages/paddle/fluid/contrib/trainer.py in _train_by_executor(self, num_epochs, event_handler, reader, feed_order)
    481             exe = executor.Executor(self.place)
    482             reader = feeder.decorate_reader(reader, multi_devices=False)
--> 483             self._train_by_any_executor(event_handler, exe, num_epochs, reader)
    484 
    485     def _train_by_any_executor(self, event_handler, exe, num_epochs, reader):

~/anaconda3/envs/paddle/lib/python3.5/site-packages/paddle/fluid/contrib/trainer.py in _train_by_any_executor(self, event_handler, exe, num_epochs, reader)
    510                                       fetch_list=[
    511                                           var.name
--> 512                                           for var in self.train_func_outputs
    513                                       ])
    514                 else:

~/anaconda3/envs/paddle/lib/python3.5/site-packages/paddle/fluid/executor.py in run(self, program, feed, fetch_list, feed_var_name, fetch_var_name, scope, return_numpy, use_program_cache)
    468 
    469         self._feed_data(program, feed, feed_var_name, scope)
--> 470         self.executor.run(program.desc, scope, 0, True, True)
    471         outs = self._fetch_data(fetch_list, fetch_var_name, scope)
    472         if return_numpy:

EnforceNotMet: Tensor holds the wrong type, it holds i at [/Users/paddle/minqiyang/Paddle/paddle/fluid/framework/tensor_impl.h:29]
PaddlePaddle Call Stacks: 
0          0x11f436a68p paddle::platform::EnforceNotMet::EnforceNotMet(std::exception_ptr, char const*, int) + 760
1          0x11f792f42p long long const* paddle::framework::Tensor::data<long long>() const + 258
2          0x11fc36fabp paddle::operators::LookupTableKernel<float>::Compute(paddle::framework::ExecutionContext const&) const + 331
3          0x11fc36e20p std::__1::__function::__func<paddle::framework::OpKernelRegistrarFunctor<paddle::platform::CPUPlace, false, 0ul, paddle::operators::LookupTableKernel<float>, paddle::operators::LookupTableKernel<double> >::operator()(char const*, char const*) const::'lambda'(paddle::framework::ExecutionContext const&), std::__1::allocator<paddle::framework::OpKernelRegistrarFunctor<paddle::platform::CPUPlace, false, 0ul, paddle::operators::LookupTableKernel<float>, paddle::operators::LookupTableKernel<double> >::operator()(char const*, char const*) const::'lambda'(paddle::framework::ExecutionContext const&)>, void (paddle::framework::ExecutionContext const&)>::operator()(paddle::framework::ExecutionContext const&) + 32
4          0x12025f223p paddle::framework::OperatorWithKernel::RunImpl(paddle::framework::Scope const&, boost::variant<paddle::platform::CUDAPlace, paddle::platform::CPUPlace, paddle::platform::CUDAPinnedPlace, 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_, 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_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> const&) const + 659
5          0x12025b141p paddle::framework::OperatorBase::Run(paddle::framework::Scope const&, boost::variant<paddle::platform::CUDAPlace, paddle::platform::CPUPlace, paddle::platform::CUDAPinnedPlace, 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_, 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_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> const&) + 577
6          0x11f5043a6p paddle::framework::Executor::RunPreparedContext(paddle::framework::ExecutorPrepareContext*, paddle::framework::Scope*, bool, bool, bool) + 390
7          0x11f503dd3p paddle::framework::Executor::Run(paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool) + 163
8          0x11f46a837p void pybind11::cpp_function::initialize<paddle::pybind::pybind11_init()::$_64, void, paddle::framework::Executor&, paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool, pybind11::name, pybind11::is_method, pybind11::sibling>(paddle::pybind::pybind11_init()::$_64&&, void (*)(paddle::framework::Executor&, paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool), pybind11::name const&, pybind11::is_method const&, pybind11::sibling const&)::'lambda'(pybind11::detail::function_call&)::__invoke(pybind11::detail::function_call&) + 135
9          0x11f4413aap pybind11::cpp_function::dispatcher(_object*, _object*, _object*) + 5786
10         0x10f4b559fp PyCFunction_Call + 127
11         0x10f5807e7p PyEval_EvalFrameEx + 33207
12         0x10f576fafp _PyEval_EvalCodeWithName + 335
13         0x10f57d2a7p PyEval_EvalFrameEx + 19575
14         0x10f576fafp _PyEval_EvalCodeWithName + 335
15         0x10f57d2a7p PyEval_EvalFrameEx + 19575
16         0x10f57cfb8p PyEval_EvalFrameEx + 18824
17         0x10f576fafp _PyEval_EvalCodeWithName + 335
18         0x10f57d2a7p PyEval_EvalFrameEx + 19575
19         0x10f576fafp _PyEval_EvalCodeWithName + 335
20         0x10f5713b5p builtin_exec + 341
21         0x10f4b555ep PyCFunction_Call + 62
22         0x10f57cec7p PyEval_EvalFrameEx + 18583
23         0x10f576fafp _PyEval_EvalCodeWithName + 335
24         0x10f57d2a7p PyEval_EvalFrameEx + 19575
25         0x10f576fafp _PyEval_EvalCodeWithName + 335
26         0x10f57d2a7p PyEval_EvalFrameEx + 19575
27         0x10f576fafp _PyEval_EvalCodeWithName + 335
28         0x10f57d2a7p PyEval_EvalFrameEx + 19575
29         0x10f576fafp _PyEval_EvalCodeWithName + 335
30         0x10f4826aap function_call + 106
31         0x10f43eb35p PyObject_Call + 69
32         0x10f57dc9bp PyEval_EvalFrameEx + 22123
33         0x10f576fafp _PyEval_EvalCodeWithName + 335
34         0x10f57d2a7p PyEval_EvalFrameEx + 19575
35         0x10f576fafp _PyEval_EvalCodeWithName + 335
36         0x10f57d2a7p PyEval_EvalFrameEx + 19575
37         0x10f57cfb8p PyEval_EvalFrameEx + 18824
38         0x10f57cfb8p PyEval_EvalFrameEx + 18824
39         0x10f576fafp _PyEval_EvalCodeWithName + 335
40         0x10f4826aap function_call + 106
41         0x10f43eb35p PyObject_Call + 69
42         0x10f57dc9bp PyEval_EvalFrameEx + 22123
43         0x10f576fafp _PyEval_EvalCodeWithName + 335
44         0x10f4826aap function_call + 106
45         0x10f43eb35p PyObject_Call + 69
46         0x10f57dc9bp PyEval_EvalFrameEx + 22123
47         0x10f576fafp _PyEval_EvalCodeWithName + 335
48         0x10f57d2a7p PyEval_EvalFrameEx + 19575
49         0x10f57cfb8p PyEval_EvalFrameEx + 18824
50         0x10f576fafp _PyEval_EvalCodeWithName + 335
51         0x10f4826aap function_call + 106
52         0x10f43eb35p PyObject_Call + 69
53         0x10f57dc9bp PyEval_EvalFrameEx + 22123
54         0x10f576fafp _PyEval_EvalCodeWithName + 335
55         0x10f57d2a7p PyEval_EvalFrameEx + 19575
56         0x10f576fafp _PyEval_EvalCodeWithName + 335
57         0x10f4826aap function_call + 106
58         0x10f43eb35p PyObject_Call + 69
59         0x10f57dc9bp PyEval_EvalFrameEx + 22123
60         0x10f57cfb8p PyEval_EvalFrameEx + 18824
61         0x10f57cfb8p PyEval_EvalFrameEx + 18824
62         0x10f57cfb8p PyEval_EvalFrameEx + 18824
63         0x10f57cfb8p PyEval_EvalFrameEx + 18824
64         0x10f57cfb8p PyEval_EvalFrameEx + 18824
65         0x10f576fafp _PyEval_EvalCodeWithName + 335
66         0x10f57d2a7p PyEval_EvalFrameEx + 19575
67         0x10f576fafp _PyEval_EvalCodeWithName + 335
68         0x10f5713b5p builtin_exec + 341
69         0x10f4b555ep PyCFunction_Call + 62
70         0x10f57cec7p PyEval_EvalFrameEx + 18583
71         0x10f576fafp _PyEval_EvalCodeWithName + 335
72         0x10f57d2a7p PyEval_EvalFrameEx + 19575
73         0x10f576fafp _PyEval_EvalCodeWithName + 335
74         0x10f4826aap function_call + 106
75         0x10f43eb35p PyObject_Call + 69
76         0x10f5ee906p RunModule + 182
77         0x10f5edb03p Py_Main + 2979
78         0x10f42f861p main + 497
79      0x7fff5dffe015p start + 1
80                 0x5p

  • 问题复现:
def encoder(is_sparse):
    src_word_id = pd.data(
     name="src_word_id", shape=[1], dtype='int32', lod_level=1)
    src_embedding = pd.embedding(
     input=src_word_id,
     size=[dict_size, word_dim],
     dtype='float32',
     is_sparse=is_sparse,
     param_attr=fluid.ParamAttr(name='vemb'))

    fc1 = pd.fc(input=src_embedding, size=hidden_dim * 4, act='tanh')
    lstm_hidden0, lstm_0 = pd.dynamic_lstm(input=fc1, size=hidden_dim * 4)
    encoder_out = pd.sequence_last_step(input=lstm_hidden0)
    return encoder_out
  • 问题分析:
    该问题很有可能是paddle.fluid.layers.data定义的输入类型不正确,Fluid中需要注意的是对于float而言,float32是主要实数类型,而对int而言,int64是主要标签类型。在使用时,最好对应上。

  • 问题解决:

修改成正确的数据类型。

def encoder(is_sparse):
    src_word_id = pd.data(
     name="src_word_id", shape=[1], dtype='int64', lod_level=1)
    src_embedding = pd.embedding(
     input=src_word_id,
     size=[dict_size, word_dim],
     dtype='float32',
     is_sparse=is_sparse,
     param_attr=fluid.ParamAttr(name='vemb'))

    fc1 = pd.fc(input=src_embedding, size=hidden_dim * 4, act='tanh')
    lstm_hidden0, lstm_0 = pd.dynamic_lstm(input=fc1, size=hidden_dim * 4)
    encoder_out = pd.sequence_last_step(input=lstm_hidden0)
    return encoder_out

猜你喜欢

转载自blog.csdn.net/PaddlePaddle/article/details/88224634