iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
AI/ ML & Data

菜就多練之我叫小賀逃離DS新手村系列 第 12

Day 12 層層把關-模型守門員

  • 分享至 

  • xImage
  •  

前向傳播(Forward Propagation)🐭

前向傳播的目的是根據目前模型參數(weight和bias)對輸入資料進行預測並透過激活函數(activation function)進行非線性轉換,產生該層的輸出並作為下一層的輸入。白話解釋就是從輸入層到輸出層的運算。


損失函數(Loss Function)🐮

計算預測結果與實際結果的「誤差」。在機器學習和深度學習中,都有一個希望最大或最小的函數(指標)。損失函數的目的就是希望我們預測的結果跟實際結果誤差最小。

常見的損失函數包括均方誤差(MSE)、交叉熵損失(Cross-Entropy Loss)等,這些損失函數根據不同的任務類型(如迴歸或分類)而選擇不同的形式。


梯度(Gradient)🐯

表示模型參數發生變化時,損失函數的變化率。也就是說,梯度告訴我們應該如何調整模型參數以減小損失函數的值。


反向傳播(Backward Propagation)🐰

反向傳播是一種計算損失函數對模型參數梯度的方法。通過這些梯度,我們可以了解每個參數的變化方向和大小。反向傳播使用chain rule,將損失函數的梯度從輸出層逐步向輸入層回傳,並依據這些梯度更新模型的參數,以此來提高模型的性能。


實戰演練 🔥

程式碼如下:

import torch
import torch.nn as nn
import torch.optim as optim

# 建立一個神經網絡模型
class NeuralNetwork(nn.Module):
def __init__(self):
super(NeuralNetwork, self).__init__()
self.fc1 = nn.Linear(2, 3) # 輸入層到隱藏層
self.fc2 = nn.Linear(3, 1) # 隱藏層到輸出層
self.relu = nn.ReLU() # 激活函數

# 定義前向傳播
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out

# 初始化模型、損失函數和優化器
model = NeuralNetwork()
criterion = nn.MSELoss() # 使用均方誤差作為損失函數
optimizer = optim.SGD(model.parameters(), lr=0.01) # 使用隨機梯度下降進行優化

# 假設一些訓練資料
inputs = torch.tensor([[1.0, 2.0], [2.0, 3.0], [3.0, 4.0]])
targets = torch.tensor([[3.0], [5.0], [7.0]])
  
# 前向傳播
outputs = model(inputs)
print("前向傳播的輸出:", outputs)

# 計算損失
loss = criterion(outputs, targets)
print("損失:", loss.item())

# 反向傳播
loss.backward()
print("每個參數的梯度:")
for param in model.parameters():
print(param.grad)

# 更新參數
optimizer.step() 

# 輸出更新後的參數
print("更新後的參數:")
for param in model.parameters():
print(param)

輸出結果如下:
https://ithelp.ithome.com.tw/upload/images/20240816/20155713wm9LnY9YUG.png


題外話😂

現在是星期五晚上要去嗨啦🍺


參考資料 💯

機器/深度學習: 基礎介紹-損失函數(loss function)


上一篇
Day 11 枕戈待旦-我想放假了PyTorch
下一篇
Day 13 日新月異-優化器啟動
系列文
菜就多練之我叫小賀逃離DS新手村30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言