用Pytorch训练线性回归模型

假定我们要拟合的线性方程是:\(y=2x+1\)

\(x\):[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

\(y\):[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]

import torch
import torch.nn as nn
from torch.autograd import Variable
import numpy as np
import matplotlib.pyplot as plt

'''生成输入输出'''
x_values = [i for i in range(15)]
x_train = np.array(x_values, dtype=np.float32)
x_train = x_train.reshape(-1,1)

y_values = [2*i+1 for i in x_values]
y_train = np.array(y_values, dtype=np.float32)
y_train = y_train.reshape(-1,1)

'''定义模型'''
class LinearRegressionModel(nn.Module):
    def __init__(self, input_dim, output_dim):
        super(LinearRegressionModel,self).__init__()      #用nn.Module的init方法
        self.linear = nn.Linear(input_dim, output_dim)    #因为我们假设的函数是线性函数

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

''''''
input_dim = 1
output_dim = 1
model = LinearRegressionModel(input_dim, output_dim)
criterion = nn.MSELoss()    #损失函数为均方差

learning_rate = 0.01
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)

'''训练网络'''
epochs = 30
for epoch in range(epochs):
    epoch += 1
    inputs = Variable(torch.from_numpy(x_train))
    labels = Variable(torch.from_numpy(y_train))
    #清空梯度参数
    optimizer.zero_grad()
    #获得输出
    outputs = model(inputs)
    #计算损失
    loss = criterion(outputs, labels)
    #反向传播
    loss.backward()
    #更新参数
    optimizer.step()

    print('epoch {}, loss {}'.format(epoch, loss.data[0]))

输出如下

epoch 1, loss 290.4517517089844
epoch 2, loss 39.308494567871094
epoch 3, loss 5.320824146270752
epoch 4, loss 0.721196711063385
epoch 5, loss 0.09870971739292145
epoch 6, loss 0.01445594523102045
epoch 7, loss 0.003041634801775217
epoch 8, loss 0.0014851536834612489
epoch 9, loss 0.0012628223048523068
epoch 10, loss 0.0012211636640131474
epoch 11, loss 0.0012040861183777452
epoch 12, loss 0.0011904657585546374
epoch 13, loss 0.001177445170469582
epoch 14, loss 0.0011646103812381625
epoch 15, loss 0.0011519324034452438
epoch 16, loss 0.0011393941240385175
epoch 17, loss 0.0011269855313003063
epoch 18, loss 0.0011147174518555403
epoch 19, loss 0.001102585345506668
epoch 20, loss 0.001090570935048163
epoch 21, loss 0.0010787042556330562
epoch 22, loss 0.0010669684270396829
epoch 23, loss 0.0010553498286753893
epoch 24, loss 0.001043855445459485
epoch 25, loss 0.0010324924951419234
epoch 26, loss 0.0010212488705292344
epoch 27, loss 0.0010101287625730038
epoch 28, loss 0.000999127165414393
epoch 29, loss 0.0009882354643195868
epoch 30, loss 0.0009774940554052591
#可以看出loss逐步缩小

画图观察

predicted = model(Variable(torch.from_numpy(x_train))).data.numpy()

plt.clf()
plt.plot(x_train, y_train, 'go', label="True Value", alpha=0.5)

plt.plot(x_train, predicted, '--', label='Predictions',alpha=0.5)

plt.legend(loc='best')
plt.show()

图如下:

原文地址:https://www.cnblogs.com/MartinLwx/p/10353706.html

时间: 2024-11-12 15:27:45

用Pytorch训练线性回归模型的相关文章

tensorflow训练线性回归模型

完整代码 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np #样本数据 x_train = np.linspace(-1,1,300)[:,np.newaxis] noise = np.random.normal(0, 0.1, x_train.shape) y_train = x_train * 3 + noise + 0.8 #线性模型 W = tf.Variable([0.1],dtype

用Pytorch训练分类模型

