Pytorch入门>简单的线性回归2
程序员文章站
2022-06-11 23:45:01
...
看李沐老师课程实现的一个简单的线性回归,在之前的基础上主要开始利用官方的库创建数据库和搭建模型。
线性回归+MSELoss+SGD优化。
#!/usr/bin/env python
# coding: utf-8
# In[3]:
import torch
import numpy as np
from torch.utils import data
import matplotlib.pyplot as plt
# In[4]:
def generate_data(w,b,num):
x = torch.normal(0,1, (num,len(w)))
y = torch.matmul(x,w)+b
y+=torch.normal(0,0.01,y.shape)
return x,y.reshape((-1,1))
# In[5]:
true_w = torch.tensor([2.,-3.])
true_b = 0.2
feature, label =generate_data(true_w,true_b,200)
# In[6]:
def load_array(data_arrays,batch_size,is_train=True):#pytorch数据迭代器
dataset = data.TensorDataset(*data_arrays)
return data.DataLoader(dataset,batch_size,shuffle=is_train)
# In[7]:
batch_size = 10
data_iter = load_array((feature,label),batch_size)
next(iter(data_iter)) #python中的iter
# In[8]:
#模型的定义
from torch import nn
net = nn.Sequential(nn.Linear(2,1))
# In[9]:
#自定义模型初始化参数
print(net[0].weight)
print(net[0].weight.data.normal_(0,0.01))#normal为正太分布
print(net[0].bias)
# In[10]:
loss =nn.MSELoss()
trainer = torch.optim.SGD(net.parameters(),lr = 0.03)#SGD至少需要传入2个参数:模型的参数和学习率
# In[14]:
num_epoch =3
for epoch in range(num_epoch):
for x,y in data_iter:
l =loss(net(x),y)
trainer.zero_grad()
l.backward()
trainer.step()
l = loss(net(feature),label)
print(f'epoch {epoch+1},loss{l:f}')
# In[ ]:
上一篇: Pytorch线性回归-Pytorch
下一篇: pytorch实现线性回归