当前位置: 首页 > 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环境,企业通常会选…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

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

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

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

12.找到字符串中所有字母异位词

🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐)​​ 在 save_images 方法中,​​删除或注释掉所有与 metadata …...