在练习3.12-权重衰减时,运行如下代码报错:
#定义和训练测试
batch_size,num_epochs,lr = 1,100,0.003
net,loss = d2l.linreg,d2l.squared_loss
dataset = torch.utils.data.TensorDataset(train_features,train_labels)
train_iter = torch.utils.data.DataLoader(dataset,batch_size,shuffle=True)
def fit_and_plot(lambd):
w,b = init_params()
train_ls,test_ls = [],[]
for _ in range(num_epochs):
for X,y in train_iter:
#添加了L2范数惩罚项
l = loss(net(X,w,b),y) + lambd * l2_penalty(w)
l = l.sum()
if w.grad is not None:
w.grad.data.zero_()
b.grad.data.zero_()
l.backward()
d2l.sgd([w,b],lr,batch_size)
train_ls.append(loss(net(train_features,w,b),train_labels).mean().item())
test_ls.append(loss(net(test_features,w,b),test_labels).mean().item())
d2l.semilogy(range(1,num_epochs + 1),tr