神经网络之万能定理python-pytorch实现,可以拟合任意曲线

news2024/12/29 10:41:13

神经网络之万能定理python-pytorch实现,可以拟合任意曲线

博主,这几天一直在做这个曲线拟合的实验,讲道理,网上可能也有很多这方面的资料,但是博主其实试了很多,效果只能对一般的曲线还行,稍微复杂一点的,效果都不太好,后来博主经过将近一天奋战终于得到了这个最好的结果:

代码:

from turtle import shape
import torch
from torch import nn
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
from  utils import  parameters
from scipy.optimize import leastsq
from turtle import title
import numpy as np
import matplotlib.pyplot as plt
import torch as t
from torch.autograd import Variable as var


class BP(t.nn.Module):
    def __init__(self):
        super(BP,self).__init__()
        self.linear1 = t.nn.Linear(1,100)
        self.s = t.nn.Sigmoid()
        self.linear2 = t.nn.Linear(100,10)
        self.relu = t.nn.Tanh()
        self.linear3 = t.nn.Linear(10,1)
        self.Dropout = t.nn.Dropout(p = 0.1)
        self.criterion = t.nn.MSELoss()
        self.opt = t.optim.SGD(self.parameters(),lr=0.01)
    def forward(self, input):
        y = self.linear1(input)
        y = self.relu(y)
     #  y=self.Dropout(y)
        y = self.linear2(y)
        y = self.relu(y)
       # y=self.Dropout(y)
        y = self.linear3(y)
        y = self.relu(y)
        return y


class BackPropagationEx:
    def __init__(self):
        self.popt=[]
    #def  fun(self,t,a,Smax,S0,t0):
    #           return Smax - (Smax-S0) * np.exp(-a * (t-t0));
    def curve_fitm(self,x,y,epoch):
      
        xs =x.reshape(-1,1)


        xs=(xs-xs.min())/(xs.max()-xs.min())
       

     #   print(xs)
        ys = y
        ys=(ys-ys.min())/(ys.max()-ys.min())
        xs = var(t.Tensor(xs))

        ys = var(t.Tensor(ys))
     #   bp = BP(traindata=traindata,labeldata=labeldata,node=[1,6,1],epoch=1000,lr=0.01)
      #  predict=updata(10,traindata,labeldata)
        model=BP()
        for e in range(epoch):
         #   print(e)
            index=0
            ls=0
            for x in xs:
                y_pre = model(x)
               #   print(y_pre)
                loss = model.criterion(y_pre,ys[index])
                index=index+1
         #       print("loss",loss)
               
                ls=ls+loss
                # Zero gradients
                model.opt.zero_grad()
                # perform backward pass
                loss.backward()
                # update weights
                model.opt.step()
            if(e%2==0 ):
                    print(e,ls)
        ys_pre = model(xs)
        loss = model.criterion(y_pre,ys)
        print(loss)




        plt.title("curve")
        plt.plot(xs.data.numpy(),ys.data.numpy(),label="ys")
        plt.plot(xs.data.numpy(),ys_pre.data.numpy(),label="ys_pre")
        plt.legend()
        plt.show()

    def predict(self,x):
        return self.fun(x,*self.popt)
    def plot(self,x,y,predict):
         plt.plot(x,y,'bo')
        #绘制拟合后的点
         plt.plot(x,predict,'r-')#拟合的参数通过*popt传入
         plt.title("BP神经网络")
         plt.show()

来看一下结果:
在这里插入图片描述

你们可能觉得这个拟合好像也一般啊,其实不是,我这个问题非常难,基本上网上的代码都是拟合效果很差的,数据的话,感兴趣的,可以私聊我,我可以发给你们。
这个实现想做到博主这个效果的,很难,因为博主做了大量实现,发现,其实严格意义上的万能定理的实现其实是需要很多的考虑的。
另外随着训练轮数和神经元的增加,实际上我们的效果可以真正实现万能定理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1484561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式——中介者模式(mediator pattern)

概述 如果在一个系统中对象之间的联系呈现为网状结构,如下图所示。对象之间存在大量的多对多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些对象称为同事对象,它们之间通过彼…

智慧市容环境卫生管理信息系统建设项目初步设计参考指南

第四章项目建设方案 梳理和编制数据标准规范,为数据体系建设提供建设指导。数据标准规范体系是根据统一市容环卫基础数据资源建立的,从要素分类、编码、符号、制图、更新机制等层 面解决各类规划标准不衔接、各自为政问题。标准规范体系包括&#xff1…

数据挖掘入门项目二手交易车价格预测之数据分析

文章目录 1. 相关库的引入2. 数据的加载3. 数据概况3.1 统计值查看3.2 查看数据类型 4. 判断缺失值4.1 统计每一列空值的数量4.2 可视化缺失值数量 5. 判断异常值5.1 异常值检测 6. 了解预测值的分布6.1 统计各预测值的分布6.2 总体分布概况6.2 查看预测值的具体频数6.3 查看sk…

HTTPS的实现原理

图片来源:HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 - 个人文章 - SegmentFault 思否 加密流程按图中的序号分为: 客户端请求 HTTPS 网址,然后连接到 server 的 443 端口 (HTTPS 默认端口,类似于 HTTP 的80端口)。…

