gpt4 book ai didi

python - float 对象不可迭代

转载 作者:行者123 更新时间:2023-12-01 06:30:50 27 4
gpt4 key购买 nike

让我们考虑以下代码

from google.colab import drive
drive.mount('/content/drive')
import numpy as np
from copy import deepcopy
x =[[1],[2],[3],[4]]
y = [[2],[4],[6],[8]]
w = [[[1.477867]], [0.]]
print(len(w))
#define y =k*x+b
def feed_forward(inputs,outputs, weights):
out =np.dot(inputs,weights[0])+weights[1]
squared_error =(np.square(out-outputs))
return squared_error
def update_weights(inputs,outputs,weights,epochs):
for epoch in range(epochs):
org_loss =feed_forward(inputs,outputs,weights)
wts_tmp = deepcopy(weights)
wts_tmp2 = deepcopy(weights)
for i in range(len(weights)):
wts_tmp[-(i+1)] += 0.0001
loss = feed_forward(inputs, outputs, wts_tmp)
delta_loss = np.sum(org_loss - loss)/(0.0001*len(inputs))
wts_tmp2[-(i+1)]+= delta_loss*0.01
wts_tmp = deepcopy(weights)
weights = deepcopy(wts_tmp2)
return wts_tmp2
weigths_new =update_weights(x,y,w,1000)

当我运行此代码时,它显示以下错误

TypeError: 'float' object is not iterable

此错误发生在以下行

---> 20        wts_tmp[-(i+1)] += 0.0001

我没有意识到这个错误,因为我使用了以下代码

for i in range(len(weights)):

因为当我搜索这个错误时,用户说使用范围命令,我使用了并且我也按部分和索引进行了检查,工作正常,那么错误的来源是什么?谢谢

最佳答案

您会收到 TypeError,因为此时 i = 0,因此 -(i + 1) = -1,您的列表 wts_tmp = [[[ 1.477867]], [0.0]],因此 wts_tmp[-1] 是列表 [0.0] 并且当您尝试执行 wts_tmp[ -1] += 0.0001,python实际上使用了list类中的就地添加特殊方法__iadd__,传递 float 0.0001,例如这个 [0.0].__iadd__(0.0001) ,那么它假设您正在添加两个可迭代对象,但 0.0001 不是,因此您会收到错误 TypeError: 'float ' 对象不可迭代

注意:上面的答案是在@deceze评论后编辑的,以反射(reflect)__iadd__是这里使用的主要机制,而不是operator.iadd()operator.iadd([0.0], 0.0001) 相当于 [0.0] += 0.0001 最终从 调用 __iadd__ list 类,因此 operator.iadd([0.0], 0.0001) 的结果是相同的:TypeError: 'float' object is not iterable

关于python - float 对象不可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59921760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com