实现focal loss遇到的运行错误
Created by: rlistengr
环境:百度AI studio 问题:
labels = fluid.layers.data(name='labels', shape=[1], dtype='int64', lod_level=0)
indexs = fluid.layers.data(name='indexs', shape=[1], dtype='int64', lod_level=0)
。。。。
#logits的大小是batch_size * 2
predict = fluid.layers.softmax(input=logits)
softmax = fluid.layers.reshape(logits, [-1])
indexs1 = indexs + labels
prob = fluid.layers.gather(softmax, indexs1)
weight_ones = fluid.layers.ones(shape=[100], dtype="float")
weight1 = weight_ones - prob
weight = fluid.layers.pow(weight1, 2.0)
ce_loss = weight * fluid.layers.log(prob)
现在运行时发生错误:
Traceback (most recent call last):
File "train.py", line 348, in <module>
main(args)
File "train.py", line 223, in main
fetch_list=[loss.name, accuracy.name, num_seqs.name, predict.name, labels.name])
File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/parallel_executor.py", line 303, in run
self.executor.run(fetch_list, fetch_var_name)
paddle.fluid.core.EnforceNotMet: Invoke operator gather error.
Python Callstacks:
File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/framework.py", line 1317, in append_op
attrs=kwargs.get("attrs", None))
File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/layer_helper.py", line 56, in append_op
return self.main_program.current_block().append_op(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/layers/nn.py", line 7165, in gather
outputs={"Out": out})
File "train.py", line 115, in create_model
prob = fluid.layers.gather(softmax, indexs1)
File "train.py", line 174, in main
is_prediction=False)
File "train.py", line 348, in <module>
main(args)
C++ Callstacks:
Tensor holds the wrong type, it holds int64_t at [/paddle/paddle/fluid/framework/tensor_impl.h:29]
PaddlePaddle Call Stacks:
0 0x7f60519881a5p void paddle::platform::EnforceNotMet::Init<char const*>(char const*, char const*, int) + 357
1 0x7f6051988529p paddle::platform::EnforceNotMet::EnforceNotMet(std::__exception_ptr::exception_ptr, char const*, int) + 137
意思是gather操作的下标类型错误,麻烦帮忙看下