顯示具有 深度學習 標籤的文章。 顯示所有文章
顯示具有 深度學習 標籤的文章。 顯示所有文章

2025年10月3日 星期五

博客來買書一本 : 動手學深度學習

今天在網誌中搜尋 PyTorch 資料時, 找到去年寫的一篇關於深度學習的好書 :


當時博客來缺貨沒買到, 今日點進去發現庫存 1 本, 立馬下單買了 :   




87 折免運 573 元, 小七取貨付款. 

2024年10月23日 星期三

2024年4月2日 星期二

深度學習框架 DeZero 學習筆記 (一) : 變數與函數

昨天從母校圖書館借到下面這本齋藤康毅的好書 :



Source : 博客來


這本書上回借時看完前兩章, 這次我打算邊看邊測編寫筆記, 這樣才能紮實地吸收這本書的精華. 這本書的目標是只使用少數必要函式庫 (Numpy & Matplotlib) 從零打造精簡版的深度學習框架 DeZero, 與 PyTorch, TensorFlow 一樣具有 Define-by-Run 功能 (定義好運算圖連結即可執行), 不僅可在 Colab 雲端跑, 也可以在手機上跑. 

DeZero 已在 PyPi 上架, 如果要直接使用 DeZero 可用 pip install 安裝 (先不用) :

pip install dezero  

打造 DeZero 需要用到 Numpy 與 Matplotlib : 

pip install numpy  
pip install  matplotlib  

此書將打造 DeZero 框架的 60 個步驟分成五個階段 (一章就是一個步驟) :
  • 步驟 1~10 : 建立 DeZero 的基礎 (自動微分)
  • 步驟 11~24  : 使用 Pythonized 語法撰寫 DeZero
  • 步驟 25~36 : 計算二階微分以進行反向傳播
  • 步驟 37~51 : 用 DeZero 建立類神經網路
  • 步驟 52~60 : 用 DeZero 搭建 CNN 與 RNN 模型 
總之, 透過這種徒手打造深度學習框架的過程, 可以深刻理解深度學習的原理與框架結構. 

以下是 Ch1~2 關於建立變數與函數的筆記. 


1. 建立變數 : 

變數就是資料的容器 (箱子), 在 DeZero 中使用名為 Variable 的類別來作為存放變數的容器 :

class Variable:
    def __init__(self, data):
        self.data=data

這是標準的 Python 類別用法, 類別名稱首字元大寫符合 Python PEP8 原則, 函式 __init__() 用來對物件 (類別的實體) 進行初始化, 傳入參數 self 代表物件本身, 後面跟著的是使用者參數, 此處 data 為一個 Numpy 陣列 (ndarray 物件), 所以一個 Variable 物件就是用來儲存 ndarray 物件用的容器 :

>>> class Variable:  
    def __init__(self, data):  
        self.data=data  
        
先建立一個 Numpy 陣列 : 

>>> import numpy as np    
>>> data=np.array(1.0)  
>>> data   
array(1.0)    
>>> type(data)     
<class 'numpy.ndarray'>   

將陣列傳給 Variable() 建構式, 它會呼叫 __init()__ 初始化物件 : 

>>> x=Variable(data)  
>>> x.data   
array(1.0) 
 
可見 Numpy 陣列 data 已存入 x 物件的 data 屬性中.

 
1. 建立函數 : 

在數學上, 函數用來描述兩組變數之間的對應關係, 在 DeZero 框架裡, 則是定義一個名為 Function 的類別來實作函數, 它會定義一個 __call__() 函式, 接受一個 Variable 物件變數輸入, 然後將演算結果 (另一個 Variable 變數) 傳回作為輸出, 例如下面的平方函數 :

class Function:
    def __call__(self, input):
        x=input.data
        y=x ** 2
        output=Variable(y)
        return output

__call__() 為 Python 特殊函式, 定義此方法的類別可以把它的實體名稱當作函式直接呼叫, 例如 : 

