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()]))

加载数据集,设置每十张图片为一批,并随机打乱

network = Network().to(device)

网络实例化

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版

  • 24
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值