参加《百度顶会论文复现营》其中作业《车牌识别》部分,运行代码出现错误。
定义DNN网络如下:
#定义DNN网络 class MyDNN(fluid.dygraph.Layer): ''' DNN网络 ''' def __init__(self): super(MyDNN,self).__init__() self.hidden1 = Linear(20*20,200,act='relu') self.hidden2 = Linear(200,100,act='relu') self.hidden3 = Linear(100,100,act='relu') self.hidden4 = Linear(100,60,act='softmax') def forward(self,input): # forward 定义执行实际运行时网络的执行逻辑 '''前向计算''' x=fluid.layers.reshape(input,shape=[-1,20*20]) x=self.hidden1(x) x=self.hidden2(x) x=self.hidden3(x) y=self.hidden4(x) return y
训练模型没有修改,代码如下:
with fluid.dygraph.guard(): model=MyDNN() #模型实例化 model.train() #训练模式 opt=fluid.optimizer.SGDOptimizer(learning_rate=train_parameters['learning_strategy']['lr'], parameter_list=model.parameters())#优化器选用SGD随机梯度下降,学习率为0.001. epochs_num=train_parameters['num_epochs'] #迭代次数 for pass_num in range(epochs_num): for batch_id,data in enumerate(train_reader()): images=np.array([x[0].reshape(1,20,20) for x in data],np.float32) labels = np.array([x[1] for x in data]).astype('int64') labels = labels[:, np.newaxis] image=fluid.dygraph.to_variable(images) label=fluid.dygraph.to_variable(labels) predict=model(image) #数据传入model loss=fluid.layers.cross_entropy(predict,label) avg_loss=fluid.layers.mean(loss)#获取loss值 acc=fluid.layers.accuracy(predict,label)#计算精度 if batch_id!=0 and batch_id%50==0: Batch = Batch+50 Batchs.append(Batch) all_train_loss.append(avg_loss.numpy()[0]) all_train_accs.append(acc.numpy()[0]) print("train_pass:{},batch_id:{},train_loss:{},train_acc:{}".format(pass_num,batch_id,avg_loss.numpy(),acc.numpy())) avg_loss.backward() opt.minimize(avg_loss) #优化器对象的minimize方法对参数进行更新 model.clear_gradients() #model.clear_gradients()来重置梯度 fluid.save_dygraph(model.state_dict(),'MyDNN')#保存模型 draw_train_acc(Batchs,all_train_accs) draw_train_loss(Batchs,all_train_loss)
显示第17行报错,错误信息如下:
---------------------------------------------------------------------------EnforceNotMet Traceback (most recent call last) in 15 predict=model(image) #数据传入model 16 ---> 17 loss=fluid.layers.cross_entropy(predict,label) 18 avg_loss=fluid.layers.mean(loss)#获取loss值 19 /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/layers/loss.py in cross_entropy(input, label, soft_label, ignore_index) 237 """ 238 if not soft_label: --> 239 return cross_entropy2(input, label, ignore_index) 240 241 if in_dygraph_mode(): /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/layers/loss.py in cross_entropy2(input, label, ignore_index) 258 if in_dygraph_mode(): 259 loss, _, _ = core.ops.cross_entropy2(input, label, 'ignore_index', --> 260 ignore_index) 261 return loss 262 EnforceNotMet: -------------------------------------------- C++ Call Stacks (More useful to developers): -------------------------------------------- 0 std::string paddle::platform::GetTraceBackString(char const*&&, char const*, int) 1 paddle::platform::EnforceNotMet::EnforceNotMet(std::__exception_ptr::exception_ptr, char const*, int) 2 paddle::operators::CrossEntropyOpKernel2::Compute(paddle::framework::ExecutionContext const&) const 3 std::_Function_handler, paddle::operators::CrossEntropyOpKernel2 >::operator()(char const*, char const*, int) const::{lambda(paddle::framework::ExecutionContext const&)#1}>::_M_invoke(std::_Any_data const&, paddle::framework::ExecutionContext const&) 4 paddle::imperative::PreparedOp::Run(std::map, std::allocator > >, std::less, std::allocator, std::allocator > > > > > const&, std::map, std::allocator > >, std::less, std::allocator, std::allocator > > > > > const&, std::unordered_map >, std::vector >, std::vector >, bool, std::vector >, paddle::framework::BlockDesc*, long, std::vector >, std::vector >, 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::equal_to, std::allocator >, std::vector >, std::vector >, bool, std::vector >, paddle::framework::BlockDesc*, long, std::vector >, std::vector >, 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::allocator > >, std::less, std::allocator, std::allocator > > > > > const&, std::map, std::allocator > >, std::less, std::allocator, std::allocator > > > > > const&, std::unordered_map >, std::vector >, std::vector >, bool, std::vector >, paddle::framework::BlockDesc*, long, std::vector >, std::vector >, 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::equal_to, std::allocator >, std::vector >, std::vector >, bool, std::vector >, paddle::framework::BlockDesc*, long, std::vector >, std::vector >, 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::Tracer::TraceOp(std::string const&, std::map, std::allocator > >, std::less, std::allocator, std::allocator > > > > > const&, std::map, std::allocator > >, std::less, std::allocator, std::allocator > > > > > const&, std::unordered_map >, std::vector >, std::vector >, bool, std::vector >, paddle::framework::BlockDesc*, long, std::vector >, std::vector >, 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::equal_to, std::allocator >, std::vector >, std::vector >, bool, std::vector >, paddle::framework::BlockDesc*, long, std::vector >, std::vector >, 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_> > > >, paddle::platform::Place const&, bool) 7 paddle::imperative::Tracer::TraceOp(std::string const&, std::map, std::allocator > >, std::less, std::allocator, std::allocator > > > > > const&, std::map, std::allocator > >, std::less, std::allocator, std::allocator > > > > > const&, std::unordered_map >, std::vector >, std::vector >, bool, std::vector >, paddle::framework::BlockDesc*, long, std::vector >, std::vector >, 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::equal_to, std::allocator >, std::vector >, std::vector >, bool, std::vector >, paddle::framework::BlockDesc*, long, std::vector >, std::vector >, 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_> > > >) ---------------------- Error Message Summary: ---------------------- Error: Variable value (label) of OP(fluid.layers.cross_entropy) expected >= 0 and < 60, but got 60. Please check label value. at (/paddle/paddle/fluid/operators/cross_entropy_op.h:173)
请登录后评论
TOP
切换版块
原因如下,飞桨有个默认的文件夹被记入标签中,查看readme.json会发现有个.ipynb_checkpoints文件夹,所以导致标签多了一位
self.hidden4 = Linear(100,65,act='softmax')也会出现此问题,我的解决方法:self.hidden4 = Linear(100,66,act='softmax')
我认为:标签由0开始,到65结束,共计66个标签
试试
self.hidden4 = Linear(100,60,act='softmax')
改成
self.hidden4 = Linear(100,65,act='softmax')