>>> x=Variable(10)    # 建立 Variable 變數物件
>>> f=Function()        # 建立 Function 函數物件
>>> type(f)                  
<class '__main__.Function'>   
>>> y=f(x)                   # 呼叫函式物件並傳入資料 
>>> type(y)                 # 傳回 Variable 物件
<class '__main__.Variable'>
>>> y.data                   
100
>>> 

不過上面這個 Function 類別被固定做平方運算, 應該將特定運算 (例如平方) 交給 Function 的子類別 Square 的函式 forward() 來執行, 這樣 Function 就可泛化為可執行任何函數的類別, 改寫如下 : 

class Function:
    def __call__(self, input):
        x=input.data
        y=self.forward(x) 
        output=Variable(y)
        return output
    def forward(self, x):   # 讓子類別覆蓋的空方法
        raise NotImplementedError()   # 預防子類別沒有實作此方法時出現例外

class Square(Function):   # 繼承 Function 並覆蓋其 forward() 方法
    def forward(self, x):
        return x ** 2

此處將計算函數交由 Function 的子類別 Square 的方法 forward() 來做, 在 Function 類別則添加空的 forward() 方法 (讓子類別繼承時覆蓋掉), 然後修改 __call__ 裡的 輸出 y, 改為呼叫 forward() 來求值,  :

>>> x=Variable(10)   
>>> f=Square()         # 建立函數的類別
>>> y=f(x)                 # 建立函數類別的實體並傳入 x 求值
>>> type(f)   
<class '__main__.Square'>     # f 是 Square 物件
>>> type(y)      
<class '__main__.Variable'>   # f(x) 傳回值為 Variable 物件 
>>> y.data     
100

結果相同, 但此處的 Function 比上面更一般化了, 我們可以定義任何函數類別掛接到 Function 來求值, 例如求立方的函數類別 : 

>>> class Cube(Function):   # 繼承 Function 並覆蓋其 forward() 方法
    def forward(self, x):    
        return x ** 3   
    
>>> x=Variable(10)   
>>> f=Cube()   
>>> y=f(x)    
>>> y.data    
1000 

2024年3月29日 星期五

好書 : 動手學深度學習 (PyTorch 版)

今天在找資料時發現了左岸的一個網站 : 


仔細看原來是 Cambridge 出版的 "Dive into Deep Learning (2nd ed.)" 這本書的簡體版, 作者群為 Amazon 人工智慧專家, 第一版是用 Amazon 的 MXNet 框架實做的, 第二版改用 PyTorch (網站電子版還提供 JAX/TensorFlow 程式碼), 英文版紙本書天瓏書店有賣 : 



Source : 天瓏

簡體中文版博客來有, 但似乎已賣完 : 



Source : 博客來


此書看起來是電子版 Open Source, 因為全書內容都公布在網站上了, 英文版網址如下 :


書中範例程式碼也都可以在 GitHub 找到 :


我看了其中第 11 章的 Transformer 說明, 唉呦, 夭壽, 居然用 PyTorch 實作把 Transformer 架構講解得如此詳細 (例如 Q, K, V 的原理, 計算, 與圖解), 這就是我一直在尋找的 NLP 聖經啊! 我看完這一段的感想是 : 

在注意力經濟時代, 注意力可不是免費的, 當你集中注意力在某件事物 (例如學習 NLP 或打遊戲) 上時, 你支付的是機會成本 (追劇或交女友); 在使用免費資源 (例如 YT 影片) 上, 如果你不想被廣告分散注意力, 那就得掏錢. 對於大腦的算力而言, 注意力是稀缺的資源, 必須將有限的資源放在重要的資訊上, 視覺與語音的理解特別需要注意力, 否則大腦根本無法負荷龐大的影音資訊流, 所以 Attention is all you need 所言不虛啊! 

2024年2月24日 星期六

2024年1月19日 星期五

