当前位置: 首页 > news >正文

PINN学习与实验之拟合sin(x)

首先给出数学上的知识。

1.\left ( \sin x \right ){}'=\cos x

2.\sin \left ( 0 \right )=\sin \left ( 3.14 \right )=\sin \left ( -3.14 \right )=0

3.\sin ^{^2}\left ( x \right )+\cos ^{^2}\left ( x \right )-1=0

其次给出PINN最基础的理解与应用说明。

1.PINN中的MLP多层感知机的作用?

答:目的是用来拟合出我们需要的那个 常微分方程,即函数逼近器。

2.PINN中物理信息的作用?

答:用于约束MLP反向传播梯度下降求解时的解空间。所以PINN只需要更少的数据就能完成任务。

拟合sin(x)时的边界条件。

1. \sin \left ( 0 \right )=0

2.参照上面的数学式子。

PINN最容易入手的就是根据各种边界条件设计出不同的损失函数(loss function),让MLP最小化这些损失函数的和或者加权和。

下面是代码部分:

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
from torch import autogradclass Net(nn.Module):def __init__(self, NN): # NN决定全连接层的神经元个数,对拟合快慢直接相关super(Net, self).__init__()self.input_layer = nn.Linear(1, NN)self.hidden_layer = nn.Linear(NN,int(NN/2)) self.output_layer = nn.Linear(int(NN/2), 1)def forward(self, x):out = torch.tanh(self.input_layer(x))out = torch.tanh(self.hidden_layer(out))out_final = self.output_layer(out)return out_finalnet=Net(6) # 6个
mse_cost_function = torch.nn.MSELoss(reduction='mean') # 最小化L2范数
optimizer = torch.optim.Adam(net.parameters(),lr=1e-4)  # 优化器def ode_01(x,net):# 使用神经网络net(x)作为偏微分方程的函数逼近器,每经过一次梯度更新就对对net(x)求一次导,代码中net(x)需要去逼近sin(x)y=net(x)# 求net(x)在0点的导数y_x = autograd.grad(y, x,grad_outputs=torch.ones_like(net(x)),create_graph=True)[0]# sin**2 + cos**2 - 1 = 0return torch.pow(y, 2)+torch.pow(y_x, 2)-1 # 动态图
plt.ion()  
# 总的迭代次数
iterations=20000
# 粒度N_,决定将区间分为多少个间隔
N_ = 200
for epoch in range(iterations):optimizer.zero_grad()  # 梯度归0# sin(0) - 0 = 0x_0 = torch.zeros(N_, 1)y_0 = net(x_0)mse_i = mse_cost_function(y_0, torch.zeros(N_, 1))  # sin(-3.14) - 0 = 0x_n314= torch.full((N_,1), -3.14)y_n = net(x_n314)mse_n = mse_cost_function(y_n, torch.zeros(N_, 1))# sin(3.14) - 0 = 0x_p314 = torch.full((N_,1), 3.14)y_p = net(x_p314)mse_p = mse_cost_function(y_p, torch.zeros(N_, 1)) # 输入数据,-pi到+pi之间x_in = np.random.uniform(low=-3.14, high=3.14, size=(N_, 1))# 将输入数据转为torch张量pt_x_in = autograd.Variable(torch.from_numpy(x_in).float(), requires_grad=True)# pt_y_colection 是 sin**2 + cos**2 - 1 = 0 的值pt_y_colection=ode_01(pt_x_in,net)# 全是0pt_all_zeros= autograd.Variable(torch.from_numpy(np.zeros((N_,1))).float(), requires_grad=False)# sin**2 + cos**2 - 1 与 0 之间的误差mse_f=mse_cost_function(pt_y_colection, pt_all_zeros)# 各种误差之和loss = mse_i + mse_f +mse_n + mse_p# 反向传播loss.backward()# 优化下一步optimizer.step()  if epoch%1000==0:y = torch.sin(pt_x_in)  # y 真实值y_train0 = net(pt_x_in) # y 预测值,只用于画图,不输入模型,注意区分本代码的PINN与使用MLP进行有监督回归的差别print(epoch, "Traning Loss:", loss.data)plt.cla()plt.scatter(pt_x_in.detach().numpy(), y.detach().numpy())plt.scatter(pt_x_in.detach().numpy(), y_train0.detach().numpy(),c='red')plt.pause(0.1)

结果展示部分: 

1000次迭代:

3000次迭代:

8000次迭代:

20000次迭代:

        可以看到,20000次迭代之后,MLP完美逼近了sin(x)。而且不是通过有监督回归得到的。参考博客如下:PINN学习与实验(一)__刘文凯_的博客-CSDN博客。

相关文章:

PINN学习与实验之拟合sin(x)

首先给出数学上的知识。 1. 2. 3. 其次给出PINN最基础的理解与应用说明。 1.PINN中的MLP多层感知机的作用? 答:目的是用来拟合出我们需要的那个 常微分方程,即函数逼近器。 2.PINN中物理信息的作用? 答:用于约束MLP反向…...

Java中进制转换的两种方法你知道吗?

目录 十进制转其他进制 其他进制转十进制 实战: A进制转B进制 关于大数运算可以参考躲不掉的高精度计算,蓝桥杯必考_高精度算法在哪些比赛考_无忧#的博客-CSDN博客 十进制转其他进制 使用 Integer.toString(int n,int radix) 方法,该方法…...

Qemu搭建ARM Vexpress开发环境

Qemu搭建ARM Vexpress开发环境 文章目录 Qemu搭建ARM Vexpress开发环境Qemu简介QEMU安装前的准备工作QEMU 安装的两种方式通过网络在线安装源码编译安装源码获取QEMU依赖库安装编译安装 命令选项qemu的标准选项qemu显示选项网络属性相关选项kvm的网络模型 Ubuntu 双网卡&#x…...

