COLAB

      在〈COLAB〉中尚無留言

想要試試機器學習但又沒有顯卡的人,可以使用 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()

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *