Python 浮动对象不可编辑 让我们考虑下面的代码 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) for i in range(len(weights)):

Python 浮动对象不可编辑 让我们考虑下面的代码 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) for i in range(len(weights)):,python,Python,当我运行此代码时,它显示以下错误 TypeError: 'float' object is not iterable 此错误发生在下一行 ---> 20 wts_tmp[-(i+1)] += 0.0001 我并没有理解这个错误,因为我使用了以下代码 from google.colab import drive drive.mount('/content/drive') import numpy as np from copy import deepcopy x =[[1]

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

TypeError: 'float' object is not iterable
此错误发生在下一行

---> 20        wts_tmp[-(i+1)] += 0.0001
我并没有理解这个错误,因为我使用了以下代码

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)
for i in range(len(weights)):

因为当我搜索这个错误时,用户说使用范围命令,我使用了,我也按部分检查,索引工作正常,那么错误的来源是什么呢?谢谢我找到了下面的解决方案

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.]]
#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][0] += 0.0001
       loss = feed_forward(inputs, outputs, wts_tmp)
       delta_loss = np.sum(org_loss - loss)/(0.0001*len(inputs))
       wts_tmp2[i][0]+= delta_loss*0.01 
       wts_tmp = deepcopy(weights)
    weights = deepcopy(wts_tmp2)
  return wts_tmp2
weigths_new =update_weights(x,y,w,10000)
print(weigths_new)
它给了我以下的答案
[[-0.000999999090816253],[5.0004499999979719]

您会收到一个打字错误,因为此时
i=0
,所以
-(i+1)=-1
,您的列表
wts_tmp=[[1.477867]],[0.0]
,所以
wts_tmp[-1]
是列表
[0.0]
,当您尝试执行
,python实际上使用了
list
类中的inplace add特殊方法
\uuu iadd\uuu
,像这样传递float
0.0001
。\uuu iadd\uuuu(0.0001)
,然后它假设您正在添加两个iterable,但
0.0001
不是,因此,您得到的错误
TypeError:“float”对象是不可编辑的

注意:
上面的答案是在@deceze comment之后编辑的,以反映这里使用的主要机制是
\uuuu iadd\uuu
,而不是
operator.iadd()
operator.iadd([0.0],0.0001)
相当于
[0.0]+=0.0001
,最终从
list
类调用
\uu iadd\uuu
,因此
operator.iadd([0.0],0.0001)
的结果是相同的:
类型错误:“float”对象是不可移植的
。您正在尝试向它添加一个浮点数。
wts\u tmp
是一个dict吗?不,是list,我尝试添加额外的括号,但仍然不起作用,为什么括号中有一个
-
,我想访问列表的第一个和最后一个元素,可能我认为这更像是
[0.0]。\uuuu iadd\uuuuu(0.0001)
操作符
模块不是这里的主要机制…但是,是的,通常你的解释是正确的。@deceze感谢你的更正。我更新了我的答案,将
\uuuu iadd\uuuuuuu
作为主要机制,见上文。更挑剔的是,它类似于
类型([0.0])。\uuu iadd\uuuuu([0.0],0.0001)
,但你明白了…