在pytorch中我们使用Tensor作为基本的储存单元
整个流程如下
一、准备好数据集
二、设计模型
三、构造损失函数和优化器
四、写相应的训练循环
import torch
import torch.nn
class LinearModel(torch.nn.Module):#module会帮助自动完成反馈的计算
def __init__(self):
super(LinearModel,self).__init__()#super调用父类的self
self.linear=torch.nn.Linear(1,1)#(1,1)表示x和y都只有一个维度
def forward(self,x) :#进行前馈的计算
y_pred=self.linear(x)#实现了可调用的对象
return y_pred
model=LinearModel()
torch.nn.linear(in_features,out_features,bias=True)
进行y=Ax+b的操作
in_features:输入的样本的size
out_features:输出样本的size
bias为布尔类型的参数——决定你是否要有偏移量
此时的 w、y和x都是tensor
每行代表一个样本,每列代表每个样本的特征
构造损失函数和优化器
criterion=torch.nn.MSELoss(reduction='sum')#pytorch自带的损失函数计算器
#优化器
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)#lr为学习率
#当然还有其他的优化器,看大家的选择
model里面没有定义相应的权重,只有一个linear成员。linear成员有两个权重
parameters会检查model里面的所有成员,若成员里面有相应的权重,则全部加到训练的参数结果上
最后来看看训练过程
for epoch in range(100):
y_pred=model(x_data)
loss=criterion(y_pred,y_data)
print(epoch,loss.item())
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)
完整代码如下
import torch
import torch.nn
x_data=torch.Tensor([[1.0],[2.0],[3.0]])
y_data=torch.Tensor([[2.0],[4.0],[6.0]])
class LinearModel(torch.nn.Module):#module会帮助自动完成反馈的计算
def __init__(self):
super(LinearModel,self).__init__()#super调用父类的self
self.linear=torch.nn.Linear(1,1)#(1,1)表示x和y都只有一个维度
def forward(self,x) :#进行前馈的计算
y_pred=self.linear(x)#实现了可调用的对象
return y_pred
model=LinearModel()
criterion=torch.nn.MSELoss(reduction='sum')#pytorch自带的损失函数计算器
#优化器
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)#lr为学习率
#当然还有其他的优化器,看大家的选择
for epoch in range(1000):
y_pred=model(x_data)
loss=criterion(y_pred,y_data)
print(epoch,loss.item())
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)