PaddlePaddle使用MNIST数据训练时出现张量类型错误

  • 关键字:张量数据类型

  • 问题描述:使用卷积神经网络训练MNIST数据集,由于输入数据的数据类型设置为float32,在训练时直接报错,报错信息提示张量类型错误。

  • 报错信息:

/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: Tensor holds the wrong type, it holds f at [/paddle/paddle/fluid/framework/tensor_impl.h:29]
PaddlePaddle Call Stacks: 
  • 问题复现:使用MNIST数据集,使用卷积神经网络进行训练,并定义输入层数据类型设置为float64,即将dtype参数的值设置为float64,如下代码片段:
image = fluid.layers.data(name='image', shape=[1, 28, 28], dtype='float64')
label = fluid.layers.data(name='label', shape=[1], dtype='int64')
  • 问题解决:由于如果数据为float32,而定义的输入层数据类型为float64,导致的数量类型不正确。把输入数据的类型设置为float32,即将dtype参数值设置为float32。如下代码片段:
image = fluid.layers.data(name='image', shape=[1, 28, 28], dtype='float32')
label = fluid.layers.data(name='label', shape=[1], dtype='int64')
  • 问题拓展:PaddlePaddle支持多种数据类型,比如上面使用的float32,这个是主要实数类型,float64是次要实数类型,支持大部分操作。我们使用的标签是int64,这个是主要标签类型,也有次要标签类型int32。也有一些控制流的数据类型bool

  • 问题分析:在使用PaddlePaddle构建神经网络时,一开始编写的只是整体的结构,此时就需要注意整体结构中不同节点的数据类型,如输入的数据类型是否与fluid.layers.data定义的数据类型一致,如果不一致就会出现错误,就像使用三口插头去插二口插座,是不可取的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值