双周回顾#006 - 这三个月

断更啦~~ 上次更新时间 2023/11/23, 断更近三个月的时间。 先狡辩下,因为忙、着实忙。因为忙,心安理得给断更找了个借口,批评下自己~~ 这三个月在做啥?跨部门援助,支援公司互联网的 ToC 项目,一言难尽。 …

【随记】分享第1期(2024.03.02)

记录这段时间,看到的有趣/有用/值得分享的东西 灵感来源:分类:周刊 - 阮一峰的网络日志 (ruanyifeng.com) 文章目录 大佬博客实用工具文章文摘 大佬博客 云风的 BLOG (codingnow.com) 美团技术团队 (meituan.com) 计算机科学 – 刘未鹏 | Mi…

可以用来测试的接口

实际开发过程中,我们可以通过postman工具来测试接口 get请求 https://api.github.com/events?id1&nameuser post请求 http://httpbin.org/post 参数1:key1value1 参数2:key2value2

springboot238光影视频

光影视频平台 摘 要 使用旧方法对光影视频平台的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在光影视频平台的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开…

第二讲:用geth和以太坊交互

一:安装geth brew install ethereum geth github网址: https://github.com/ethereum/go-ethereum 二: 用geth连接以太坊 以太坊有主网络(Ethereum Mainnet),有测试网络(Sepolia、Goerli 等等…

打基础!张宇《30讲》vs 武忠祥《基础篇》

张宇老师和武忠祥老师的课程都很推荐,两个老师也都很有实力 我在考研的时候跟的是张宇老师,然后强化阶段跟的是武忠祥老师,我真实的听过两个老师的课程,所以我觉得我有一些发言权。因此对大家在考研数学备考选择老师方面&#xf…

单细胞Seurat - 降维与细胞标记(4)

本系列持续更新Seurat单细胞分析教程,欢迎关注! 非线形降维 Seurat 提供了几种非线性降维技术,例如 tSNE 和 UMAP,来可视化和探索这些数据集。这些算法的目标是学习数据集中的底层结构,以便将相似的细胞放在低维空间中…

JavaScript 设计模式之职责链模式

职责链 在日常开发中,我们一个函数(方法)应该是尽可能的单单只做一件事,比如 一个获取 name 的函数,他就用来返回 name 处理 name相关的数据就好了,这就是职责 function getName(){// todo sth.return na…

从零自制docker-1-【环境配置 docker go介绍与安装】

文章目录 docker简介举例docker安装go语言go安装go 配置 docker简介 Docker可以看作是一种极其轻巧的“虚拟机”,它允许你将一个或多个程序及其运行环境打包在一起,形成一个标准化的单元,这个单元可以在任何支持Docker的系统上运行&#xff…

ArmSoM Rockchip系列产品 通用教程 之 Camera 使用

Camera 使用 1. Camera 简介 ArmSoM系列产品使用的是mipi-csi接口的摄像头 ArmSoM-Sige7支持双摄同显: 2. RK3588硬件通路框图 rk3588支持2个isp硬件,每个isp设备可虚拟出多个虚拟节点,软件上通过回读的方式,依次从ddr读取每…

SQL无列名注入

SQL无列名注入 ​ 前段时间,队里某位大佬发了一个关于sql注入无列名的文章,感觉好像很有用,特地研究下。 关于 information_schema 数据库: ​ 对于这一个库,我所知晓的内容并不多,并且之前总结SQL注入的…

React多个echarts图表在一个页面的使用

前景 很多情况下图标都是一个,我们大概率会像下面代码一样的做法 大概流程就是获取到数据后执行初始化,因为先初始化后异步请求再设置state里面的数据回导致无法正常显示echarts(除非再次调用setOption)下面就记录下自己解决过程源码 https://github.com/superBiuBiuMan/react-…

《秦时明月》IP新高度:与陕西历史博物馆共同书写文化传承新篇章!

在IP产业风起云涌的今天,如何以创意和匠心为传统文化注入新的活力,成为了摆在每一位文化工作者面前的重要课题。近日,《秦时明月》作为一部深受观众喜爱的国产动画IP,在迎来其十七周年之际,联手陕西历史博物馆&#xf…

线性dp:P2679 子串

1.P2679 子串 传送门https://www.luogu.com.cn/problem/P2679这道题是公共子串问题的变种,但是我第一时间确实没想到转移方程(写少了) 一开始看了题解也没太看懂,直到自己模拟一遍(模拟数据便于理解原理)…

#WEB前端(HTML属性)

1.实验:a,img 2.IDE:VSCODE 3.记录: a: href插入超链接 默认情况下在本窗口打开链接, target可以设置打开的窗口,parent在父窗口打开,blank新开串口打开,top在顶层串口打开,self为默认在本窗口打开 img: 插入图片 可以插…

持续集成(CICD)- Git版本管理工具,Gitee线上仓库

文章目录 一、学习目标:二、什么是Git工具三 、Git环境搭建(windows系统)四、Gitee设置(私钥和公钥绑定)五、Git结合Gittee进行基本设置(重要)六、在Gitee上新建仓库私有仓库(非空仓库)七、Git拉取线上仓库代码,提交代码(重要)八、Git解决版本冲突问题(重要)场景一…