James測試中
James測試中

只是一介大學生,喜好著攝影、AI相關罷了,文章不定時更新,偶爾發一下技術性文章。阿,我也有Like Social喔 -- James_phto快來追蹤我,專門發廢文、跟零散照片。加我正在測試中

Google Colab 使用教學

Colaboratory(簡稱colab)是一個在雲端運行的編輯執行環境,由Google提供開發者虛擬機,並支援Python程式及機器學習TensorFlow演算法。最棒的是只需要瀏覽器就可以運作,完全免費,目前官方建議使用Chrome,Firefox或Safari。
為什麼有jupter notebook了還要用這個?

如果說有個環境可以讓你不用在一開始安裝一大堆軟體不挑作業系統能夠立即實驗、實作資料科學或機器學習專案、有著像 Jupyter Notebook 這樣的互動式環境在學習時不用預花太多成本(例如雲端虛擬機器費用)、如果還能支援加速硬體(如:GPU)或是自定環境的話,是不是會讓你有更大的動力把資料科學或是機器學習學得更好呢?

是的, Google Colaboratory 就是符合上述所說的。
沒什麼閒錢可以買Tesla T4顯卡(專門用於AI訓練)的我,需要訓練大型模型時就會用這個跑。

開始使用 Google Colaboratory

Google Colaboratory (以下簡稱 Google Colab)是一個基於 Jupyter Notebook 的免費服務(須註冊一個 Google 帳號),所以如果你曾經用過 Jupyter Notebook 來學習 Python 的話,那應該不必特別學習就能立即上手這個服務了,就算有些不熟悉,第一次使用的歡迎 notebook 也有完整的教學文件,有不會用的地方讀一下就可以了。

首先打開你的goole帳號,然後進入雲端硬碟,對中間空白處按右鍵--更多--連結更多應用程式

然後搜尋Colaboratory,並且安裝下來

點下去就對了

然後你就可以在更多那邊看到colab了,然後按下去


對,就是這麼簡單。你可別小看這個運行環境,雖然你沒有執行任何安裝過程,但是它基本上涵蓋了你做數據科學分析要用到的各種工具,這些工具包括但不限於Numpy、Scipy、Pandas等,甚至連深度學習的框架,例如Tensorflow、Keras和Pytorch,也是一應俱全。

Google Colab的深度學習環境支援,可不只是軟體那麼簡單。Google慷慨的提供了GPU,甚至是更專業化的TPU,供你免費使用。

預設狀態下,這些雲端硬體是不開啟的。你需要在選單欄中選擇編輯--筆記本設定

就可以打開GPU了喔(平常不要開,訓練人工智慧模型時才要開)

想知道 Python 是哪個版本,你可以在 notebook 中插入 !python -V 這樣的 system alias 來觀察,所以當然也可以使用 !pip list 觀察到底預裝了哪些函式庫,如果想用的還沒裝,當然可以 !pip install --upgrade xxx 來安裝,而 notebook 的運行環境也可以隨時重置(執行階段 > 恢復原廠設定),所以不用怕把函式庫又搞爛。不過可能還是要注意一下是否有作業系統的相依性,Google Colab 的運行環境是 Ubuntu Linux。

將筆記本設定調整成GPU後,輸入!nvidia-smi,可於最下方顯示你的GPU是甚麼

有時候會是P4,效能差倍左右

提醒: 1)為避免啟動GPU後沒運算,程式先預設是使用CPU。當需要GPU時請到左上"執行階段"內的"變更執行階段類型"選GPU,並按右上的重新連線重啟一個container。2) 當你點選的GPU或TPU container運作後,若超過十幾分鐘沒有run程式,請關掉有GPU/TPU container,避免colab認為你佔著免費稀有資源不做事,會把你高檔加速器使用權暫時關掉"數小時",期間只能用CPU。3)若記憶體占用過大,也會造成kernel died,造成container重啟,暫存檔案都會不見。

然後點進去,按終止

假設在寫的過程中有遇到error可以點search stack overflow,會直接幫你查,方便你debug

最後附上一段程式碼,深度學習框架,炫耀用

import torch
import torch.nn as nn
import torchvision.datasets as dsets
import torchvision.transforms as transforms
from torch.autograd import Variable
import torch.utils.data as Data
import matplotlib.pyplot as plt
# Hyper Parameters 
input_size = 784
hidden_size = 500
num_classes = 10
num_epochs = 5
batch_size = 100
learning_rate = 0.001

# MNIST Dataset 
train_dataset = dsets.MNIST(root='./data', 
                            train=True, 
                            transform=transforms.ToTensor(),  
                            download=True)

test_dataset = dsets.MNIST(root='./data', 
                           train=False, 
                           transform=transforms.ToTensor())

# Data Loader (Input Pipeline)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, 
                                           batch_size=batch_size, 
                                           shuffle=True)

test_loader = torch.utils.data.DataLoader(dataset=test_dataset, 
                                          batch_size=batch_size, 
                                          shuffle=False)
test_y=test_dataset.targets

# Neural Network Model (1 hidden layer)
class Net(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size) 
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, num_classes)  
    
    def forward(self, x):
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)
        return out
    
net = Net(input_size, hidden_size, num_classes)

    
# Loss and Optimizer
criterion = nn.CrossEntropyLoss()  
optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)  

# Train the Model
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):  
        # Convert torch tensor to Variable
        images = Variable(images.view(-1, 28*28))
        labels = Variable(labels)
        
        # Forward + Backward + Optimize
        optimizer.zero_grad()  # zero the gradient buffer
        outputs = net(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        
        if (i+1) % 100 == 0:
            print ('Epoch [%d/%d], Step [%d/%d], Loss: %.4f' 
                   %(epoch+1, num_epochs, i+1, len(train_dataset)//batch_size, loss.item()))

# Test the Model
correct = 0
total = 0
for images, labels in test_loader:
    images = Variable(images.view(-1, 28*28))
    outputs = net(images)
    _, predicted = torch.max(outputs.data, 1)
    total += labels.size(0)
    correct += (predicted == labels).sum()

print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))

# Save the Model
for i in range(1,4):

    plt.imshow(train_dataset.data[i].numpy(), cmap='gray')  

    plt.title('%i' % train_dataset.targets[i])  

plt.show()  
torch.save(net.state_dict(), 'model.pkl')
test_output = net(images[:20])  

pred_y = torch.max(test_output, 1)[1].data.numpy().squeeze()  

print('prediction number',pred_y)  

print('   real number',test_y[:20].numpy())  


官方介紹,裡面有更詳細的介紹,有興趣的可以看一下

CC BY-NC-ND 2.0

Like my work?
Don't forget to support or like, so I know you are with me..

想學程式,卻又不知道該如何下手?

Loading...
2

Want to read more ?

Login with one click and join the most diverse creator community.