PyTorch深度学习实践 pytorch 实现线性回归 y=wx+b

import torch

x=torch.tensor([[1.0],[2.0],[3.0]])
y=torch.tensor([[2.0],[4.0],[6.0]])

class LinearModel(torch.nn.Module):
 def __init__(self):
  super(LinearModel,self).__init__()
  self.linear=torch.nn.Linear(1,1)

 def forward(self,x):
  x=self.linear(x)
  return x

model=LinearModel()
criterion=torch.nn.MSELoss()
# schedular
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)

for epoch in range(100):
 y_pred=model(x)
 loss=criterion(y_pred,y)
 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],[5.0]])
y_test=model(x_test)
print('y_pred=',y_test.data)

总结:

1.模型,自定义网络,forward()重写

2.损失函数,criterion:MSE,CROSSENTROPY...

3.优化器,SGD

4.前向传播,y_pred=model(x),loss=criterion(y_pred,y)

反向求导前梯度清零,optimizer.zero_grad()

5.反向求导,loss.backward()

6.更新参数,optimizer.step()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是使用PyTorch实现简单的线性回归的代码: ```python import torch import matplotlib.pyplot as plt # 准备数据 x = torch.linspace(0, 10, 100) y = 4 * x + 3.5 + torch.randn(100) # 添加随机噪声 # 定义模型 class Model(torch.nn.Module): def __init__(self): super(Model, self).__init__() self.linear = torch.nn.Linear(1, 1) # 输入和输出都是1维 def forward(self, x): return self.linear(x) model = Model() # 定义损失函数和优化器 criterion = torch.nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.1) # 训练模型 num_epochs = 20 for epoch in range(num_epochs): # 前向传播 y_pred = model(x.unsqueeze(1)) # 计算损失 loss = criterion(y_pred.squeeze(), y) # 反向传播 optimizer.zero_grad() loss.backward() optimizer.step() # 打印损失 print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item())) # 绘制图像 plt.scatter(x, y) plt.plot(x, model(x.unsqueeze(1)).detach().numpy().squeeze(), color='r') plt.show() # 输出模型参数 for name, param in model.named_parameters(): if param.requires_grad: print(name, param.data) ``` 在上面的代码中,我们定义了一个`Model`类来表示我们的线性回归模型。该模型包含一个`Linear`层,输入和输出都是1维。我们还定义了均方误差损失函数和随机梯度下降优化器,并进行了训练。最后,我们绘制了原始数据和拟合的直线,并输出了模型的参数。 注意,由于PyTorch默认使用批量化操作,所以我们在输入数据时需要将一维数据转化为二维数据,即使用`unsqueeze(1)`将x转化为形状为(100, 1)的张量。在绘制拟合的直线时,我们使用`detach()`方法将输出数据从计算图中分离出来,再使用`numpy()`方法将张量转化为NumPy数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Newjet666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值