动手学深度学习第三章线性回归的简介实现:
import torch
from torch import nn
from d2l import torch as d2l
from torch.utils import data
# 生成数据集
true_w = torch.tensor([2,-3.4])
true_b = 4.2
features,labels = d2l.synthetic_data(true_w,true_b,1000)
# 读取数据集
def load_array(data_array,batch_size,is_train=True):
dataset = data.TensorDataset(*data_array)
return data.DataLoader(dataset,batch_size,shuffle=True)
batch_size = 10
data_iter = load_array((features,labels),batch_size)
# print(next(iter(data_iter)))
# 定义模型
net = nn.Sequential(nn.Linear(2,1))
net[0].weight.data.normal_(0,0.01)
net[0].bias.data.fill_(0)
# 定义损失函数
loss = nn.MSELoss()
# 定义优化算法
trainer = torch.optim.SGD(net.parameters(),lr = 0.03)
# 训练
num_epochs = 3
for epoch in range(num_epochs):
for X,y in data_iter:
l = loss(net(X),y)
trainer.zero_grad
l.backward()
trainer.step()
l = loss(net(features),labels)
print(f'epoch {epoch + 1},loss {l:f}')
出来的结果:
epoch 1,loss 36.045746
epoch 2,loss 106.395393
epoch 3,loss 152.102753
为什么我的损失越来越大了,而且我照着动手学深度学习书上代码一样敲得,为什么别人第一个epoch就是0.000291,我的这么大呢?