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

KAN(Kolmogorov-Arnold Network)的理解 3

系列文章目录

第一部分 KAN的理解——数学背景
第二部分 KAN的理解——网络结构
第三部分 KAN的实践——第一个例程


文章目录

  • 系列文章目录
  • 前言
  • KAN 的第一个例程 get started


前言

这里记录我对于KAN的探索过程,每次会尝试理解解释一部分问题。欢迎大家和我一起讨论。
KAN tutorial

KAN 的第一个例程 get started

以下内容包含对于代码的理解,对于KAN训练过程的理解和代码的解释。并且包含代码的结果。

  1. 对于KAN进行初始化。
from kan import *
# create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k=3), 5 grid intervals (grid=5).
model = KAN(width=[2,5,1], grid=5, k=3, seed=0)

从上面的代码可以看出,输入两维,说明要拟合的数据有两个输入变量,hidden neurons5个说明是全连接网络,还没有进行剪枝。

gird intervel表示用于拟合的样条函数的一组离散点,这些点用于分段构造样条函数。网格设定的约密集对于拟合的函数精度越高,想要提高网络的拟合能力,一般会增加grid interval的数目,在论文中称为grid extension。

这里的k是指一次样条、二次样条等这里的次数。表示在每个区间内拟合函数时,使用的是多少次数的多项式表示。

seed为随机数种子,通过设置随机数种子seed=0,模型的初始化(如权重初始化)和任何涉及随机性的过程都会产生相同的结果。

  1. 创建数据集,用于作为训练的输入
# create dataset f(x,y) = exp(sin(pi*x)+y^2)
f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2)
dataset = create_dataset(f, n_var=2)
dataset['train_input'].shape, dataset['train_label'].shape

从输出和函数定义来看,默认KAN的train number和test number都是1000

create_dataset函数的功能为生成一系列的数据字典,包括train_input,train_label,test_input,test_label

第一行lambda函数用于定义匿名函数,接收二维函数x为输入,并返回一个新张量f,为其仅进行特定的数学运算并返回结果

  1. 绘制初始化结果
# plot KAN at initialization
model(dataset['train_input'][:20]);
model.plot(beta=100,sample=True)

额外提一句,在做初始化的时候,这里的有一些默认参数没给出来。
在初始化时,已经生成了每个节点的被学习的weight函数曲线的可视化,且被保存在./figures下,在初始化时添加了noise,所以每个节点的曲线形状不同,且在定义模型时还有supervised mode和unsupervised mode可以选择。

这部分代码的功能主要是,在初始化网络时给出了初始化时的可视化。结果如下:
在这里插入图片描述

  1. 模型训练并设置对应的参数
# train the model
model.train(dataset, opt="LBFGS", steps=20, lamb=0.01, lamb_entropy=10.);

一些参数:
dataset:输入的训练数据
opt:优化算法选择,有LBFGS和Adam算法可供选择,分别问基于二阶导数的算法和基于一阶导数的优化算法
step:训练步数
lamb:控制整体正则化项的强度,能够增强训练的稀疏性,保留有效项
lamb_entropy:控制熵正则化项的强度,能有效减少激活函数的数量,避免出现相同或非常相似的函数

从代码的内容上看,在训练中,已经在进行有效项的保留,重复项的去除。
1000的数据量大概要处理11s

画出此时的第一次训练后的图,发现被判定为不重要的项的透明度增强了许多,在图上显示表示为不重要的部分。

结果如下:
在这里插入图片描述

  1. 剪枝
# model.prune(mode='manual',active_neurons_id=[[3],[2]] )
model.prune()
model.plot(mask=False)

做一些剪枝,直接减掉一些不重要的node。prune的原则是查看每个node的入边和出边,
如果某个节点所连接的入边和出边的属于不重要的边,那么这些边可以被剪枝。
这里的默认参数是自动剪枝,但是实际上也可以选择手动剪枝,确要保留的节点。

  1. 再剪枝
model = model.prune()
model(dataset['train_input'][:20])
model.plot(sample=True)

再剪枝,得到更小的模型。这里的dataset[‘train_input’]应该是用来测试目前的训练结果的。结果如下:
在这里插入图片描述

  1. 再训练
model.train(dataset, opt="LBFGS", steps=50);

现在得到的结果是去掉了一些node的结果,在更少的nodes被保留的情况下,继续进行训练

从训练的结果可以结案到现在的精确度变高了,可能是因为减少了node,保留了可信度更强的node

  1. 再看一遍训练结果。
model.plot()

结果如下:
在这里插入图片描述

  1. 确定要fix的项
mode = "auto" # "manual"
# 设置mannual会报错if mode == "manual":# manual mode# fix_symbolic()方程下的参数,(layer index,layer index,output neuron index)model.fix_symbolic(0,0,0,'sin');model.fix_symbolic(0,1,0,'x^2');model.fix_symbolic(1,0,0,'exp');
elif mode == "auto":# automatic modelib = ['x','x^2','x^3','x^4','exp','log','sqrt','tanh','sin','abs']model.auto_symbolic(lib=lib)

结果如下:
在这里插入图片描述

  1. 最后输出数学表达式
