python
import torch
x_data = torch.Tensor([[1],[2],[3]])
y_data = torch.Tensor([[2],[4],[6]])
class LinearModel(torch.nn.Module):
def __init__(self):
super(LinearModel,self).__init__()
self.linear = torch.nn.Linear(1,1)
def forward(self,x):
y_pred = self.linear(x)
return y_pred
model = LinearModel()
criterion = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
losses = []
for epoch in range(1000):
y_pred = model(x_data)
loss = criterion(y_pred,y_data)
print(epoch,loss)
optimizer.zero_grad()
loss.backward()
optimizer.step()
losses.append(loss.item())
print('w=',model.linear.weight.item())
print('b=',model.linear.bias.item())
x_test = torch.Tensor([[4]])
y_test = model(x_test)
print('y_pred=',y_test.data)
导入PyTorch库,这是使用PyTorch进行深度学习所必需的。
python
x_data = torch.Tensor([[1],[2],[3]])
创建一个包含三个样本的二维张量**x_data
**,每个样本是一个一维张量,代表模型的输入特征。
python
y_data = torch.Tensor([[2],[4],[6]])
创建一个包含三个样本的二维张量**y_data
**,每个样本是一个一维张量,代表模型的输出目标值。
python
class LinearModel(torch.nn.Module):
定义一个名为**LinearModel
** 的类,它继承自torch.nn.Module
,是构建任何神经网络模型的基础。
python
def __init__(self):
super(LinearModel,self).__init__()
self.linear = torch.nn.Linear(1,1)
在**LinearModel
** 类的构造函数中,首先调用父类的构造函数。然后创建一个线性层**self.linear
,** 它是一个一元线性模型,输入和输出特征的数量都是1 。输入的特征维度是1,输出特征维度也是1,这样就可让模型知道W和b的维度是多少。
python
def forward(self,x):
y_pred = self.linear(x)
return y_pred
定义模型的前向传播函数。它接受输入x
,通过线性层self.linear
进行计算,得到预测输出y_pred
,然后返回这个预测值。这个函数是必须存在的。
python
model = LinearModel()
实例化**LinearModel
类**,创建模型对象。
python
criterion = torch.nn.MSELoss(size_average=False)
创建一个均方误差损失函数**criterion
,size_average=False
**参数(即将被弃用)指定损失函数在计算时应累加所有样本的损失。size_average=False代表着损失,不用求均值。
python
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
创建一个随机梯度下降**(SGD** )优化器**optimizer
**,用于更新模型的参数。学习率设置为0.01。
python
losses = []
初始化一个空列表**losses
**,用于存储训练过程中的每一轮损失值。
python
for epoch in range(1000):
开始一个训练循环,总共训练1000个epoch(轮次)。
python
y_pred = model(x_data)
在每个epoch中,计算模型对输入数据x_data
的预测输出y_pred
。
python
loss = criterion(y_pred,y_data)
计算预测输出y_pred
和目标值y_data
之间的损失。
python
print(epoch,loss)
打印当前epoch和对应的损失值。
python
optimizer.zero_grad()
在每次参数更新前,清空过往梯度。
python
loss.backward()
对损失函数进行反向传播,计算模型参数的梯度。
python
optimizer.step()
根据计算得到的梯度,使用优化器更新模型的参数。
python
losses.append(loss.item())
将当前epoch的损失值添加到losses
列表中。
python
print('w=',model.linear.weight.item())
打印模型中线性层的权重w
。
python
print('b=',model.linear.bias.item())
打印模型中线性层的偏置b
。
python
x_test = torch.Tensor([[4]])
创建一个新的输入张量x_test
,用于测试模型。
python
y_test = model(x_test)
使用训练好的模型对x_test
进行预测,得到y_test
。
python
print('y_pred=',y_test.data)
打印测试数据的预测输出y_pred
。
这个代码实现了一个简单的线性回归模型,并通过梯度下降方法训练模型参数。最后,它还打印了训练后的权重、偏置以及对新数据的预测结果。