Pytorch 实现Linear Regression(正确代码 完整注释)

pytorch实现简单线性回归

import pandas as pd
import numpy as np
import torch
import torch.nn as nn
#引入变量
from torch.autograd import Variable



#linear regression

'''
生成数据x,y
'''
x = [3, 4, 5, 6, 7, 8, 9]
y = [6, 8, 10, 12, 14, 16, 18]
'''
x_用于绘图,因为下面将x转化为可求导的变量,在转化为numpy不能进行绘图
'''
x_ = np.array(x)  

'''
转化为floattensor,若转为其他形式无法求导
x,y都要进行转化为变量,y不用可求导
'''
x = torch.FloatTensor(x)
x = x.view(-1,1)  #注意此处x,y都要转为(-1,1)张量
x = Variable(x, requires_grad = True)
y = torch.FloatTensor(y)
y = Variable(y)
y = y.view(-1,1)

import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(x_, y.numpy()) 
#也可以 plt.scatter(x.data.numpy() ,y.numpy())
#绘图时不能用tensor,不能用有求导的tensor来转化
#可以使用x.data.numpy
# .data表示取出内部不求导的tensor

Pytorch 实现Linear Regression(正确代码 完整注释)_第1张图片

class LinearRegression(nn.Module):
    def __init__(self, input_size, output_size):
        super(LinearRegression, self).__init__()
        '''
        线性回归
        '''
        self.linear = nn.Linear(input_size, output_size)
    
    def forward(self, x):
    '''
    前向传播
    '''
        return self.linear(x)

input_size = 1
output_size = 1
model = LinearRegression(input_size, output_size)

mse = nn.MSELoss() #loss

'''
优化器
'''
learning_rate = 3e-4
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

'''
loss列表
训练轮数
'''
loss_list = []
iteration_number = 20000

'''
训练
'''
for iteration in range(iteration_number):
    
    '''
    optimizer.zero_grad()对应d_weights = [0] * n

	即将梯度初始化为零(因为一个batch的loss关于weight的导数是所有	sampleloss关于weight的导数的累加和)
	'''
    optimizer.zero_grad()

	'''
	前向传播求出预测的值
	'''
    results = model(x)  #返回为tensor

	'''
	计算loss
	'''
    loss = mse(results, y)

	'''
	反向传播求梯度
	'''
    loss.backward()

	'''
	weights = [weights[k] + alpha * d_weights[k] for k in range(n)]
	更新所有参数
	'''
    optimizer.step()
	'''
	将loss加入loss列表
	'''
    loss_list.append(loss.data)
    
    if(iteration % 1000 == 0 ):
        print('epoch{}, loss {}'.format(iteration, loss.data))



plt.plot(range(iteration_number), loss_list)

'''
m1: [a x b], m2: [c x d]
m1 is [a x b] which is [batch size x in features]

m2 is [c x d] which is [in features x out features]

'''

'''
绘制预测值和真实值
'''
predict = model(x).data.numpy()
plt.scatter(x_, y, color='r')
plt.scatter(x_, predict, color='b')

Pytorch 实现Linear Regression(正确代码 完整注释)_第2张图片

你可能感兴趣的:(Pytorch,Pytorch)