type
status
date
slug
summary
tags
category
icon
password
❤️‍🔥
Pytorch作为深度学习的基础,相关代码都在我的github上可自取
整体项目(笔记加代码)
notion image

Python中的两大法宝

notion image
我们把pytorch看成百宝箱假如里面有4个区域分别为1,2,3,4
3里面又有a,b,c

dir():打开,看见

能让我们知道工具箱以及工具箱中的分隔区有什么东西
  • dir(pytorch)
    • 输出:1,2,3,4
  • dir(pytorch.3)
    • 输出:a,b,c

help():说明书

可以让我们知道每个工具是如何使用的,工具的使用方法
  • help(pytorch.3.a)
    • 输出:将此扳手放在特定地方,然后拧动
notion image

三种运行场景

notion image

Pytorch加载数据初认识

  • Dataset:提供一种方式去获取数据及其label
    • 如何获取每一个数据以及其label
    • 告诉我们总共有多少个数据
  • Dataloader
    • 为网络提供不同的数据形式

Dataset类代码实战

  1. 使用的数据集是hymenoptera_data
notion image
具体代码详见: read_data.py
  1. 使用的数据集是hymenoptera_data_practice(这个是练手的项目)
    1. 需要注意的是label文件的提取
具体代码详见: read_data_practice.py

Tensorboard

notion image

add_image()

这里的img_tensor需要是torch.Tensor, numpy.array, or string/blobname这三种类型
notion image
但我们的类型是JPEG的所以之后我们需要做下转换

转换成 numpy.array

这段代码就可以从<class 'PIL.JpegImagePlugin.JpegImageFile'>直接转换成<class 'numpy.ndarray'>
发现这个结果(512, 768, 3)和我们add_image()中的shape()不一样所以我们在后面需要加上dataformats='HWC'
notion image

Transform

structure的快捷键是Alt+7
notion image
transform.py ->工具箱
ToTensor这个工具把pic (PIL Image or numpy.ndarray)这些数据类型转换为Tensor
之后transforms.ToTensor()创建一个具体的工具
notion image

Transform如何使用(python)

针对PIL类型

针对narray类型

为什么我们需要Tensor数据类型

notion image
tensor有很多方法如上图
notion image
有很多属性如上图
notion image

常见的Transform

基础知识

ToTensor

Normalize

归一化
output[channel] = (input[channel] - mean[channel]) / std[channel]
(input - 0.5) / 0.5 = 2 * input - 1
input[0,1]
output[-1,1]
归一化之后如下图
notion image

Resize

notion image
notion image
可以看到尺寸有变化

Compose

等比放大
notion image
这里类似一个组合输出的形式
列表里面放的都是方法,前一个输出会当成后一个的输入,一步到位

RandomCrop

随机裁剪
notion image

Torchvision中数据集使用

CIFAR数据集的使用

notion image
notion image
notion image

DataLoader

数据加载器,每次从dataset取出数据(方式,内容等等)
notion image

batch_size

notion image
batch_size = 4:这里是一个打包,4个一打包(默认情况下是随机抓取)
结果是:
notion image
batch_size=64
notion image

drop_last

可以看到因为设置的drop_last=False最后不会被省去
notion image
drop_last=True最后一次可以省去
notion image

shuffle

shuffle = False两次取的都一样
notion image
可以看到如果shuffle=True
DataLoader(dataset=test_data,batch_size=64,shuffle=True,num_workers=2,drop_last=True)
最后一个step取的图片是不一样的,所以一般我们用True
notion image

nn.Module的使用

torch.nn->nerual network
forward :前向传播,这里面是输入x,这个例子是经过一次卷积(conv)一次非线性(relu)一次卷积一次非线性,最后才可以得到一次输出
forward: Callable[..., Any] = _forward_unimplemented 调用函数,默认执行forward: c = Model()

卷积操作

stride

步长:the stride of the convolving kernel. Can be a single number or a tuple (sH, sW). Default: 1
notion image
notion image

padding

对输入图像进行填充,默认不填充
padding = 1
notion image
notion image

卷积层

inchannel和outchannel

notion image
notion image
notion image

最大池化层

notion image
与卷积不同:stride (Union[int, Tuple[int, int]**]) – the stride of the window. Default value is kernel_size
stride的默认值是kernel_size
notion image
1080p->720p,依旧可以看清,只不过图片的信息量变小了很多,可以加快训练速度
notion image
notion image

非线性激活

体现在泛化能力

ReLU

notion image
notion image

Sigmoid

notion image
notion image

inplace

Input更不更新,一般来讲inplace = false
notion image
notion image
notion image

线性层以及其它层

notion image
torch.flatten(imgs)的shape是torch.Size([196608])

Sequential

notion image
注释的部分比较麻烦可以直接用Sequential
notion image
notion image

损失函数和反向传播

Loss Functions

  • 计算实际输出和目标之间的差距
  • 为我们更新输出提供一定的依据

L1Loss

MSELoss

CrossEntropyLoss

分类问题常用
notion image

神经网络的应用

优化器

现有网络模型的使用以及修改

添加

notion image

更改

notion image

模型的保存和加载

方法1,模型结构+模型参数

notion image

方式2,模型参数(官方推荐)

notion image
这种写法和第一种加载一样

陷阱

这样写会报错,无法load参数
所以我们应该把注释的内容重新填入

完整的模型训练套路

一个小的例子

notion image

完整过程

notion image

利用GPU训练

.cuda()

无GPU

notion image

有GPU(colab)

因为笔者GPU不符合要求,所以用:https://colab.research.google.com/
可以看到GPU很快
notion image

device

notion image

完整的模型验证

利用已经测试好的模型进行验证
我们可以看到模型预测成功
notion image

试错

torch.cuda.is_available()为False

因为我的GPU是AMD,所以is_available()是False没问题是正确的
notion image

安装虚拟环境成功结果进入Jupyter notebook没有虚拟环境的配置

notion image
解决方法:< env > 指的是您所设定的环境名称,我这里是pytorch
  1. 进入虚拟环境activate <env>
  1. 输入conda install nb_conda
  1. 安装后再次启动jupyter notebook即可
notion image

tensorboard: error: unrecognized arguments: --logdr=logs

notion image
解决方式:tensorboard --logdir logs即可,这里是版本问题

OpenCV下载失败

解决方式:pip install opencv-python==4.3.0.38,由于我们用的python版本比较低,所以下载这个版本最好

参考视频

相关代码

📎 参考网站

3D Point Clouds(open3D)(一)JavaScript(速成版笔记)
  • Cusdis
  • Utterance
Chailyn
Chailyn
I will always be loyal to myself running towards ideal and freedom.
Announcement
🎉欢迎来到我的homepage🎉
-- 感谢您的支持 ---
吾生也有涯,而知也无涯
旅行记录,与你分享路过的风景
知识无价,学术blog上希望能帮到你
-- 祝您所遇皆温柔,所感皆太阳 --
更新(2024.12.12):
更新文章 “摆烂日记:静默中的能量积蓄
 
 
 
2024 Chailyn.

ChailynCui BLOG | I will always be loyal to myself running towards ideal and freedom.

Powered by NotionNext 4.3.1.