PINN求解burger方程,tensorflow框架,附代碼(三)
瀏覽:1534
PINN求解burger方程,tensorflow框架,附代碼(三)
TensorFlow 1.x和TensorFlow 2.x區(qū)別
- TensorFlow 1.x版本只有靜態(tài)圖模式,需要手動(dòng)構(gòu)建計(jì)算圖,調(diào)試?yán)щy,但性能好。
- TensorFlow 2.x 初期:默認(rèn)Eager Execution,易于調(diào)試,但性能較差。TensorFlow 2.x + @tf.function:兩全其美:易于調(diào)試 + 高性能,方便在Eager Execution和 Graph Execution間轉(zhuǎn)換
本文提供的代碼采用2.x版本
正問(wèn)題
已知,控制方程形式:
初始條件:
邊界條件:
該方程的解析表達(dá)式通過(guò)Hopf-Cole變換獲得,較為復(fù)雜,感興趣的讀者可自行搜索。
@tf.function def net_f(self, x, t): """Compute physics residual""" # 使用單個(gè)GradientTape計(jì)算所有導(dǎo)數(shù) with tf.GradientTape() as tape2: tape2.watch([x, t]) with tf.GradientTape(persistent=True) as tape1: tape1.watch([x, t]) u = self.net_u(x, t) # 計(jì)算一階導(dǎo)數(shù) u_t = tape1.gradient(u, t) u_x = tape1.gradient(u, x) # 計(jì)算二階導(dǎo)數(shù) u_xx = tape2.gradient(u_x, x) # 清理tapes del tape1 # Burgers方程殘差: u_t + u*u_x - nu*u_xx f = u_t + u * u_x - self.nu * u_xx return f
- persistent=True時(shí),tape1可以多次使用,但是需要手動(dòng)管理內(nèi)存,tape2自動(dòng)清理。
- 代碼運(yùn)行在Eager Execution模式下,但通過(guò)@tf.function可以在關(guān)鍵函數(shù)上獲得了Graph Execution的性能優(yōu)化。
反問(wèn)題
參數(shù)和未知,控制方程形式:
已知一些測(cè)試點(diǎn)數(shù)據(jù),反求未知參數(shù)。
np.linalg.norm(u_star, 2)
- 計(jì)算u_star的2范數(shù)
u_train_noisy = u_train + noise * np.std(u_train) * np.random.randn(u_train.shape[0], u_train.shape[1])
- 噪聲影響,np.std(u_train)是u_train的標(biāo)準(zhǔn)差,np.random.randn(u_train.shape[0], u_train.shape[1])標(biāo)準(zhǔn)正態(tài)分布取值
- 上圖中的黑色標(biāo)記為進(jìn)行訓(xùn)練的數(shù)據(jù)
- 通過(guò)上圖顯示的信息,可以看到精確數(shù)據(jù)訓(xùn)練結(jié)果和帶有噪聲數(shù)據(jù)訓(xùn)練結(jié)果和真實(shí)結(jié)果的對(duì)比。
本文涉及的正反問(wèn)題完整代碼,請(qǐng)后臺(tái)回復(fù)關(guān)鍵詞" pinn-3" 獲取。
感謝每一位朋友的關(guān)注!期待能和大家在這個(gè)領(lǐng)域攜手前行,后續(xù)會(huì)有更多技術(shù)解讀和實(shí)戰(zhàn)技巧分享,我們一起學(xué)習(xí),共同成長(zhǎng)!~~~??????
技術(shù)鄰APP
工程師必備
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺(tái)客服
TOP




















