Paddle 对tensor进行切片,当输入为超长shape的tensor时,输出被截断

xfyts7mz  于 2022-10-20  发布在  其他
关注(0)|答案(4)|浏览(257)

反馈一个bug
y=x[1:]
如果x的维度大于9999999,y的长度最多只有9999999

复现代码

import paddle
import paddle.fluid as fluid
import numpy as np

fluid.default_startup_program().random_seed = 1000
fluid.default_main_program().random_seed = 1000
import random
random.seed(0)
np.random.seed(0)

data = np.random.random((20000000)).astype(np.float32)
x = fluid.layers.data(name="x", shape=[20000000], dtype='float64')
y = x[1:]

place = fluid.CUDAPlace(0)
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())

outs = exe.run(feed={'x':data},
               fetch_list=[y.name])

print(outs[0].shape)
k75qkfdt

k75qkfdt1#

看起来应该是_pySliceTensor的问题,请 @lanxianghit 安排下相关同学跟进?

gk7wooem

gk7wooem2#

暂时先assign @Thunderbrook 跟进

7d7tgy0s

7d7tgy0s3#

slice op需显式调用

ffvjumwh

ffvjumwh4#

slice op需显式调用

显示调用可能需要调用shape op,速度更慢,也不方便使用。例如
length = fluid.layers.shape(x)
y = fluid.layers.slice(x, axes=[0], starts=[1], ends=[length])

最好可以用 y=x[1:] 这种用法

相关问题