首页 Paddle框架 帖子详情
加载resnet50 出现Please convert data to LoDTensor directly before feeding the data
收藏
快速回复
Paddle框架 问答深度学习 891 2
加载resnet50 出现Please convert data to LoDTensor directly before feeding the data
收藏
快速回复
Paddle框架 问答深度学习 891 2
input_image = fluid.layers.data(                                   
        name="input_image",
        shape=[-1, 3, 224, 224],
        dtype="float32", 
        lod_level=2) 

需要输入的数据都是规整的,没有变长的情况
完整的错误信息为:

paddle resnet RuntimeError: Some of your feed data hold LoD information. They can not be completely cast from a list of Python ndarray to LoDTensor. Please convert data to LoDTensor directly before feeding the data.
0
收藏
回复
全部评论(2)
时间顺序
AIStudio791260
#3 回复于2019-10
def test_load_resnet():   
    input_image = fluid.layers.data(
        name="input_image",
        shape=[3, 224, 224],
        dtype="float32", 
        lod_level=2)
    input_label = fluid.layers.data(
        name="label",
        shape=[1],
        dtype="int64",
        lod_level=0)

    resnet50 = ResNet(layers=50)   
    out = resnet50.net(input=input_image, class_dim=1000)

    place = fluid.CPUPlace()
    exe = fluid.Executor(place)
    exe.run(fluid.default_startup_program()) # startup program
   
    fluid.io.load_persistables(
            executor=exe, 
            dirname="/home/work/jingchunzhen/pretrained_model/ResNet50_pretrained",
            main_program=fluid.default_main_program())
  
    data_reader = RelevanceReader()
    for _, _, _, _, batch_image, _ in data_reader.batch_generator(
            file_name="/home/work/lixiaokang04/image_rele/local/train_set",
            batch_size=128):       
        resnet_out = exe.run(
                program=fluid.default_main_program(),
                fetch_list=[out.name],
                feed={"input_image": batch_image},
                return_numpy=True)
        print(resnet_out)
        print(np.shape(resnet_out))
        break          
  • 加载数据的代码如下
def parse_image(self, image):
        img = Image.open(self.image_dir + image)
        #img = img.convert("RGB")
        img = img.resize((224, 224), Image.ANTIALIAS)
        img = np.array(img)
        img = img.astype("float32")
        img = np.transpose(img, (2, 0, 1))
        img = img * 1.0 / 225
        return img
  • 完整的错误信息如下
Traceback (most recent call last):
  File "test_model.py", line 263, in <module>
    test_load_resnet()
  File "test_model.py", line 106, in test_load_resnet
    return_numpy=True)
  File "/ssd1/share/torch_python/lib/python2.7/site-packages/paddle/fluid/executor.py", line 650, in run
    use_program_cache=use_program_cache)
  File "/ssd1/share/torch_python/lib/python2.7/site-packages/paddle/fluid/executor.py", line 746, in _run
    self._feed_data(program, feed, feed_var_name, scope)
  File "/ssd1/share/torch_python/lib/python2.7/site-packages/paddle/fluid/executor.py", line 448, in _feed_data
    cur_feed = _as_lodtensor(cur_feed, self.place)
  File "/ssd1/share/torch_python/lib/python2.7/site-packages/paddle/fluid/executor.py", line 285, in _as_lodtensor
    ")
RuntimeError: Some of your feed data hold LoD information.                 They can not be completely cast from a list of Python                 ndarray to LoDTensor. Please convert data to LoDTensor                 directly before feeding the data.         
0
回复
AIStudio791260
#4 回复于2019-10

传入的数据需要整体是一个np.ndarray或者一个list 该问题已解决

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户