pytorch从入门到精通系列之线性回归

以前的文章有提到,pytorch的入门让人无比愉悦的。但毕竟是深度学习,我说的门槛是和tensorflow比,自己深度学习对于微积分,线性代数和几率论仍是有必定要求的。固然,仍是那句话,其实深度学习涉及的数学原理,比什么SVM,CRF要简单太多,并且深度学习的变化和应用场景比前者要多得多,因此学习深度学习是颇有意义的。python

不少官方或非官方的demo,都是长篇大论,由于要演示一个例子,须要准备数据,其实大部分的代码是在准备数据,预处理,与深度学习自己没有太大关系。这样看起来不直观,把初学者都给吓住了。因此,打算写一个入门系列,就是手动造一些简单的数据,就是为了演示用。网络

 

本文要实现线性函数的拟合,就是好比y = 2*x+3这样的线性函数。首先标准的步骤,导入torch和Variable。函数

import torch
from torch.autograd import Variable

而后准备简单的数据,x=1,2,3, y = 2,4,6, 线性关系就是y=2*x。注意这里的tensor是3行一列,而后转为Variable。学习

x_data = Variable(torch.Tensor([[1.0],[2.0],[3.0]]))
y_data = Variable(torch.Tensor([[2.0],[4.0],[6.0]]))

而后就能够定义网络了,全部的模型都须要继承自nn.Module。而后定义一个线性层,参数为1,1。实现forward函数,用做训练迭代。测试

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

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

直接实例化模型,并定义损失函数,这里按咱们高数里学的,使用最小二乘法。而后使用随机梯度降低对全部可优化参数进行优化,lr是learning_rate学习速率,也就是梯度变化步长。优化

model = Model()
criterion = nn.MSELoss(size_average=False)
params = model.parameters()
optimizer = torch.optim.SGD(params=params,lr=0.01)

开发循环迭代500次,用x_data经过model获得y_pred,也是一个3x1的矩阵。而后经过criterion求loss值。人工智能

for epoch in range(500):
    y_pred = model(x_data)#3x1
    loss = criterion(y_pred,y_data)
    #这里能够把loss打印出来看,值都是同样的,由于咱们没有优化参数。使用data[0]是由于loss.data是一个list
    print(epoch,loss.data[0])

    #而后是三步标准的,导数归0,反向求导,反向传播  
optimizer.zero_grad()    
    loss.backward()
    optimizer.step()
这里值得注意就是每一个epoch,梯度都要归零。
print('训练完成!')
x_test = Variable(torch.Tensor([[4.0]]))
y_test = model(x_test)
#y_test是一个Variable,包括.data是一个FloatTensor,size=1x1
print('x_test:%d,预测值为%f'%(x_test.data[0][0],y_test.data[0][0]))

最后使用训练好的模型去测试,看下结果:继承

训练完成!开发

x_test:4,预测值为7.975748深度学习

 

关于做者:魏佳斌,互联网产品/技术总监,北京大学光华管理学院(MBA),特许金融分析师(CFA),资深产品经理/码农。偏心python,深度关注互联网趋势,人工智能,AI金融量化。致力于使用最前沿的认知技术去理解这个复杂的世界。

扫描下方二维码,关注:AI量化实验室(ailabx),了解AI量化最前沿技术、资讯。

相关文章
相关标签/搜索