Paddle fluid.layer.shape 返回的数据类型问题

von4xj4u  于 2021-11-30  发布在  Java
关注(0)|答案(5)|浏览(260)

在文档中http://www.paddlepaddle.org/documentation/docs/zh/1.2/api_cn/layers_cn.html#permalink-149-shape 提到shape返回的是是int32类型的形状,但测试发现跟输入的数据类型一致(测试了int32的输入和float32的输入)。

查阅代码中看到输出的定义确实是与输入的数据类型一样
def shape(input):
"""
${comment}

Args:
    input (Variable): ${input_comment}

Returns:
    out (Variable): ${out_comment}

"""

helper = LayerHelper('shape',**locals())
out = helper.create_variable_for_type_inference(
    dtype=helper.input_dtype('input'))
helper.append_op(
    type='shape', inputs={'Input': input}, outputs={'Out': out})

return out
gz5pxeao

gz5pxeao1#

形状的数据类型是int32 , 应该指的是[3,100,100] 里面的3,100是int32

nbysray5

nbysray52#

对的,我指的即是 result = fluid.layers.shape(inputs)
返回的result的dtype为float32型(在inputs的dtype为float32的前提下)

ltqd579y

ltqd579y3#

我这边在做的一件事是将tensorflow的模型转换为paddle模型,发现tensorflow的shape得到的结果为int32型,而paddle得到的则为float32型,导致后面使用shape结果与另外的tensor进行concat时提示出错。
目前我这边的解决方法是再调用一个fluid.layers.cast(result, dtype='int32')

oknwwptz

oknwwptz4#

感谢反馈。这个应该是python API里的一个bug: https://github.com/PaddlePaddle/Paddle/blame/develop/python/paddle/fluid/layers/nn.py#L8353

我们会尽快修复。

pxq42qpu

pxq42qpu5#

更新一下,tensorflow里面是默认返回int32,实际上提供了参数,供调用时指定返回的类型,见如下api定义

tf.shape(
    input,
    name=None,
    out_type=tf.int32
)

相关问题