Google Colab使用教程(附带MINST案例)
Google Colab使用教程
温馨提示,使用Colab需要使用梯子进行翻墙,请各位自备梯子和谷歌账号(谷歌账号可使用国内任意邮箱或学校邮箱注册,若没有,则建议使用学校邮箱注册,在部分网站可享有一定的教育优惠)
Google Colab是什么?
Google Colab是谷歌免费提供的Jupyter笔记本环境,该平台支持CPU、GPU和NPU处理,提供诸如TensorFlow、pytorch、Kernal等主流深度学习框架的环境。该平台部署在云端,不影响本地使用,因此再丐再垃圾的电脑也依旧能够正常使用。
Colab官网:https://colab.research.google.com/
为什么选择该平台
Google Colab为所有的开发者免费提供一定的GPU算力,每个人大约能分到一张特斯拉T4显卡的算力,该显卡单精度浮点运算能力大约在2070与1080之间,同时拥有16G显存,如果自己拥有更好的显卡(如用着4090的富哥)那用自己的会更好。若自己电脑为3060的,虽然单精度浮点运算能力比T4强,但出于显存考虑以及自己笔电经常外带的需求,笔者建议使用该平台会更好。
由于是免费提供的,因此该算力也有限制,即每周最多使用三十小时左右(大概,官方也没有公布限额,这是动态资源),同时单次运行不能超过12小时,同时若使用用户过多的情况下不一定能使用上。
Colab Pro 订阅者的使用量仍会受到限制,但相比非订阅者可享有的限额要多出大约一倍。Colab Pro+ 订阅者还可获享更高的稳定性。
Google Driver是什么?
Google Driver是谷歌推出的一项在线存储服务,类似于百度云盘,目前有付费和免费两种模式,免费用户可享有15G的空间,付费用户根据套餐最多可享有20TB的空间。
Google Driver:https://drive.google.com/drive/
为什么使用该云盘
如上文所说,Google Colab是谷歌免费提供的Jupyter笔记本环境,那么每次关闭该环境,服务器会自动将之前的所有操作进行清除,若不使用Google Driver,则每次都需要上传数据集和代码,大大浪费了时间,因此使用该云盘,和Colab进行链接操作,在使用Colab的时候可以调用网盘的数据
正式教程
笔记本创建
首先进入 Google Driver:https://drive.google.com/drive/
点击左上角的新建-更多
这时候你已经可以看到Google Colaboratory,若没有则点击“关联更多应用”,搜索“Colab”,安装第一个即可
进入Colab
若直接点击Colab的网址则为该页面
这时你只需要点击左上角的 文件-新建笔记本 便可以进到相同的页面
左边有五个选项,分别为目录、查找和替换、变量、Secret(秘钥)、文件
之后点击代码执行程序,然后点击更改运行时类型,在其中硬件加速器部分选择GPU保存,Colab便会配置一个带有GPU的机器,此时笔记本就创建完成了。
from google.colab import drive
drive.mount('/content/gdrive')
运行后便可以得到该窗口
之后在一系列的窗口当中进行登录谷歌账号,同时授权对云盘文件的读取与修改,完成后便可以实现挂载
可以看到的是,我们谷歌硬盘里面的数据已经放在./gdrive/MyDrive 这个目录里面,我们再去调用的时候就会十分方便,目前笔者的笔记本文件是在 Colab Notebooks 文件夹里面
命令行使用
在notebook环境下,你只需要在每一行代码前多加一个 “!” (注意是英文的感叹号),便可以像Linux系统里的终端命令操作那样进行命令的输入
如使用ls命令,便可以得到当前目录下的路径
以MINST手写数字数据集作为示例进行训练
CPU版
请注意这是CPU版!!!!!!
导入相对应的库
import torch
from torchvision import datasets, transforms
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import matplotlib.pyplot as plt
神经网络的建立
class Network(nn.Module):
def __init__(self):
super().__init__()
# image 28 X 28 = 784
self.input_layer = nn.Linear(784, 64)
self.hidden1 = nn.Linear(64, 64)
self.hidden2 = nn.Linear(64, 64)
self.output = nn.Linear(64, 10)
def forward(self, data):
data = F.relu(self.input_layer(data))
data = F.relu(self.hidden1(data))
data = F.relu(self.hidden2(data))
data = self.output(data)
return F.log_softmax(data, dim=1)
数据集下载(若没有则会自动下载,若有则会自动跳过并读取到相对应的数据)
training = datasets.MNIST("", train=True, download=True,
transform = transforms.Compose([transforms.ToTensor()]))
testing = datasets.MNIST("", train=False, download=True,
transform = transforms.Compose([transforms.ToTensor()]))
加载数据集(每十张图片为一批,并随机打乱)
train_set = torch.utils.data.DataLoader(training, batch_size=10, shuffle=True)
test_set = torch.utils.data.DataLoader(testing, batch_size=10, shuffle=True)
网络实例化
network = Network()
参数优化、学习率和训练轮次设置
learn_rate = optim.Adam(network.parameters(), lr=0.001)
epochs = 10
开始训练
for i in range(epochs):
for data in train_set:
image, output = data
network.zero_grad()
result = network(image.view(-1,784))
loss = F.nll_loss(result,output)
loss.backward()
learn_rate.step()
print(loss)
模型验证
network.eval()
correct = 0
total = 0
with torch.no_grad():
for data in test_set:
image, output = data
result = network(image.view(-1,784))
for index, tensor_value in enumerate(result):
total += 1
if torch.argmax(tensor_value) == output[index]:
correct += 1
accuracy = correct / total
print(f"Accuracy: {accuracy}")
训练结果如图
具体的代码请参考 ./notebook/CPU版 该文件
GPU版
如果你已经参考CPU版的代码使其成功跑起来的话,你会留意到一件事:为什么训练这么慢?
这时因为我们使用的是CPU去跑,接下来我们使用GPU去跑
首先将更改运行类型,依次点击 代码执行程序-更改运行时类型 便可以得到以下窗口
切换运行类型后导入库的同时读取设备id
import torch
from torchvision import datasets, transforms
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import matplotlib.pyplot as plt
if torch.cuda.is_available():
device = torch.device("cuda:0")
print("GPU")
神经网络建立
class Network(nn.Module):
def __init__(self):
super().__init__()
# image 28 X 28 = 784
self.input_layer = nn.Linear(784, 64)
self.hidden1 = nn.Linear(64, 64)
self.hidden2 = nn.Linear(64, 64)
self.output = nn.Linear(64, 10)
def forward(self, data):
data = F.relu(self.input_layer(data))
data = F.relu(self.hidden1(data))
data = F.relu(self.hidden2(data))
data = self.output(data)
return F.log_softmax(data, dim=1)
数据集下载
training = datasets.MNIST("", train=True, download=True,
transform = transforms.Compose([transforms.ToTensor()]))
testing = datasets.MNIST("", train=False, download=True,
transform = transforms.Compose([transforms.ToTensor()]))
加载数据集,设置每十张图片为一批,并随机打乱
train_set = torch.utils.data.DataLoader(training, batch_size=10, shuffle=True)
test_set = torch.utils.data.DataLoader(testing, batch_size=10, shuffle=True)
网络实例化
network = Network().to(device)
优化器、学习率、轮次设置
learn_rate = optim.Adam(network.parameters(), lr=0.001)
epochs = 10
开始训练
for i in range(epochs):
for data in train_set:
image, output = data
image = image.to(device)
output = output.to(device)
network.zero_grad()
result = network(image.view(-1,784))
loss = F.nll_loss(result,output)
loss.backward()
learn_rate.step()
print(loss)
模型测试
# Test the network
network.eval()
correct = 0
total = 0
with torch.no_grad():
for data in test_set:
image, output = data
image = image.to(device)
output = output.to(device)
result = network(image.view(-1,784))
for index, tensor_value in enumerate(result):
total += 1
if torch.argmax(tensor_value) == output[index]:
correct += 1
accuracy = correct / total
print(f"Accuracy: {accuracy}")
训练结果如图
total += 1
if torch.argmax(tensor_value) == output[index]:
correct += 1
accuracy = correct / total
print(f"Accuracy: {accuracy}")
训练结果如图
[外链图片转存中…(img-tYBrpBnR-1710234397701)]
具体代码请参考 ./notbook/GPU版
更多推荐
所有评论(0)