在文档中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
5条答案
按热度按时间gz5pxeao1#
形状的数据类型是int32 , 应该指的是[3,100,100] 里面的3,100是int32
nbysray52#
对的,我指的即是 result = fluid.layers.shape(inputs)
返回的result的dtype为float32型(在inputs的dtype为float32的前提下)
ltqd579y3#
我这边在做的一件事是将tensorflow的模型转换为paddle模型,发现tensorflow的shape得到的结果为int32型,而paddle得到的则为float32型,导致后面使用shape结果与另外的tensor进行concat时提示出错。
目前我这边的解决方法是再调用一个fluid.layers.cast(result, dtype='int32')
oknwwptz4#
感谢反馈。这个应该是python API里的一个bug: https://github.com/PaddlePaddle/Paddle/blame/develop/python/paddle/fluid/layers/nn.py#L8353
我们会尽快修复。
pxq42qpu5#
更新一下,tensorflow里面是默认返回int32,实际上提供了参数,供调用时指定返回的类型,见如下api定义