model.train(dataset, opt="LBFGS", steps=50);
model.symbolic_formula()[0][0]

这里可能出现的问题是,会多余出一些小项,比如预测了正确的公式但是结尾部分会加上一个很小的数值,或者加上一个值很小的表达式。
结果如下:
在这里插入图片描述

相关文章:

KAN(Kolmogorov-Arnold Network)的理解 3

系列文章目录 第一部分 KAN的理解——数学背景 第二部分 KAN的理解——网络结构 第三部分 KAN的实践——第一个例程 文章目录 系列文章目录前言KAN 的第一个例程 get started 前言 这里记录我对于KAN的探索过程,每次会尝试理解解释一部分问题。欢迎大家和我一起讨…...

lux和ffmpeg进行下载各大主流自媒体平台视频

1、lux下载,链接:https://pan.baidu.com/s/1WjGbouL3KFTU6LeqZmACpA?pwdagpp 提取码:agpp 2、ffmpeg下载,跟lux放在同一个目录; 3、为lux、ffmpeg设置环境变量; 4、WINR,打开运行&#xff0…...

day25-XML

1.xml 1.1概述【理解】 1.2语法规则【应用】 1.5DTD约束【理解】 1.6schema约束【理解】 1.4xml解析【应用】 概述 xml解析就是从xml中获取到数据 常见的解析思想 DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看做成对应的对象。 会把xml文件全部加载到…...

Mixly 开启WIFI AP UDP收发数据

一、开发环境 软件:Mixly 2.0在线版 硬件:ESP32-C3(立创实战派) 固件:ESP32C3 Generic(UART) 测试工工具:NetAssist V5.0.1 二、实现功能 ESP32开启WIFI AP,打印接入点IP地址,允许…...

OCR图片转Excel表格:没结构化的弊端

随着OCR技术的不断发展,将表格图片转为excel已不再是难题,但是,目前市面上的程序还大多处于仅能将图片表格转为普通的excel格式阶段,而不能将其结构化,这样就会产生许多的弊端,具体弊端如下: &l…...

查看所用数据库的版本

通过查询 SELECT VERSION();...

U盘感染病毒,不必急于扔掉!教你如何有效清除U盘中的病毒

U盘被感染了只能扔掉吗?随着信息时代的飞速发展,U盘已成为我们日常生活中不可或缺的存储设备。然而,在使用U盘的过程中,我们有时会遇到U盘被病毒感染的情况。面对这一问题,许多人可能会感到恐慌,甚至想要直…...

新手小白也能玩转跨境电商:从零到精通的操作流程

随着全球化的浪潮愈演愈烈,跨境电商已成为众多创业者和企业家的瞩目焦点。然而,对于初涉此领域的新手来说,从零开始构建跨境电商业务可能会面临诸多挑战。本文将为您梳理跨境电商运营的基本操作流程,并指引新手小白如何迈出坚实的…...

川北医学院与爱尔眼科医院集团签署战略合作协议共谋医学发展新篇章

为深入贯彻落实党的二十大精神,统筹校、企、医、政多方资源,服务“健康中国”战略,推动眼健康产业发展,打造国家及区域级眼科医学中心,2024年5月31日,川北医学院与爱尔眼科医院集团在成都举行战略合作协议签…...

利用映射算子打印菱形

文章目录 一、利用RDD完成(一)右半菱形(二)左半菱形(三)完整菱形(四)输出任意大菱形 二、利用Java完成(一)右半菱形(二)左半菱形&…...

亚信安全正式推出5G专网安全测试服务 圆满完成核电客户5G项目落地

近日,亚信安全联合北京触点互动信息技术有限公司成功完成某核电客户5G专网项目,从终端安全,基站,核心网网元,切片安全以及接口安全等重点存在安全风险点进行测试,发现潜藏的安全隐患漏洞,为客户…...

第二十五章CSS中的技巧(导航栏、下拉列表)

1.CSS精灵 1.什么是CSS精灵 英文叫法 CSS sprites,通常被解释为“CSS图像拼合”或“CSS贴图定位”;其实就是把网页中一些背景图片整合到一张图片文件中,再利用css“background-image”, “background-repeat”,“background-position”的组…...

大话设计模式解读01-简单工厂模式

