学而不思则罔,从今天开始做笔记(2022年7月10号)
训练 y = x*w +b 的代码
一、数据
x_data = torch.Tensor([[1.0],[2.0],[3.0]]) #三个样本数据 1,2,3
y_data = torch.Tensor([[2.0],[4.0],[6.0]]) #三个目标数据 2,4,6
[[1.0],[2.0],[3.0]代表三个样本数据,每个样本数据一个值。不同于[1,2,3]。注意区分
二、模型
class LinearModel(nn.Module):
def __init__(self):
super(LinearModel,self).__init__()
self.linear = nn.Linear(1,1) #(1,1)代表输入输出的维度
def forward(self,x):
y_pred = self.linear(x)
return y_pred
model = LinearModel() #模型初始化
linear(in_features,out_features) #输入数据维度,输出数据维度
三、定义损失函数与优化器
criterion = nn.MSELoss(size_average=False) #只求损失函数之和不求平均
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
四、训练
for epoch in range(100): #训练100次
#print('weight.item()',model.linear.weight.item())
#print('bias.item()', model.linear.bias.item())
#系统随机给一个权重,与偏置,打印一下看看
#weight.item() 0.31775128841400146
#bias.item() 0.3106563091278076
y_pred = model(x_data)
#print('y_pred',y_pred) #计算w*x+b
#y_pred: tensor([[0.6284],
[0.9462],
[1.2639]], grad_fn=<AddmmBackward0>)
loss = criterion(y_pred,y_data)
print('epoch:',epoch,loss.item())
#epoch: 0 33.63775634765625
optimizer.zero_grad()
loss.backward()
optimizer.step()
print('w:',model.linear.weight.item())
print('b:',model.linear.bias.item())
五、预测
x_test = torch.Tensor([4.0])
y_test = model(x_test)
print('y_pred:',y_test.data)