本次分类问题使用的数据集是MNIST,每个图像的大小为\(28*28\). 编写代码的步骤如下 载入数据集,分别为训练集和测试集 让数据集可以迭代 定义模型,定义损失函数,训练模型 代码 import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision.datasets as dsets from torch.autograd import Variable '''下

R语言解读多元线性回归模型

转载:http://blog.fens.me/r-multi-linear-regression/ 前言 本文接上一篇R语言解读一元线性回归模型.在许多生活和工作的实际问题中,影响因变量的因素可能不止一个,比如对于知识水平越高的人,收入水平也越高,这样的一个结论.这其中可能包括了因为更好的家庭条件,所以有了更好的教育:因为在一线城市发展,所以有了更好的工作机会:所处的行业赶上了大的经济上行周期等.要想解读这些规律,是复杂的.多维度的,多元回归分析方法更适合解读生活的规律. 由于本文为非统计的专业

线性回归模型

线性回归模型,即一个函数,这个函数里含有未知的参数,通过学习,可以估计出参数.然后利用这个模型去预测/分类新的数据. 线性回归形式简单,易于建模.许多更为强大的非线性模型可以在该模型基础上引入层级结构或高维映射而得. 线性回归模型基本形式 给定由d个属性表述的示例x=(X1,X2,X3...),期中每个Xi表示x在第i个属性上的取值,线性模型试图去学得一个通过属性的线性组合来进行预测的函数 f(x)= w1X1+w2X2+w3X3+...+wdXd+b 向量表示: f(x) = wTx+b 期中

【scikit-learn】scikit-learn的线性回归模型

 内容概要 怎样使用pandas读入数据 怎样使用seaborn进行数据的可视化 scikit-learn的线性回归模型和用法 线性回归模型的评估測度 特征选择的方法 作为有监督学习,分类问题是预測类别结果,而回归问题是预測一个连续的结果. 1. 使用pandas来读取数据 Pandas是一个用于数据探索.数据处理.数据分析的Python库 In [1]: import pandas as pd In [2]: # read csv file directly from a URL and

scikit-learn的线性回归模型

来自 http://blog.csdn.net/jasonding1354/article/details/46340729 内容概要 如何使用pandas读入数据 如何使用seaborn进行数据的可视化 scikit-learn的线性回归模型和使用方法 线性回归模型的评估测度 特征选择的方法 作为有监督学习,分类问题是预测类别结果,而回归问题是预测一个连续的结果. 1. 使用pandas来读取数据 Pandas是一个用于数据探索.数据处理.数据分析的Python库 In [1]: import

机器学习(Andrew Ng)笔记(二):线性回归模型 & 梯度下降算法

线性回归模型 回忆一下第一节课提出的预测房屋每平方单位价格的例子.在这个例子中,我们可以画一条直线,尽量符合数据点的分布趋势.我们已经知道这是一个回归问题,即预测连续值的输出.实际上,这是一个典型的线性回归模型.之所以这样定义,大概是因为回归方程可以用一个线性函数来表示. 我们可以假设这个线性函数为: 这是一个关于x的一元一次方程.其中两个参数的值我们还不知道,要根据训练集中的数据求解出来.这里要定义几个概念,我们已经有的数据,即房屋面积与单价的对应数据对,被称作训练集.x作为房屋面积,称作输入

用Tensorflow完成简单的线性回归模型

思路:在数据上选择一条直线y=Wx+b,在这条直线上附件随机生成一些数据点如下图,让TensorFlow建立回归模型,去学习什么样的W和b能更好去拟合这些数据点. 1)随机生成1000个数据点,围绕在y=0.1x+0.3 周围,设置W=0.1,b=0.3,届时看构建的模型是否能学习到w和b的值. import numpy as np import tensorflow as tf import matplotlib.pyplot as plt num_points=1000 vectors_se

线性回归模型原理及其应用

前言 最近有在学习网易云课堂上<吴恩达机器学习>这门课程, 受益匪浅, 然后打算将有关线性回归模型的知识点总结下来, 也就有了本文. 若存在错误的地方, 还请指正, 谢谢! 目录 1. 一元线性回归 2. 多元线性回归 3. 两大算法优缺点 4. 算法优化问题 5. 多元线性回归应用 正文 线性回归, 是回归分析中的一种, 其表示自变量与因变量之间存在线性关系. 回归分析是从数据出发, 考察变量之间的数量关系, 并通过一定的数学关系式将这种关系描述出来, 再通过关系式来估计某个变量的取值, 同