想要試試機器學習但又沒有顯卡的人,可以使用 Google 所提供的 Colab 網站。此網站可以直接使用網頁的方式撰寫 Python 程式碼,然後可以指定要不要啟動 GPU。當然如果有付費的話,還可以選擇是否啟動 TPU。
執行方式
請到 https://colab.research.google.com/ ,登入Google帳號後按下新增筆記本即可開始撰寫程式
指定GPU
如果想要在達行時使用GPU,可於執行階段/變更執行階段類型,然後選取GPU,即會啟動GPU運算
Ram大小
Colab 預設配發的記憶体大小約為 12 G,以經可以應付一般大型的訓練資料了。
費用
Colab 宣稱可以免費使用 GPU 運算,但真的免費的運算量是每天大約只有 6 小時,6 小時一到就會自動斷線。當然也可以付費升級成 Colab Pro,每個月是美金 $ 9.99元。
效能
說真的,除非真的沒有顯卡,否則還是不建議使用 Colab,因為其效能比 RTX3080TI 大概慢了約3倍。也就是說 Colab 其實慢的要死,不過是比電腦的 CPU 快很多就是了。若是學生族群倒是可以加減用,但如果是公司要用的專案,還是買塊像樣點的顯卡吧。
載入圖片
假設圖片置於雲端硬碟的 picture 目錄之下,則如下幾個概念要記起來。
1. 個人的雲端硬碟稱為 /MyDrive(規定死的)
2. Colab 中要先使用 from google.colab import drive 將 drive 這個 “掛載工具” 載入Python 中。
3. 使用 drive.mount(‘/data’) 建立 /data 這個掛載目錄。/data 這個目錄可以自已隨意規定。建立好後會自動將 /MyDrive全部掛載到 /data目錄中。
4. 所以 picture 的完整路徑為 /data/MyDrive/picture
使用 !ls pic_path 可以啟動Linux 的 ls 指令,看到 picture 下所有的檔案及目錄。
剩下載入圖片的方式跟在 Pycharm 一模一樣,唯獨不能使用 cv2.imshow() 顯圖,jupyter 說 cv2.imshow() 會讓 jupyter 當機,所以要使用 google.colab.patches 的 cv2_imshow() 顯示圖片。
from google.colab import drive from google.colab.patches import cv2_imshow drive.mount('/data') pic_path="/data/MyDrive/picture" !ls $path import cv2 img=cv2.imread(f'{pic_path}/tiger.jpg', cv2.IMREAD_UNCHANGED) img=cv2.resize(img, (1024,768), cv2.INTER_LINEAR) cv2_imshow(img)
如果要使用 matplotlib 顯示圖片也可以
from google.colab import drive from google.colab.patches import cv2_imshow import pylab as plt drive.mount('/data') pic_path="/data/MyDrive/picture" import cv2 img=cv2.imread(f'{pic_path}/tiger.jpg', cv2.IMREAD_UNCHANGED) img=cv2.resize(img, (1024,768), cv2.INTER_LINEAR) img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img) plt.show()
import 其它檔案的自定函數庫或類別
我們也可以 import 其它檔案的自動函數庫或類別,不過請注意不可以將檔案放在 Colab notebooks之下(*註1),請直接在雲端硬碟隨意建造一個目錄,比如 sdk,然後將 .py檔放在 sdk 目錄。
*註1 : 好像將自訂函數加在 colab notebooks之下,會產生 __init__.py檔,而裏面又會產生 null (正確是None) 這個錯誤的 bug 。
然後使用 sys.path.append(sdk_path) 將 sdk 存放的路徑加入 sys.path 中。sys.path 是引入套件時會去搜尋的路徑。
底下是放在雲端硬碟下的 sdk/Mahal.py 檔案
import math import cv2 import numpy as np def circle(r): return math.pi*(r**2) class MahalCv(): host="mahaljsp.asuscomm.com" @staticmethod def read(filePath): img = cv2.imdecode(np.fromfile(filePath, dtype=np.uint8), cv2.IMREAD_UNCHANGED) return img
底下是Colab的完整代碼,載入函數/類別的方法是 from (.py檔) import (函數/類別)
from google.colab import drive from google.colab.patches import cv2_imshow import pylab as plt drive.mount('/data') sdk_path="/data/MyDrive/sdk/" pic_path="/data/MyDrive/picture" import sys sys.path.append(sdk_path) import cv2 from Mahal import circle area=circle(10) print(f'圓面積為 {area}') from Mahal import MahalCv img=MahalCv.read(f'{pic_path}/tiger.jpg') img=cv2.resize(img, (1024,768), cv2.INTER_LINEAR) img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img) plt.show()