本系列的文章,来介绍编程中的设计模式,介绍的内容主要为《大话设计模式》的读书笔记,并改用C语言来实现(书中使用的是.NET中的C#),本篇来学习第一章,介绍的设计模式是——简单工厂模式。 1 面向对象编程 …...

35python数据分析numpy基础之setdiff1d求两个数组的差集

1 python数据分析numpy基础之setdiff1d求两个数组的差集 python的numpy库的setdiff1d(x,y)函数,表示数组x与y的差,即在x且不在y中的元素,且进行去重排序。 用法 numpy.setdiff1d(ar1, ar2, assume_uniqueFalse)描述 numpy.setdiff1d(ar1,…...

JVM 指针压缩

运用java内存对齐填充,对java内存进行8字节划分,java对象指针映射到每个划分区域上,使得4个字节(32位)表示2^32个地址,从而使4个字节指针映射32G内存空间。 1.为什么进行指针压缩: jvm从32位变…...

时序预测 | Matlab灰色-马尔科夫预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab灰色-马尔科夫预测 灰色马尔科夫预测(Grey-Markov Prediction)是一种用于时间序列预测的方法,它结合了灰色系统理论和马尔科夫链模型。灰色系统理论是一种非参数化的预测方法…...

代码界的奥斯卡:SpringBoot测试的艺术与科学

探索SpringBoot测试的神秘世界,揭秘如何成为代码质量的守护神!从基础环境搭建到高级集成测试,本系列教程带你一步步构建坚不可摧的测试防线。深入JUnit 5的强大功能,学习如何用MockMvc和Testcontainers打造逼真的测试场景。准备好…...

安防监控视频平台LntonCVS视频监控汇聚平台遏制校园暴力保护校园学生安全应用方案

未成年人被誉为祖国的花朵,是我们国家的未来。然而,最近频繁曝出的未成年霸凌事件却引发了社会的广泛关注。这些事件手段残忍,事态恶劣,引发了全社会对如何保护未成年身心健康、规避霸凌事件发生的深刻思考。 为了更好地保障学生的…...

Python | 平均绩点

字符串的概念和特点 字符串既可以使用单引号,也可以使用双引号""来创建 可以使用运算符来拼接字符串,并返回字符串拼接后的结果。 first_name "Tom" last_name "Jerry" full_name first_name " " &quo…...

2024年有什么值得入手的5G长期套餐大流量卡推荐?大流量手机卡入手指南(超4款正规手机卡实测总结)

前言 24年有什么值得入手的5G大流量卡推荐?大流量手机卡入手指南(超4款正规手机卡实测总结) 四大运营商有哪些大流量卡,可电话,非物联网卡 所有卡激活后,均可以在官方app可查、 所有都是优惠长期 5G大流…...

《尚上优选》项目Bug记录

写在前面 本项目为该系列第二个项目,有一些问题如果没有在本文摘录,可以到 《云尚办公》项目 BUG记录 中查找是否有类似的解决方案。 (2024.3.24以下) (P11) 管理端前端node20版本启动报OpenSSL错误 经典问题,把we…...

Flutter 中的 PopupMenuTheme 小部件:全面指南

Flutter 中的 PopupMenuTheme 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它允许开发者使用 Dart 语言构建美观、响应式的移动、Web 和桌面应用。Flutter 的 Material 组件库中包含了丰富的 UI 组件,其中 PopupMenuButt…...

uni-app的网络请求库封装及使用(同时支持微信小程序)

其实uni-app中内置的uni.request()已经很强大了,简单且好用。为了让其更好用,同时支持拦截器,支持Promise 写法,特对其进行封装。同时支持H5和小程序环境,更好用啦。文中给出使用示例,可以看到使用变得如此…...

力扣524. 通过删除字母匹配到字典里最长单词

给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。 示…...

【代码随想录】【算法训练营】【第27天】 [39]组合总和 [40] 组合总和II [131]分割回文串

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day26, 休息的周末~ day 27,周一,库存没了,哭死~ 题目详情 [39] 组合总和 题目描述 39 组合总和 解题思路 前提:组合的子集问题&…...

解决 git 命令 Problem with the SSL CA cert (path? access rights?)

/etc/pki/nssdb 错误 运行命令: GIT_CURL_VERBOSE1 git clone git_repo_url 会输出详细错误信息 Cloning into fp_sdk... * Couldnt find host xxx.com in the .netrc file; using defaults * About to connect() to xxx.com port 443 (#0) * Trying 10.44.52.7…...

详解:重庆耶非凡的选品师项目有哪些优势?

在竞争激烈的电商市场中,重庆耶非凡科技有限公司凭借其独特的选品师项目,成功地在众多企业中脱颖而出。这一项目不仅体现了公司对市场趋势的敏锐洞察力,更彰显了其专业的选品能力和对消费者需求的深刻理解。 首先,耶非凡的选品师项…...

DSP28335模块配置模板系列——GPIO配置模板

在自己的电脑上构建出一套模块配置模板,可以大幅节省DSP程序开发时间,从而达到事半功倍的效果。对于初学者,掌握了模块配置,也就能实现大部分的单片机功能。 在DSP28335模块配置模板系列,不仅会给出GPIO、ADC、EQEP、E…...

【SringBoot项目中MyBatis-Plus多数据源应用实践】

文章目录 前言 一、Mybatis-Plus是什么? 二、多数据源是什么? 三、使用步骤 1. 新建一个SpringBoot项目 2. 引入必要的MyBatis架包 3. 新建两个数据库及两张表 3.3.1 新建数据库:DB_A,并创建一张数据表alarm_kind,以及…...

Android 图表开发开源库 MPAndroidChart 使用总结

1. 引言 电视项目中需要一个折线图表示节电数据变化情况,类比 H5 来说,Android 中也应该有比较成熟的控件,经过调研后,发现 MPAndroidChart 功能比较强大,网上也有人说可能是目前 Android 开发最好用的一个三方库了&a…...