JMM如何实现volatile写/读的内存语义

内存屏障类型表 StoreLoad Barriers是一个“全能型”的屏障,它同时具有其他3个屏障的效果。现代的多处理器大多支持该屏障(其他类型的屏障不一定被所有处理器支持)。执行该屏障开销会很昂贵,因为当前处理器通常要把写缓冲区中的数…...

Smali的使用技巧:快速定位Android应用程序中的关键代码

简述 Smali是一种Android应用程序的Dalvik虚拟机指令集汇编语言,用于编写和修改应用程序的DEX文件。通过编写和修改Smali代码,可以实现对Android应用程序的定制化和逆向分析。Smali语言类似于汇编语言,直接操作Dalvik虚拟机指令集。 Smali代…...

04_两种常见的网页反爬措施及应对方法

一、封禁IP地址反爬 1、应对思路: 理解这种反爬方法的含义:当我们用自己电脑的ip地址短时间,高频率访问某个具有此类反爬设置的网站,这种网站就会把我们的ip地址封禁,一般都是封24小时或者其他时间。解决方案:通过代理ip访问,这种方式只不过就是让你有了重新访问网页的…...

安装docker环境,并制作docker镜像

docker环境安装 进入linux虚机后,安装docker环境,制作docker镜像并运行,进入运行中的容器,查看挂载的日志或报告 1.安装docker sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 2.使用docker仓库安装…...

MySQL数据库 – node使用

1 MySQL查询对象 2 MySQL查询数组 3 mysql2库介绍使用 4 mysql2预处理语句 5 mysql2连接池使用 6 mysql2的Promi 这里仅说明如何使用服务器连接数据库并进行操作。 预处理语句就是可以输入变量的语句(表现形式是有符号:?)。需…...

JAVA使用HTTP代码示例模板

以下是一个使用Java发送HTTP请求的示例代码: java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpExample { public static void main(String[] args) { try…...

elementui tree 支持虚拟滚动和treeLine (下)

​ 由于我之前没有发布过npm 包,这里还得现学一下。 参考资料: 链接: 如何写一个vue组件发布到npm,包教包会,保姆级教学链接: vue组件发布npm最佳实践 按照上面的步骤,我通过 vue-sfc-rollup 生成了项目,…...

富人父母都教给孩子什么样的财富思维?

1.认清金钱的价值和作用,不要否认或忽视它对生活的影响。 2.提高社交能力,学会与不同的人沟通和合作,扩大人脉和资源。 3.理性消费,让钱在流动中产生效益,而不是囤积或浪费。 4.释放自己的欲望,追求自己想要…...

国内比较火的报表工具测评——Smartbi电子表格软件和Finereport

最近在学习BI软件,因为最近工作中需要开发报表,因此选用了国内市场比较热门的报表工具——Finereport和Spreadsheet进行学习。 BI软件经常会定期发布新的版本,增加新的功能模块,或者对现有功能进行增强,提升运行效率。…...

变电所运维云平台在电力系统中的应用

安科瑞虞佳豪 变电所运维云平台可以看做是电力监控系统的网络应用延伸,变电所运维云平台通过互联网,电力运维人员通过手机可以随时随地了解工厂配电系统的运行情况,做到无人值守或者少人值守,同时可以监测用能状况、漏电、线缆异…...

【51单片机】AT24C20数据帧(I2C总线)

🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Love Story】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 小吉先向大家道个歉,因为最近在期末…...

Python内置函数isinstance()函数介绍

Python内置函数isinstance()函数介绍 isinstance() 函数是Python内置函数,来判断一个对象是否是一个已知的类型,返回值为布尔值True或False。其语法格式: isinstance(object, classinfo) 【官方说法https://docs.python.org/zh-cn/3/librar…...

QxRibbon 知:搭建 CMake 构建环境

文章目录 前言安装 cmake问题处理qtcreator 检测 CMake 异常 参考资料 前言 高版本的 QtCreator 已经集成了 cmake 工具,并支持以 CMakelists.txt 文件作为工程开发项目。 https://www.qt.io/blog/2019/07/30/update-on-cmake-project-support-in-qt-creator 安装…...

Spring框架-面试题核心概念

目录 1.Spring框架的作用是什么? 2. 什么是DI? 3.什么是AOP? 4.Spring常用注解 5.Spring中的设计模式 6.Spring支持的几种bean的作用域 7.Spring中Bean的生命周期? 8.Spring中的事务管理 9.Spring中的依赖注入方式有几种 10.Sprin…...

Tomcat部署及优化

Tomcat部署及优化 一、Tomcat的介绍1.Tomcat核心组件2.Tomcat 功能组件结构3.Container 结构分析:4.Tomcat处理请求过程 二、Tomcat 部署步骤1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下2.安装JDK3.设置JDK环境变量4.编写一个java 简易的源代码…...

C++/C按照时间命名保存bin文件

背景 在Linux应用编程过程中,使用C或者C语言保存、读取bin文件是比较常见的需求。这里详细记录一下使用C保存bin文件,也可以使用C语言实现。 代码 C/C语言保存bin文件函数,C中也能使用 正确写入返回0,错误返回-1 // C 保存bi…...

面向多告警源,如何构建统一告警管理体系?

本文介绍告警统一管理的最佳实践,以帮助企业更好地处理异构监控系统所带来的挑战和问题。 背景信息 在云原生时代,企业IT基础设施的规模越来越大,越来越多的系统和服务被部署在云环境中。为了监控这些复杂的IT环境,企业通常会选…...

【kafka】Golang实现分布式Masscan任务调度系统

要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

Vue ③-生命周期 || 脚手架

生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...