本文准备跟着b站小土堆
的pytorch教程系统地再熟悉一下pytorch的操作,去年这时候就打算跟着小土堆
的教程来看,结果又鸽了(还有个原有就是当时太菜了,根本看不懂),今年决定好好的看完做完。
建议学时:18h
Pytorch环境安装
略,本台电脑上面没有NVIDIA
的显卡,所以在官网安装了pytorch的CPU版本。
如何查看包中某些函数如何使用
1 | dir(torch) |
help()函数输出的是官方文档的解释内容
或者直接ctrl+单击到不知道的函数上就行了(前提是你知道这个函数叫啥,建议边学边查文档)
Pytorch加载数据
1 | import torch |
这里加载数据时的label由于和文件夹一样,就无需再另外加载了,如果需要从数据集的label文件夹里面读取label就根据具体的文件比如txt,json,csv等等来进行调整,同时,使用pandas
库来读取csv文件也是一个不错的选择。由于这里我们是处理图像数据,故选用PIL
,亦可以使用cv2
.
用cv2
进行图片数据读取的话是这样的:
1 | import cv2 |
使用Tensorboard可视化数据
1 | from torch.utils.tensorboard import SummaryWriter |
tensorboard --logdir=logs --port=6008
由于我这里指定了要写入logs这个文件夹,只要在Python终端里面输入这样的一行命令就可以了。
下面是图片可视化
1 | from torch.utils.tensorboard import SummaryWriter |
注意tensorboard的需要的输入格式只能是torch.tensor或者是numpy.array,所以需要对于PIL读入的数据进行格式转化处理,同时需要注意默认的输入是(Channel,H,W),这里打印出来(img_array.shape)数据发现不符合原先的形式,需要在后面手动指定数据格式。
Transforms的使用
1 | from torchvision import transforms |
要注意的点就是transforms
内含的诸如ToTensor
等不能直接使用,它是一个类,需要先进行赋值才能使用。
这样将打开的图片转化为tensor形式就可以直接输入tensorboard里面了。
1 | from PIL import Image |
一些transforms的运用 你妈的我一导包就是导入transformer
DataLoader使用
1 | import torchvision |
dataloader就是在自己构造好的数据集基础上,进行多批次数据的读取batch_size
.num_workers
就是用来进行多进程并行计算的东西,没试过.shuffle = True
就表示如果有多个epoch,每次打乱顺序重新读取,否则不打乱。
这样的话能够结合tensorboard
很好的进行数据的读取和显示。
nn.Module的使用
1 | class mynn(nn.Module): |
损失函数与反向传播
1 | cifar_test = mynn() |
顺序是先梯度清零optimizer.zero_grad()
;
然后反向传播loss.backward()
;
最后更新参数optimizer.step()
.
模型的加载与保存
1 | # 保存训练好的参数 |
CIFAR十分类任务训练
1 | import torch |
结合使用tensorboard
,使得训练数据可视化,同时在分类任务中,可以进行准确率的计算.
使用GPU训练
由于本人这台电脑上面没有没有NVIDIA
的GPU,所以就记录一下,反正肯定能用上,到时候抄一下代码就行了
1 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
只有loss
,model
,data
可以使用.to(device)
的功能.
没有GPU的可以放到Google colab
上训练即可!(现在体会到肉身翻墙的好处了)
使用模型进行测试
1 | import torch |
完结撒花 and 碎碎念
花了两天左右时间把b站小土堆
的pytorch入门视频总算是看完了,基本算是熟悉了计算机视觉Computer Vision
方面的操作流程以及一些技巧,但是调参之类的东西还得靠自己去实践(比如最后CIFAR训练的时候梯度就莫名其妙爆炸了)。
由于上学期一直在做综合设计
项目,因此看了很多自然语言处理NLP
方面的知识,也算是有些收获吧。还是要多练,多写点代码熟悉一下流程以及一些库的使用。希望下学期能有点时间去打一打Kaggle
上的竞赛提升一下自己吧。
马上大三了,也不知道自己以后到底读研的方向是什么,甚至还不太清楚是打算保研还是出国(sigh)。两手准备吧。顺便在拿大三的一些日子来摸索摸索方向了,得想想自己是否真的喜欢某个领域。
反正,菜就多练。
2023/7/18
写于新加坡国立大学(NUS)