• 售前

  • 售后

热门帖子
入门百科

pytorch动态神经网络(拟合)实现

[复制链接]
Megatron832 显示全部楼层 发表于 2021-10-26 13:47:33 |阅读模式 打印 上一主题 下一主题
(1)首先要创建数据集
  1. import torch  #引用torch模块
  2. import matplotlib.pyplot as plt #引用画图模块
  3. x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)#产生(-1,1)的100个点横坐标,dim表示维度,表示在这里增加第二维
  4. y=x.pow(2)+0.2*torch.rand(x,size())
  5. #0.2*torch.rand(x,size())是为了产生噪点使数据更加真实
复制代码
(2)创建神经网络
  1. import torch
  2. imoort torch.nn.functional as F #激励函数在这个模块里
  3. class Net (torch.nn.Module): #Net要继承torch中Module
  4. (1)首先有定义(建立)神经网络层
  5. def __init__(self,n_feature,n_hidden,n_output):
  6. #__init__表示初始化数据
  7.   super(Net,self).__init__()#Net的对象self转换为类nn.module的对象,然后在用nn.Module的方法使用__init__初始化。
  8. self.hidden=torch.nn.Linear(n_feature,n_hidden)
  9. #建立隐藏层线性输出
  10. self.predict=torch.nn.Linear(n_hidden,n_output)
  11. #建立输出层线性输出
复制代码
(2)创建层与层之间的关系
  1. def forward (self,x):
  2. # 这同时也是 Module 中的 forward 功能
  3. x=F.relu(self,hidden(x))
  4. #使用激励函数把数据激活
  5. return x #输出数据
  6. net=Net(n_feature=1,n_hidden=10,n_output=1)
  7. #一个隐藏层有10节点,输出层有1节点,输出数数据为一个
复制代码
(3)训练网络
  1. optimizer=torch.optim.SGD(net.parameter().lr=0.2)#传入 net 的所有参数, lr代表学习率,optimizer是训练工具
  2. loss_func=torch.nn.MSELoss()#预测值和真实值的误差计算公式 (均方差)
  3. for t in range(100):
  4. prediction = net(x) # 喂给 net 训练数据 x, 输出预测值
  5.   loss = loss_func(prediction, y)  # 计算两者的误差
  6.   optimizer.zero_grad() # 清空上一步的残余更新参数值
  7.   loss.backward()    # 误差反向传播, 计算参数更新值
  8.   optimizer.step()    # 将参数更新值施加到 net 的 parameters 上
复制代码
(四)可视化训练
  1. import matplotlib.pyplot as plt
  2. plt.ion() # 画图
  3. plt.show()
  4. for t in range(200):
  5.   ...
  6.   loss.backward()
  7.   optimizer.step()
  8.   # 接着上面来
  9.   if t % 5 == 0:
  10.     # plot and show learning process
  11.     plt.cla()
  12.     plt.scatter(x.data.numpy(), y.data.numpy())
  13.     plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
  14.     plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color': 'red'})
  15.     plt.pause(0.1)
复制代码
会得到如下图像:


团体代码如下:
  1. import torch
  2. import matplotlib.pyplot as plt
  3. x=torch.unsqueeze(torch.linspace(-2,2,100),dim=1)
  4. y=x.pow(2)+0.2*torch.rand(x.size())
  5. import torch
  6. import torch.nn.functional as F
  7. class Net(torch.nn.Module):
  8.   def __init__(self,n_feature,n_hidden,n_output):
  9.     super(Net,self).__init__()
  10.     self.hidden=torch.nn.Linear(n_feature,n_hidden)
  11.     self.predict=torch.nn.Linear(n_hidden,n_output)
  12.   def forward(self,x):
  13.     x=F.relu(self.hidden(x))
  14.     x=self.predict(x)
  15.     return x
  16. net=Net(n_feature=1,n_hidden=10,n_output=1)
  17. optimizer=torch.optim.SGD(net.parameters(),lr=0.3)
  18. loss_func=torch.nn.MSELoss()
  19. plt.ion()
  20. plt.show()
  21. for t in range(100):
  22.   prediction=net(x)
  23.   loss=loss_func(prediction,y)
  24.   optimizer.zero_grad()
  25.   loss.backward()   
  26.   optimizer.step()
  27.   if t % 5 == 0:
  28.     plt.cla()
  29.     plt.scatter(x.data.numpy(), y.data.numpy())
  30.     plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
  31.     plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color': 'red'})
  32.     plt.pause(0.1)
复制代码
【参考文献】https://mofanpy.com/tutorials/machine-learning/torch/regression/

到此这篇关于pytorch动态神经网络(拟合)实现的文章就先容到这了,更多相关pytorch动态神经网络内容请搜刮脚本之家从前的文章或继续欣赏下面的相关文章渴望大家以后多多支持脚本之家!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作