使用 pytorch 创建神经网络拟合sin函数的实现


Posted in Python onFebruary 24, 2020

我们知道深度神经网络的本质是输入端数据和输出端数据的一种高维非线性拟合,如何更好的理解它,下面尝试拟合一个正弦函数,本文可以通过简单设置节点数,实现任意隐藏层数的拟合。

基于pytorch的深度神经网络实战,无论任务多么复杂,都可以将其拆分成必要的几个模块来进行理解。

1)构建数据集,包括输入,对应的标签y
2) 构建神经网络模型,一般基于nn.Module继承一个net类,必须的是__init__函数和forward函数。__init__构造函数包括创建该类是必须的参数,比如输入节点数,隐藏层节点数,输出节点数。forward函数则定义了整个网络的前向传播过程,类似于一个Sequential。
3)实例化上步创建的类。
4)定义损失函数(判别准则),比如均方误差,交叉熵等
5)定义优化器(optim:SGD,adam,adadelta等),设置学习率
6)开始训练。开始训练是一个从0到设定的epoch的循环,循环期间,根据loss,不断迭代和更新网络权重参数。

无论多么复杂的网络,基于pytorch的深度神经网络都包括6个模块,训练阶段包括5个步骤,本文只通过拟合一个正弦函数来说明加深理解。

废话少说,直接上代码:

from torch.utils.data import DataLoader
from torch.utils.data import TensorDataset
import torch.nn as nn
import numpy as np
import torch

# 准备数据
x=np.linspace(-2*np.pi,2*np.pi,400)
y=np.sin(x)
# 将数据做成数据集的模样
X=np.expand_dims(x,axis=1)
Y=y.reshape(400,-1)
# 使用批训练方式
dataset=TensorDataset(torch.tensor(X,dtype=torch.float),torch.tensor(Y,dtype=torch.float))
dataloader=DataLoader(dataset,batch_size=100,shuffle=True)

# 神经网络主要结构,这里就是一个简单的线性结构

class Net(nn.Module):
  def __init__(self):
    super(Net, self).__init__()
    self.net=nn.Sequential(
      nn.Linear(in_features=1,out_features=10),nn.ReLU(),
      nn.Linear(10,100),nn.ReLU(),
      nn.Linear(100,10),nn.ReLU(),
      nn.Linear(10,1)
    )

  def forward(self, input:torch.FloatTensor):
    return self.net(input)

net=Net()

# 定义优化器和损失函数
optim=torch.optim.Adam(Net.parameters(net),lr=0.001)
Loss=nn.MSELoss()

# 下面开始训练:
# 一共训练 1000次
for epoch in range(1000):
  loss=None
  for batch_x,batch_y in dataloader:
    y_predict=net(batch_x)
    loss=Loss(y_predict,batch_y)
    optim.zero_grad()
    loss.backward()
    optim.step()
  # 每100次 的时候打印一次日志
  if (epoch+1)%100==0:
    print("step: {0} , loss: {1}".format(epoch+1,loss.item()))

# 使用训练好的模型进行预测
predict=net(torch.tensor(X,dtype=torch.float))

# 绘图展示预测的和真实数据之间的差异
import matplotlib.pyplot as plt
plt.plot(x,y,label="fact")
plt.plot(x,predict.detach().numpy(),label="predict")
plt.title("sin function")
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.legend()
plt.savefig(fname="result.png",figsize=[10,10])
plt.show()

输出结果:

step: 100 , loss: 0.06755948066711426
step: 200 , loss: 0.003788222325965762
step: 300 , loss: 0.0004728269996121526
step: 400 , loss: 0.0001810075482353568
step: 500 , loss: 0.0001108720971387811
step: 600 , loss: 6.29749265499413e-05
step: 700 , loss: 3.707894938997924e-05
step: 800 , loss: 0.0001250380591955036
step: 900 , loss: 3.0654005968244746e-05
step: 1000 , loss: 4.349641676526517e-05

输出图像:

使用 pytorch 创建神经网络拟合sin函数的实现

到此这篇关于使用 pytorch 创建神经网络拟合sin函数的实现的文章就介绍到这了,更多相关pytorch 创建拟合sin函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 Python
Python三级目录展示的实现方法
Sep 28 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
python操作excel的方法
Aug 16 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
Python中一般处理中文的几种方法
Mar 06 Python
pytorch+lstm实现的pos示例
Jan 14 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Python实现读取并写入Excel文件过程解析
May 27 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
如何获取numpy array前N个最大值
May 14 Python
openstack中的rpc远程调用的方法
Jul 09 Python
sklearn+python:线性回归案例
Feb 24 #Python
深入理解Tensorflow中的masking和padding
Feb 24 #Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 #Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 #Python
Python enumerate内置库用法解析
Feb 24 #Python
Python模块/包/库安装的六种方法及区别
Feb 24 #Python
python之MSE、MAE、RMSE的使用
Feb 24 #Python
You might like
PHP调用Webservice实例代码
2011/07/29 PHP
php去除数组中重复数据
2014/11/18 PHP
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Python中logging模块的用法实例
2014/09/29 Python
Python中的迭代器漫谈
2015/02/03 Python
python僵尸进程产生的原因
2017/07/21 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
Python字符串及文本模式方法详解
2020/09/10 Python
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
清明节网上祭英烈活动总结
2014/04/30 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
分享一些Java的常用工具
2021/06/11 Java/Android
Oracle 触发器trigger使用案例
2022/02/24 Oracle
Java存储没有重复元素的数组
2022/04/29 Java/Android