-
问题描述:我使用Fluid版的PaddlePaddle编写了一段简单的加法计算代码,此时想要获得加法计算的结果,不需要张量本身的信息,但得到
sum() takes 1 positional argument but 2 were given
报错 -
报错输出:
Traceback (most recent call last):
File "/Users/jizhi/Desktop/Paddle/Paddlecode/test.py", line 7, in <module>
c = fluid.layers.sum(a,b)
TypeError: sum() takes 1 positional argument but 2 were given
- 问题复现:
# coding=utf-8
import paddle.fluid as fluid
# 创建两常量
a = fluid.layers.fill_constant(shape=[2, 3], dtype="float32", value=1.0)
b = fluid.layers.fill_constant(shape=[2, 3], dtype="float32", value=1.0)
# 加法计算
c = fluid.layers.sum(a, b)
# 转换为打印信息
c_ = fluid.layers.Print(c)
print(c_)
- 问题分析:
PaddlePaddle是执行与模型设计分离的,即使用python编写的只是定义了模型的结构,但并不会真正的运行,如果要获得对应的值,要先定义执行器,然后将最后要获得的结果传入执行器,让执行器依旧模型的结构执行。
而这里的报错原因是因为fluid.layers.sum()方法使用错误,这种风格的写法是TensorFlow的写法,而PaddlePaddle的加法操作的写法与之不同。
- 解决方法:
修改fluid.layers.sum()方法的使用方式,并添加相应的执行器exe,运行执行器则可以获得结果。
import paddle.fluid as fluid
a = fluid.layers.fill_constant(shape=[2,3], dtype='float32', value=1.0)
b = fluid.layers.fill_constant(shape=[2,3], dtype='float32', value=1.0)
c = fluid.layers.sum(x=[a,b])
exe = fluid.Executor(fluid.CPUPlace())
exe.run(fluid.default_startup_program())
out = exe.run(fluid.default_main_program(), fetch_list=[c])
print(out)
更多细节可以参考PaddlePaddle API文档:http://www.paddlepaddle.org/documentation/api/en/1.1/layers.html