# PyTorch入門1 :::spoiler {state=open}<h5>by</h5> >林侑辰 ---- ## 認識人工智慧 + Artificial Intelegence 人工智慧 + Machine Learning 機器學習 + Deep Learning 深度學習 ![ai-vs-ml-vs-dl-e1588741387626](https://hackmd.io/_uploads/rJvAdiqTT.png =40%x) ---- ### 機器學習的概念 我們藉由將資料丟給我們設定好的演算法或神經網路,使它從這些資料中學習來找出規律,使它得以從經驗中學習並且能有不同功能,如:預測,分類... *** ### 三大類學習方法 監督式學習、非監督式學習、強化學習 ---- #### 監督式vs非監督式學習 + 監督式學習:資料已有答案,例如:分類貓的照片以及狗的照片 + 非監督式學習:資料並無答案,需要藉由程式來進行聚類等處理 ![Supervised-and-unsupervised-machine-learning-a-Schematic-representation-of-an](https://hackmd.io/_uploads/rJFBy25pp.png =45%x) ---- #### 強化學習: + agent自行藉由環境的回饋(Reward)選擇行為 ![Reinforcement-Learning-Model](https://hackmd.io/_uploads/SJJfbks6p.png =60%x) ---- ## PyTorch簡介 PyTorch是一個起初由FB/META開發的機器學習函式庫,現今開源且廣受各大企業使用,如:Tesla、Microsoft等...。 內建了許多用於python的機器學習功能、演算法、預建模型等等... + 可使用GPU/TPU(Tensor Processing Unit)加速運算 ![0_RjEV6cCRPerIF8U1](https://hackmd.io/_uploads/ByZPUJspT.png =60%x) ---- ### 瞭解訓練模型的步驟 ![01_a_pytorch_workflow](https://hackmd.io/_uploads/BkGOuJsap.png) ---- ### 實作 + 編譯環境![colab_favicon_256px](https://hackmd.io/_uploads/BkgiL9aTp.png) 我們會使用Google Colab,是一個基於雲端的免費 Jupyter 筆記本環境,讓使用者可以在瀏覽器上寫程式碼,並且可以利用 Google 的雲端運算資源執行程式碼。 ---- + 使用方法 進入google雲端硬碟,按下新增之後就可以選擇Google Colaboratory ![image](https://hackmd.io/_uploads/HywPPcTp6.png =60%x) ---- 簡單範例:試試看預測值是否跟實際值符合 ```python= x = 3 #1.準備資料 y = 6 # 設定實際值 class SimpleLinearRegression: #2.建立模型 def __init__(self): self.slope = 2 # 設定斜率為2 def predict(self, value): return self.slope * value model = SimpleLinearRegression() #3.進行預測 y_pred = model.predict(x) print("預測值:",y_pred,"實際值:",y) #4.衡量模型 ``` ---- ### 認識模型結構 #### import 將必要使用到的函式庫導入 ```python= import torch import torch.nn as nn import torch.optim as optim ``` ---- #### 資料準備 ```python= x_train = torch.rand((100, 4)) y_train = torch.rand((100, 1)) ``` ---- - Tensor/張量: PyTorch tensor可以加速電腦的運算速度 ![image](https://hackmd.io/_uploads/SkOOwJipT.png =70%x) ---- #### 模型架構: [神經網路](https://evan-hsiao.medium.com/%E5%BE%9Ecoursera%E5%AD%B8%E7%BF%92%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92-bd6bad6f5e14) - 輸入層負責接收外部輸入,輸出層負責產生最終輸出,而隱藏層則通過特徵提取和轉換來實現神經網絡的計算和學習。 ![image](https://hackmd.io/_uploads/S1lHzh9ap6.png =55%x) ---- 向前傳播(forward propagation): 每一層網路裡面的每個節點,都會如圖所示,把前一層所有的節點視為特徵,並將每個特徵乘上權重後得到z,再經由啟動函數得到a,形成新的節點。 ---- + 使用Class來架構模型或神經網路:例如 ```python= class SimpleNN(nn.Module): def __init__(self): super(SimpleNN, self).__init__() self.fc1 = nn.Linear(4, 8) self.relu = nn.ReLU() # Activation function self.fc2 = nn.Linear(8, 1) def forward(self, x): x = self.fc1(x) x = self.relu(x) x = self.fc2(x) return x ``` ---- [Activation Function?](https://zh.wikipedia.org/zh-tw/%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0) 常見的activation function ![image](https://hackmd.io/_uploads/BkD-Am6TT.png =70%x) ---- 簡而言之,Activation Function,就是把計算好了的輸入值standardize 好,規範它的「輸出數值之範圍」,「輸出數值的相互關係」 ![image](https://hackmd.io/_uploads/Hy20yE6ap.png =40%x) to ![image](https://hackmd.io/_uploads/r1B1gVp6T.png =40%x) 使用ReLU做轉換的結果 ---- #### 建立訓練迴圈 [Loss Fuction](https://cinnamonaitaiwan.medium.com/cnn%E6%A8%A1%E5%9E%8B-%E6%90%8D%E5%A4%B1%E5%87%BD%E6%95%B8-loss-function-647e13956c50) 用於衡量模型預測與實際目標之間的差異。以下是兩種常見的損失函數及其用途: - Mean Squared Error:用於回歸問題,計算預測值與實際值之間的平方差,然後取平均值。 - Cross Entropy Loss:用於分類問題,特別是在多類別分類中。它衡量模型預測的概率分佈與實際標籤之間的差異。 ---- [Optimizer](https://medium.com/%E9%9B%9E%E9%9B%9E%E8%88%87%E5%85%94%E5%85%94%E7%9A%84%E5%B7%A5%E7%A8%8B%E4%B8%96%E7%95%8C/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92ml-note-sgd-momentum-adagrad-adam-optimizer-f20568c968db) 在機器學習中用於調整模型的參數,以最小化損失函數。它決定了在模型訓練過程中如何調整參數,以使模型更好地擬合訓練數據。 - Gradient Descent:是最基本的優化算法之一,通過計算損失函數對參數的梯度,來更新參數值以降低損失。 - Adam:結合了動量和自適應學習率的方法,通常在實踐中表現良好。 ---- 初始化模型: ```python= model = SimpleNN() criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=0.001) num_epochs = 10000 ``` ---- 迴圈本體: ```python= for epoch in range(num_epochs): outputs = model(x_train) loss = criterion(outputs, y_train) optimizer.zero_grad() loss.backward() optimizer.step() if (epoch+1) % 1000 == 0: print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}') ``` ----
{"title":"PyTorch入門 1","description":"先手基礎知識","showTags":"false","contributors":"[{\"id\":\"0007669a-47f5-43b3-9d2c-38fa9230ec81\",\"add\":5947,\"del\":1694}]"}
    201 views