基于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
相关产品推荐
相关产品推荐

