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]

這里可能出現的問題是,會多余出一些小項,比如預測了正確的公式但是結尾部分會加上一個很小的數值,或者加上一個值很小的表達式。
結果如下:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21855.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21855.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21855.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百度/迅雷/夸克,網盤免費加速,已破!

哈嘍,各位小伙伴們好,我是給大家帶來各類黑科技與前沿資訊的小武。 之前給大家安利了百度網盤及迅雷的加速方法,詳細方法及獲取參考之前文章: 剛剛!度盤、某雷已破!速度50M/s! 本次主要介紹夸…

Python sorted 用法:深入解析排序函數的奧秘

Python sorted 用法:深入解析排序函數的奧秘 在Python編程中,sorted函數是一個強大的工具,用于對可迭代對象進行排序。然而,它的用法和功能遠不止表面看起來那么簡單。本文將深入剖析sorted函數的四個方面、五個方面、六個方面和…

simulink基礎學習筆記

寫在前面 這個筆記是看B站UP 快樂的宇航boy 所出的simulink基礎教程系列視頻過程中記下來的,寫的很粗糙不完整,也不會補。視頻教程很細跟著做就行。 lesson1-7節的筆記up有,可以加up的群,里面大佬挺活躍的。 lesson8 for循環 For …

【C++初階學習】第十二彈——stack和queue的介紹和使用

C語言棧:數據結構——棧(C語言版)-CSDN博客 C語言隊列:數據結構——隊列(C語言版)-CSDN博客 前言: 在之前學習C語言的時候,我們已經學習過棧與隊列,并學習過如何使用C語言來實現棧與隊列&…

Python | 平均績點

字符串的概念和特點 字符串既可以使用單引號,也可以使用雙引號""來創建 可以使用運算符來拼接字符串,并返回字符串拼接后的結果。 first_name "Tom" last_name "Jerry" full_name first_name " " &quo…

OCR圖片轉Excel表格:沒結構化的弊端

隨著OCR技術的不斷發展,將表格圖片轉為excel已不再是難題,但是,目前市面上的程序還大多處于僅能將圖片表格轉為普通的excel格式階段,而不能將其結構化,這樣就會產生許多的弊端,具體弊端如下: &l…

數據容器的通用操作、字符串大小比較 總結完畢!

1.數據容器的通用操作 1)五類數據容器是否都支持while循環/for循環 五類數據容器都支持for循環遍歷 列表、元組、字符串都支持while循環,集合、字典不支持(無法下標索引) 盡管遍歷的形式不同,但都支持遍歷操作 2&a…

辦公軟件 Office 安裝教程(親測有效)

Office 現已更名為 Microsoft 365。習慣還是稱作 Office。 1、Office 套裝下載 Windows 的樣子 這里下載的是最新版本的 O365ProPlus 安裝完成后,點擊關閉(請先不要打開)。 Mac 的樣子 這里下載的是Office for Mac 2019(更多版…

QNAP的jellyfin無法使用TMDB刮削的問題

解決方法很簡單,修改QNAP的HOSTS文件 使用DNS Checker工具查詢對應IP: image.tmdb.org api.themoviedb.org www.themoviedb.org 打開hosts文件,添加下列內容,wq保存 [~] # vi /etc/hosts 169.150.249.166 image.tmdb.org 103.2…

速遞FineWeb:一個擁有無限潛力的15T Tokens的開源數據集

大模型技術論文不斷,每個月總會新增上千篇。本專欄精選論文重點解讀,主題還是圍繞著行業實踐和工程量產。若在某個環節出現卡點,可以回到大模型必備腔調或者LLM背后的基礎模型新閱讀。而最新科技(Mamba,xLSTM,KAN)則提…

【TB作品】MSP430F149單片機,6通道ADC,串口發送

功能 用6個引腳采集ADC,串口發送到電腦 部分程序 /** Otherwise, the compiler removes it* because it is not used for anything.*/ int kaiguanliang[4]; /* 四個開關量 */unsigned char adok_ifg 1; …

內核宕機自救

【問題】在測試內核級防篡改時,偶爾會遇到內核宕機的問題 【結論】進入緊急救援模式,將服務進程文件的start注釋掉,即可 在Linux系統啟動時,內核啟動順序選擇界面,進入系統歡迎界面按上下左右鍵進入GRUB界面&#xff…

歐佩克+同意集體性減產延長,油價能否穩住?

KlipC報道:歐佩克組織同意將延長目前部分減產協議至2025年,以支撐油價。主要成員國把2023年11月宣布的日均220萬桶的自愿減產措施延長至今年9月底,將在10月份根據市場情況開始縮減自愿減產規模。 高盛分析師表示,“我們認為這次歐…

python常見數據分析函數

apply DataFrame.apply(func, axis0, broadcastFalse, rawFalse, reduceNone, args(), **kwds) 第一個參數是函數 可以在Series或DataFrame上執行一個函數 支持對行、列或單個值進行處理 import numpy as np import pandas as pdf lambda x: x.max()-x.min()df pd.DataFrame(…

高端、大氣、很牛B的免費wordpress模板主題

這是一款專為WordPress打造的極簡主義風格主題,以白色和黑色為主色調,搭配紅色點綴,營造出一種簡潔、專業且具有視覺沖擊力的效果。 該主題的設計理念是“簡單即美”,旨在幫助用戶快速搭建一個美觀、易用的網站。它提供了豐富的自…

動態sql set標簽 , trim標簽

set標簽 來看例子 set標案解決了逗號問題(當if條件不滿足時,逗號無處安放的問題),我認為set標簽可以識別這個問題,并自動忽略這個問題 <update id"update">update employee<set><if test"name!null">name#{name},</if><if te…

使用 Python 處理 Excel 表格數據的實用技巧

簡介 在日常工作中&#xff0c;處理 Excel 表格數據是一項常見的任務。Python 提供了豐富的庫和工具&#xff0c;能夠幫助我們高效地處理 Excel 數據。本篇博客將介紹如何使用 openpyxl 庫來讀取 Excel 表格并進行數據處理&#xff0c;同時展示一個實際案例&#xff0c;說明如…

3079. 求出加密整數的和

給你一個整數數組 nums &#xff0c;數組中的元素都是 正 整數。定義一個加密函數 encrypt &#xff0c;encrypt(x) 將一個整數 x 中 每一個 數位都用 x 中的 最大 數位替換。比方說 encrypt(523) 555 且 encrypt(213) 333 。 請你返回數組中所有元素加密后的 和 。 示例 1&…

HTML基本元素包含HTML表單驗證

可將以下代碼復制另存為一個HTML文件瀏覽器打開自己去看看實際使用效果 <!DOCTYPE html> <html> <head> <meta charset"utf-8"><title>測試</title> </head> <body> <h1>很多事</h1> <h1><b&…

多項分布模擬及 Seaborn 可視化教程

多項分布 簡介 多項分布是二項分布的推廣&#xff0c;它描述了在 n 次獨立試驗中&#xff0c;k 種不同事件分別出現次數的離散概率分布。與二項分布只能有兩種結果&#xff08;例如成功/失敗&#xff09;不同&#xff0c;多項分布可以有 k 種&#xff08;k ≥ 2&#xff09;及…