You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Numpy实现Adam优化器时遇元组索引错误求助

解决tuple indices must be integer or slices, not str报错问题

这个报错的核心逻辑很清晰:你在尝试用字符串(比如"W1")去索引一个元组,但元组只能用整数或切片来访问元素,所以触发了这个错误。结合你提到的“打乱数据集后出现问题”,大概率是你的parameters字典在某个环节被意外转换成了元组,或者传递的时候传错了对象。

下面给你几个具体的排查方向:

  • 先确认parameters的类型:在调用L_lay_forw(minibatch_X, parameters)这行代码之前,加两行调试代码:

    print("parameters类型:", type(parameters))
    print("parameters内容:", parameters)
    

    如果输出显示parameters是tuple类型,那问题就找到了——你需要回溯代码,看哪里把字典转成了元组。

  • 检查数据集打乱的代码:既然是打乱数据集后才出问题,看看你打乱数据的逻辑里,有没有不小心把parameters和训练数据打包成了元组?比如类似这样的错误:

    # 错误:把参数和数据混在一起转成了元组
    shuffled_data = tuple(zip(X, Y, parameters))
    

    这种操作会把parameters塞进元组里,后续如果误把这个元组当成参数传递,就会触发索引错误。

  • 检查参数更新的逻辑(Adam优化器部分):你自己实现Adam的时候,更新参数的环节是不是写错了?比如本来应该更新字典里的元素,结果不小心把参数转成了元组返回:

    # 错误写法:返回元组,覆盖了原本的字典
    parameters = (updated_W1, updated_b1, updated_W2, updated_b2)
    # 正确写法:保持字典结构更新
    parameters["W1"] = updated_W1
    parameters["b1"] = updated_b1
    parameters["W2"] = updated_W2
    parameters["b2"] = updated_b2
    
  • 检查linear_act_forward的参数传递:确认调用这个函数的时候,第二个参数确实是你的parameters字典,有没有误传成其他返回元组的变量?比如是不是把某个函数的返回值(比如model.train()返回了元组)当成参数传进去了?

先从打印parameters的类型开始排查,这是最快定位问题的方法。

内容的提问来源于stack exchange,提问作者Sim1bet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:06:30