当前位置:   article > 正文

pytorch入门(一):regression回归_transformer pytorch regression

transformer pytorch regression

回归问题,即:通过分析一组带有因变量和自变量的样本,得出因变量和自变量之间的关系。本文介绍一个最简单的回归问题。并使用神经网络进行分析。

效果图:

介绍 

逐句代码讲解

一、生成样本数据

  1. x=torch.unsqueeze(torch.linspace(-3,3,1000),dim=1)
  2. y=x.sin()+0.2*torch.rand(x.size())

其中torch.unsqueeze()为数据提升维度:

由[1,2,3,4]变为[[1],[2],[3],[4]];神经网络只接受第二种形式的输入数据。

x生成-3到3范围的等间隔的1000个数据;y是x的函数

二、搭建神经网络

  1. class Net(torch.nn.Module):
  2. def __init__(self,nfeature,n_hidden,n_output):
  3. super(Net, self).__init__()
  4. self.hidden=torch.nn.Linear(nfeature,n_hidden)
  5. self.predict=torch.nn.Linear(n_hidden,n_output)
  6. def forward(self,x):
  7. x=torch.tanh(self.hidden(x))
  8. x=self.predict(x)
  9. return x

网络以类的形式搭建,必须继承 torch.nn.Module; 其中两个主要函数构造函数__init__(),以及前向传播函数forward()

nfeature,n_hidden,n_output代表:输入数据、隐含层神经元个数、输出层,其中隐含层神经元个数=隐含层输出值个数

 super(Net, self).__init__()这句规定必写

        self.hidden=torch.nn.Linear(nfeature,n_hidden) 定义隐含层
        self.predict=torch.nn.Linear(n_hidden,n_output)定义输出层

    def forward(self,x):中x代表输入值

x=torch.tanh(self.hidden(x))  其中self.hidden(x)代表以神经网络hidden层处理输入值,torch.tanh()代表将上述值用激活函数tanh再进行处理。

x=self.predict(x)代表以神经网络predict层处理x输出

三、创建优化器

神经网络搭建好了,要想进行学习,必须经过优化的过程

  1. optimizer=torch.optim.SGD(net.parameters(),lr=0.1)
  2. loss_func=torch.nn.MSELoss()

optimizer=torch.optim.SGD(net.parameters(),lr=0.1)指定优化器为SGD,输入网络参数,学习率设置为0.1

损失函数设置为MSELoss均方根损失,为回归问题常用方法 

四、模型训练

  1. for t in range(10000):
  2. prediction=net(x)
  3. loss=loss_func(prediction,y)
  4. optimizer.zero_grad()
  5. loss.backward()
  6. optimizer.step()

模型训练10000轮, 

prediction=net(x)使用模型预测数据

loss=loss_func(prediction,y)计算损失(误差)

最后:  梯度清零(清除上一轮残留的梯度)、损失反馈、优化器根据梯度进行优化:

  optimizer.zero_grad()
    loss.backward()
    optimizer.step()  

全部代码:

  1. import torch
  2. import matplotlib.pyplot as plt
  3. x=torch.unsqueeze(torch.linspace(-3,3,1000),dim=1)
  4. y=x.sin()+0.2*torch.rand(x.size())
  5. class Net(torch.nn.Module):
  6. def __init__(self,nfeature,n_hidden,n_output):
  7. super(Net, self).__init__()
  8. self.hidden=torch.nn.Linear(nfeature,n_hidden)
  9. self.predict=torch.nn.Linear(n_hidden,n_output)
  10. def forward(self,x):
  11. x=torch.tanh(self.hidden(x))
  12. x=self.predict(x)
  13. return x
  14. net=Net(1,10,1)
  15. print(net)
  16. plt.ion()
  17. plt.show()
  18. optimizer=torch.optim.SGD(net.parameters(),lr=0.1)
  19. loss_func=torch.nn.MSELoss()
  20. for t in range(10000):
  21. prediction=net(x)
  22. loss=loss_func(prediction,y)
  23. optimizer.zero_grad()
  24. loss.backward()
  25. optimizer.step()
  26. if t%5==0:
  27. plt.cla()
  28. plt.scatter(x,y)
  29. plt.plot(x,prediction.data.numpy(),'m',lw=5)
  30. plt.pause(0.1)
  31. plt.ioff()
  32. plt.show()

参考:

[1]Regression回归https://www.bilibili.com/video/BV1Vx411j7kT?p=11

[2]回归问题的解释https://www.zhihu.com/question/21329754

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/349857
推荐阅读
相关标签
  

闽ICP备14008679号