在学习李沐老师的《动手学深度学习PyTorch版》的从零开始实现Softmax小结时出现此问题。
定义了累加器类Accumulator,及类的对象数组
#累加器的实现过程
class Accumulator:
"""
在‘n’个变量上累加
"""
def __init__(self,n):
self.data=[0.0]*n
def add(self,*args):
self.data=[a+float(b) for a,b in zip(self.data,args)]
def reset(self):
self.data=[0.0]*len(self.data)
def _getitem_(self,idx):
return self.data[idx]
evaluate_accuracy(net,test_iter)
使用:
metric=Accumulator(2) #设置两个累加器,累计正确的预测数和预测总数
with torch.no_grad():
for X,y in data_iter:
metric.add(accuracy(net(X),y),d2l.size(y))
return metric[0]/metric[1]
出现报错:TypeError: ‘Accumulator’ object is not subscriptable
经过修改,原因为在使用对象数组时,不要直接用’对象名.[i]',修改为‘对象名.data[i]’。代码成功运行
修改后的使用:
`metric=Accumulator(2) #设置两个累加器,累计正确的预测数和预测总数
with torch.no_grad():
for X,y in data_iter:
metric.add(accuracy(net(X),y),d2l.size(y))
return metric.data[0]/metric.data[1]`