文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Pytorch——回归问题

2023-06-02 00:33

关注

  1.前言

  我会这次会来见证神经网络是如何通过简单的形式将一群数据用一条线条来表示. 或者说, 是如何在数据当中找到他们的关系, 然后用神经网络模型来建立一个可以代表他们关系的线条.

  2.数据准备

  我们创建一些假数据来模拟真实的情况. 比如一个一元二次函数: y = a * x^2 + b, 我们给 y 数据加上一点噪声来更加真实的展示它.

  import torch

  import matplotlib.pyplot as plt

  #制造一些数据

  x = torch.unsqueeze(torch.linspace(-1,1,100),dim = 1) #torch.Size([100, 1]) #把[a,b,c]变成[[a,b,c]]

  #print(x)

  y = 2*(x.pow(2)) + 0.5*torch.rand(x.size()) #torch.rand为均匀分布,返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数。张量的形状由参数sizes定义

  #print(y)

  #画图

  plt.scatter(x.data.numpy(),y.data.numpy())

  plt.show()

  3.搭建神经网络

  建立一个神经网络我们可以直接运用 torch 中的体系. 先定义所有的层属性(init()), 然后再一层层搭建(forward(x))层于层的关系链接. 建立关系的时候, 我们会用到激励函数

  from torch import nn

  import torch.nn.functional as F

  class NetWork(nn.Module):

  def __init__(self,n_input,n_hidden,n_output):

  super(NetWork,self).__init__()

  self.hidden = nn.Linear(n_input,n_hidden)

  self.output_for_predict = nn.Linear(n_hidden,n_output)

  def forward(self,x):

  x = F.relu(self.hidden(x)) #对x进入隐层后的输出应用激活函数(相当于一个筛选的过程)

  output = self.output_for_predict(x) #做线性变换,将维度为1

  return output

  network = NetWork(n_input = 1,n_hidden = 8, n_output = 1)

  print(network) #打印模型的层次结构

  4.训练搭建的神经网络

  训练的步骤很简单, 如下:

  from torch import nn

  import torch.nn.functional as F

  class NetWork(nn.Module):

  def __init__(self,n_input,n_hidden,n_output):

  super(NetWork,self).__init__()

  self.hidden = nn.Linear(n_input,n_hidden)

  self.output_for_predict = nn.Linear(n_hidden,n_output)

  def forward(self,x):

  x = F.relu(self.hidden(x)) #对x进入隐层后的输出应用激活函数(相当于一个筛选的过程)

  output = self.output_for_predict(x) #做线性变换,将维度为1

  return output

  network = NetWork(n_input = 1,n_hidden = 8, n_output = 1)

  print(network) #打印模型的层次结构

  optimizer = torch.optim.SGD(network.parameters(),lr = 0.2)

  criterion = torch.nn.MSELoss() #均方误差,用于计算预测值与真实值之间的误差

  for i in range(500): #训练步数(相当于迭代次数)

  predication = network(x)

  loss = criterion(predication, y) #predication为预测的值,y为真实值

  optimizer.zero_grad()

  loss.backward() #反向传播,更新参数

  optimizer.step() #将更新的参数值放进network的parameters

  5.可视化操作

  x = torch.unsqueeze(torch.linspace(-1,1,100),dim = 1) #torch.Size([100, 1]) #把[a,b,c]变成[[a,b,c]]

  #print(x)郑州哪里做人流好 http://www.kdrlyy.com/

  y = 2*(x.pow(2)) + 0.5*torch.rand(x.size()) #torch.rand为均匀分布,返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数。张量的形状由参数sizes定义

  #print(y)

  #画图

  # plt.scatter(x.data.numpy(),y.data.numpy())

  # plt.show()

  from torch import nn

  import torch.nn.functional as F

  class NetWork(nn.Module):

  def __init__(self,n_input,n_hidden,n_output):

  super(NetWork,self).__init__()

  self.hidden = nn.Linear(n_input,n_hidden)

  self.output_for_predict = nn.Linear(n_hidden,n_output)

  def forward(self,x):

  x = F.relu(self.hidden(x)) #对x进入隐层后的输出应用激活函数(相当于一个筛选的过程)

  output = self.output_for_predict(x) #做线性变换,将维度为1

  return output

  network = NetWork(n_input = 1,n_hidden = 8, n_output = 1)

  print(network) #打印模型的层次结构

  plt.ion() # 打开交互模式

  plt.show()

  optimizer = torch.optim.SGD(network.parameters(),lr = 0.2)

  criterion = torch.nn.MSELoss() #均方误差,用于计算预测值与真实值之间的误差

  for i in range(500): #训练步数(相当于迭代次数)

  predication = network(x)

  loss = criterion(predication, y) #predication为预测的值,y为真实值

  optimizer.zero_grad()

  loss.backward() #反向传播,更新参数

  optimizer.step() #将更新的参数值放进network的parameters

  if i % 10 == 0:

  plt.cla() # 清坐标轴

  plt.scatter(x.data.numpy(),y.data.numpy())

  plt.plot(x.data.numpy(),predication.data.numpy(),'ro', lw=5) #画预测曲线,用红色o作为标记

  plt.text(0.5,0,'Loss = %.4f' % loss.data.numpy(), fontdict = {'size': 20, 'color': 'red'})

  plt.pause(0.1)

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