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

神经网络之万能定理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()

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Azure AD使用SAML登录OpenSearch

Azure AD的配置如下: 登录 Global Azure 控制台,选择并切换至 Azure Active Directory 服务,在左侧的侧边栏选择 Enterprise applications,All Applications 页面点击 New application. 选择 Create your own application&#x…

多行业万能预约门店小程序源码系统 支持多门店预约小程序 带完整的安装代码包以及搭建教程

随着消费者对于服务体验要求的不断提升,门店预约系统成为了许多行业提升服务质量、提高运营效率的重要工具。然而,市面上的预约系统往往功能单一,无法满足多行业、多场景的个性化需求。下面,小编集合了多年的行业经验和技术积累&a…

【数据结构与算法】动态规划法解题20240302

这里写目录标题 一、198. 打家劫舍1、动态规划五部曲 二、213. 打家劫舍 II 一、198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间…

深度学习 精选笔记(10)简单案例:房价预测

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

hippy 调试demo运行联调-mac环境准备篇

适用对于终端编译环境不熟悉的人看,仅mac端 hippy 调试文档官网地址 前提:请使用node16 联调预览效果图: 编译iOS Demo环境准备 未跑通,待补充 编译Android Demo环境准备 1、正常安装Android Studio 2、下载Android NDK&a…

【Linux C | 网络编程】套接字选项、getsockopt、setsockopt详解及C语言例子

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

StarRocks实战——表设计规范与监控体系

目录 前言 一、StarRocks表设计 1.1 字段类型 1.2 分区分桶 1.2.1 分区规范 1.2.2 分桶规范 1.3 主键表 1.3.1 数据有冷热特征 1.3.2 大宽表 1.4 实际案例 1.4.1 案例一:主键表内存优化 1.4.2 案例一:Update内存超了,导致主键表导…

华为HCIP Datacom H12-821 卷3

1.单选题 四台路由器运行 IS-IS 且已经建立邻接关系,区域号和路由器的等级如图中标记,则 R4到达 10.0.2.2/32 的的 Cost 值为多少? A、40 B、10 C、20 D、30 正确答案: D 解析: 由于没有配置路由渗透,所以R4会选择…

02-prometheus监控-服务器节点监控node-exporter

一、概述 prometheus,本身是一个【数据收集】和【数据处理】的工具,如果效果要监控一台服务器物理机,有两种方式,一种是在物理机上部署“node-export”来收集数据上报给prometheus,另一种是“自定义监控”;…

【数据结构】顺序表和链表的对比,在各种情况下如何选择

顺序表详细内容: 【数据结构】线性表 顺序表(动态、静态分配,插入删除查找基本操作)解析完整代码 单链表详细内容: 【数据结构】单链表解析完整代码(插入、删除、尾插法、头插法、按值和按位查找、前插和后…

SpringMVC自定义视图解析器

/** * 使用View接口完成请求转发|重定向 * 解释: * SpringMVC的官方,提供了一个叫做View的接口,告诉开发人员 * DispatcherServlet底层会调用View接口的实例化对象中的逻辑方法 * 来完成对应的请求转发和重定向。 * 使用: * 1. 单元方法的返回值为View接…

git根据文件改动将文件自动添加到缓冲区

你需要修改以下脚本中的 use_cca: false 部分 #!/bin/bash# 获取所有已修改但未暂存的文件 files$(git diff --name-only)for file in $files; do# 检查文件中是否存在"use_cca: false"if grep -q "use_cca: false" "$file"; thenecho "Ad…

Android 跨进程通信aidl及binder机制详解(一)

前言 上文中描述了,什么是绑定服务、以及创建一个绑定服务都可以通过哪些方式,同时说了通过扩展Binder类来创建一个绑定服务,并使用一个例子来说明了客户端与服务端的绑定过程,最后又总结了绑定服务的生命周期与调用过程。由于上…

【Vue3】自定义 Vue3 插件(全局实现页面加载动画)

// main.ts import { createApp } from vue import App from ./App.vue import Loading from "./components/Loading/index.ts";const app createApp(App) type Lod {show: () > void,hide: () > void } //编写ts loading 声明文件放置报错 和 智能提示 decl…

虚拟机部署Sentry步骤,国内地址

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

Cesium插件系列——3dtiles压平

本系列为自己基于cesium写的一套插件具体实现。 这里是根据Cesium提供的CustomShader来实现的。 在CustomShader的vertexShaderText里,需要定义vertexMain函数,例如下: struct VertexInput {Attributes attributes;FeatureIds featureIds;…

AcWing 787. 归并排序 解题思路及代码

先贴个题目&#xff1a; 以及原题链接&#xff1a;787. 归并排序 - AcWing题库https://www.acwing.com/problem/content/789/纯板子题&#xff0c;先贴代码吧&#xff0c;根据代码讲思路&#xff1a; #include <iostream> using namespace std;const int N 1e5 10; in…

低密度奇偶校验码LDPC(七)——SPA和积译码算法的简化

一、SPA译码算法的实际应用 查找表与拟合 盒加SPA译码器 二、SPA译码算法的简化算法 最小和算法(MSA) 归一化最小和算法(Normalized MSA, NMSA) 偏移最小和算法(Offset MSA, OMSA) 三、NMSA算法的Matlab实现 function [x_hat, iter_this_time] Layered_NMSA_BP_decoder(ll…

【设计模式】(一)设计模式概述

一、设计模式概述 设计模式&#xff08;Design pattern&#xff09;**是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结 在GOF编写的设计模式(可复用面向对象软件的基础)一书中说道: 本书涉及的设计模式并不描述新的或未经证实的设计&#xff0c;我们只收…

智能汽车加速车规级存储应用DS2431P+TR 汽车级EEPROM 存储器IC

DS2431PT&R是一款1024位1-Wire EEPROM芯片&#xff0c;由四页存储区组成&#xff0c;每页256位。数据先被写入一个8字节暂存器中&#xff0c;经校验后复制到EEPROM存储器。该器件的特点是&#xff0c;四页存储区相互独立&#xff0c;可以单独进行写保护或进入EPROM仿真模式…