PINN零基礎(chǔ)入門指南,附代碼(一)

目標(biāo)

使用最簡的神經(jīng)網(wǎng)絡(luò)模型來擬合簡單函數(shù)

內(nèi)容介紹

  • 神經(jīng)網(wǎng)絡(luò)模型
  • PINN零基礎(chǔ)入門指南,附代碼(一)的圖1

如上圖所示,為最簡單的MLP架構(gòu)(隱藏層的線性簡單堆疊,隱藏層的圓圈即表示一個神經(jīng)元),本文采用一個隱藏層64個神經(jīng)元,一個輸入層一個輸出層,表示變量所在層數(shù),和表示變量所在層的位置,表示第層第個神經(jīng)元的值,所有神經(jīng)元的和為優(yōu)化參數(shù)下文用指代。

為激活函數(shù),通常情況下激活函數(shù)有以下幾種,神經(jīng)網(wǎng)絡(luò)添加激活函數(shù)的原因是,線性函數(shù)的疊加無法表示非線性函數(shù),本文采用的是函數(shù)PINN零基礎(chǔ)入門指南,附代碼(一)的圖2

  • 損失函數(shù)

是需要訓(xùn)練的神經(jīng)網(wǎng)絡(luò)參數(shù),是訓(xùn)練結(jié)果,是真實結(jié)果,本文采用均方誤差即:

除此之外也有一些其他的誤差形式,這里就不一一舉例。損失函數(shù)決定了優(yōu)化目標(biāo),優(yōu)化器通過梯度下降法優(yōu)化,即:

是步長也叫學(xué)習(xí)率,當(dāng)前減去步長乘以梯度就是更新后的參數(shù)值,現(xiàn)成的梯度算法工具有很多,本文采用Adam。

  • 反向傳播

在優(yōu)化過程中需要對損失函數(shù)關(guān)于優(yōu)化參數(shù)求導(dǎo),獲得每一個優(yōu)化參數(shù)對損失函數(shù)的影響即梯度計算:

具體方法如下圖所示,采用鏈?zhǔn)椒▌t的方法從后往前計算,因此也叫反向傳播。

PINN零基礎(chǔ)入門指南,附代碼(一)的圖3

步驟

  1. 準(zhǔn)備訓(xùn)練數(shù)據(jù):生成一些樣本點(diǎn) 
x=torch.linspace(0,1,101).reshape(-1,1)
y=torch.sin(x)
  1. 定義神經(jīng)網(wǎng)絡(luò)模型
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.hidden =nn.Linear(1,64)#隱藏層
        self.output = nn.Linear(64,1)#輸出層

    def forward(self, x):
        x=torch.relu(self.hidden(x))#Relu激活函數(shù)
        return self.output(x)
  1. 初始化模型,使用均方誤差(MSF)損失函數(shù)來衡量預(yù)測值和真實值之間的差異,選取Adam優(yōu)化器,更新網(wǎng)絡(luò)參數(shù),最小化損失函數(shù)
model = SimpleNN()#初始化模型
criterion = nn.MSELoss()#均方誤差損失函數(shù)
optimizer = optim.Adam(model.parameters(), lr=0.001)#Adam優(yōu)化器
  1. 開始訓(xùn)練模型
num_epochs = 5000#訓(xùn)練5000次
train_losses = []
val_losses = []
for epoch in range(num_epochs):
    model.train()#啟用訓(xùn)練模式
    optimizer.zero_grad()#清除梯度
    output_train = model(x_train)#前向傳播
    loss_train = criterion(output_train, y_train)#計算訓(xùn)練集損失
    loss_train.backward()#反向傳播
    optimizer.step()#更新參數(shù)
  1. 計算結(jié)果PINN零基礎(chǔ)入門指南,附代碼(一)的圖4

本本文涉及的完整代碼,請后臺回復(fù)關(guān)鍵詞" pinn-1" 獲取。

感謝每一位朋友的關(guān)注!期待能和大家在這個領(lǐng)域攜手前行,后續(xù)會有更多技術(shù)解讀和實戰(zhàn)技巧分享,我們一起學(xué)習(xí),共同成長!~~~??????

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

2
1