高科大還書 2 本 : 一步到位! Python 程式設計 & Deep Learning深度學習基礎

因有兩本預約書到館, 中午午休時拿下面兩本書去交換 :
No.1 只剩最後一章 (16) 關於 SciPy 的還沒看, No.2 有關於 RNN/LSTM 的詳解, 這兩本都會回借 (等消化完其他書). 

2023年7月31日 星期一

momo 買書兩本 : Azure WordPress 與深度學習

momo 66 折活動今天截止, 買了下面兩本深智的 :




雖然第二本母校可借, 但總是看一個月就被預約走, 趁 66 折買下來吧. 兩書合計 1359 元, 滿 1200 登記送 10% momo 幣 (那是 136 元媽?). 

2022年9月26日 星期一

更新 PyTorch 版本至 v1.12.1

今天參加 PyTorch 的內訓課程時發現我筆電的 Torch 版本 v1.0.0 太舊了, 現在穩定版本已到 v1.12.1, 為了避免得到與課堂測試結果不同 (機率很低, 主要是怕缺了新功能), 所以就先進行昇版, 指令可在 PyTorch 官網產生 (視作業系統與 CPU/GPU 而異) :





我筆電是 Win10 沒有獨立顯卡所以要選 CPU, 指令如下 : 

pip3 install torch torchvision torchaudio

昇版的話後面加 -U :

C:\Users\User>pip install torch torchvision torchaudio -U      
Requirement already satisfied: torch in c:\python37\lib\site-packages (1.0.0)
Collecting torch
  Downloading torch-1.12.1-cp37-cp37m-win_amd64.whl (161.9 MB)
     ---------------------------------------- 161.9/161.9 MB 1.0 MB/s eta 0:00:00
Requirement already satisfied: torchvision in c:\python37\lib\site-packages (0.2.1)
Collecting torchvision
  Downloading torchvision-0.13.1-cp37-cp37m-win_amd64.whl (1.1 MB)
     ---------------------------------------- 1.1/1.1 MB 1.3 MB/s eta 0:00:00
Collecting torchaudio
  Downloading torchaudio-0.12.1-cp37-cp37m-win_amd64.whl (969 kB)
     ---------------------------------------- 969.1/969.1 kB 1.4 MB/s eta 0:00:00
Requirement already satisfied: typing-extensions in c:\python37\lib\site-packages (from torch) (4.3.0)
Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in c:\python37\lib\site-packages (from torchvision) (8.1.0)
Requirement already satisfied: requests in c:\python37\lib\site-packages (from torchvision) (2.28.1)
Requirement already satisfied: numpy in c:\python37\lib\site-packages (from torchvision) (1.19.4)
Requirement already satisfied: certifi>=2017.4.17 in c:\python37\lib\site-packages (from requests->torchvision) (2018.11.29)
Requirement already satisfied: idna<4,>=2.5 in c:\python37\lib\site-packages (from requests->torchvision) (2.8)
Requirement already satisfied: charset-normalizer<3,>=2 in c:\python37\lib\site-packages (from requests->torchvision) (2.1.1)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\python37\lib\site-packages (from requests->torchvision) (1.24.1)
Installing collected packages: torch, torchvision, torchaudio
  Attempting uninstall: torch
    Found existing installation: torch 1.0.0
    Uninstalling torch-1.0.0:
      Successfully uninstalled torch-1.0.0
  Attempting uninstall: torchvision
    Found existing installation: torchvision 0.2.1
    Uninstalling torchvision-0.2.1:
      Successfully uninstalled torchvision-0.2.1
Successfully installed torch-1.12.1 torchaudio-0.12.1 torchvision-0.13.1

雖然 torch 本身蠻大的 (161MB), 但其實安裝也很快. 更新完後來檢驗看看版本 :

C:\Users\User>python    
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch as t    
>>> t.__version__    
'1.12.1+cpu'   

沒錯喔, 已經升到 1.12.1 版啦.