PaddlePaddle训练时出现错误 y_dims.size:1 = y_num_col_dims:1

在使用PaddlePaddle进行图像分类训练时,未初始化模型参数直接执行训练会导致y_dims.size():1<=y_num_col_dims:1错误。解决方法是在定义执行器后,先运行fluid.default_startup_program()初始化参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 关键字:初试化执行器

  • 问题描述:在定义执行器之后,就直接使用执行器进行训练,就出现错误,提示错误 y_dims.size():1 <= y_num_col_dims:1。

  • 报错信息:

/usr/local/lib/python3.5/dist-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: Enforce failed. Expected y_dims.size() > y_num_col_dims, but received y_dims.size():1 <= y_num_col_dims:1.
The input tensor Y's rank of MulOp should be larger than y_num_col_dims. at [/paddle/paddle/fluid/operators/mul_op.cc:52]
PaddlePaddle Call Stacks: 
  • 问题复现:编写一个图像分类程序,在定义执行器之后,使用执行器exe执行run函数,就会出现这个问题。错误代码如下:
place = fluid.CPUPlace()
exe = fluid.Executor(place)
for batch_id, data in enumerate(train_reader()):
    train_cost, train_acc = exe.run(program=fluid.default_main_program(),
                                    feed=feeder.feed(data),
                                    fetch_list=[avg_cost, acc])
  • 问题解决:定义执行器之后,因为还没有执行初始化模型参数,所以缺少初始化数据,导致出现这个问题。在定义执行器之后,还执行初始化参数程序exe.run(fluid.default_startup_program()),之后再执行训练程序。正确代码如下:
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())
for batch_id, data in enumerate(train_reader()):
    train_cost, train_acc = exe.run(program=fluid.default_main_program(),
                                    feed=feeder.feed(data),
                                    fetch_list=[avg_cost, acc])
  • 问题分析:在定义网络之后,Fluid内部有大量的参数需要进行初始化才能正常运行,网络也才能正确使用,所以在执行训练之前需要执行exe.run(fluid.default_startup_program())初始化参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值