PaddlePaddle出现问题:'map' object is not subscriptable

本文解决在使用PaddlePaddle构建机器翻译模型时遇到的TypeError错误,详细分析了Python2与Python3中map()函数的差异,并提供了解决方案。
部署运行你感兴趣的模型镜像
  • 问题描述:我按照PaddlePaddle官方文档编写机器翻译模型,出现这个错误,对照了文档中的代码,也没有编写错误。

  • 报错信息:

Original sentence:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-e241afef7936> in <module>()
     20 
     21     print("Original sentence:")
---> 22     print(" ".join([src_dict[w] for w in feed_data[0][0][1:-1]]))
     23 
     24     print("Translated score and sentence:")

TypeError: 'map' object is not subscriptable
  • 问题复现:
exe = Executor(place)
exe.run(framework.default_startup_program())

for data in test_data():
    feed_data = map(lambda x: [x[0]], data)
    feed_dict = feeder.feed(feed_data)
    feed_dict['init_ids'] = init_ids
    feed_dict['init_scores'] = init_scores

    results = exe.run(
        framework.default_main_program(),
        feed=feed_dict,
        fetch_list=[translation_ids, translation_scores],
        return_numpy=False)
  • 问题分析:
    在Python3中,map返回的会是一个map类型的可迭代对象,该对象不同直接通过下标获取,在Python2中是没有问题的,出现该问题,只需要将代码修改成python3兼容的模式则可

  • 问题解决:

如果想通过下标获取map对象,可以先将map对象转为list对象,这样就可以直接通过下标获取了

exe = Executor(place)
exe.run(framework.default_startup_program())

for data in test_data():
    feed_data = list(map(lambda x: [x[0]], data))
    feed_dict = feeder.feed(feed_data)
    feed_dict['init_ids'] = init_ids
    feed_dict['init_scores'] = init_scores

    results = exe.run(
        framework.default_main_program(),
        feed=feed_dict,
        fetch_list=[translation_ids, translation_scores],
        return_numpy=False)
  • 问题拓展:
    map()方法是python内置方法,python2与python3中map()方法是有不同的,python3中考虑到一切性将数据全部返回会比较消耗内存,就就修改成生成对象的形式,即取的时候才会获得,而且只生效一次。

您可能感兴趣的与本文相关的镜像

PaddlePaddle-v3.3

PaddlePaddle-v3.3

PaddlePaddle

PaddlePaddle是由百度自主研发的深度学习平台,自 2016 年开源以来已广泛应用于工业界。作为一个全面的深度学习生态系统,它提供了核心框架、模型库、开发工具包等完整解决方案。目前已服务超过 2185 万开发者,67 万企业,产生了 110 万个模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值