type
status
date
slug
summary
tags
category
icon
password
Pytorch作为深度学习的基础,相关代码都在我的github上可自取
整体项目(笔记加代码)
Python中的两大法宝
我们把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)
- 输出:将此扳手放在特定地方,然后拧动
三种运行场景
Pytorch加载数据初认识
- Dataset:提供一种方式去获取数据及其label
- 如何获取每一个数据以及其label
- 告诉我们总共有多少个数据
- Dataloader
- 为网络提供不同的数据形式
Dataset类代码实战
- 使用的数据集是hymenoptera_data
具体代码详见: read_data.py
- 使用的数据集是hymenoptera_data_practice(这个是练手的项目)
需要注意的是label文件的提取
具体代码详见: read_data_practice.py
Tensorboard
关于tensorboard视图:https://blog.csdn.net/qq_39333636/article/details/125348047
add_image()
这里的img_tensor需要是torch.Tensor, numpy.array, or string/blobname这三种类型
但我们的类型是JPEG的所以之后我们需要做下转换
转换成 numpy.array
这段代码就可以从<class 'PIL.JpegImagePlugin.JpegImageFile'>直接转换成<class 'numpy.ndarray'>
发现这个结果(512, 768, 3)和我们add_image()中的shape()不一样所以我们在后面需要加上
dataformats='HWC'
Transform
structure的快捷键是Alt+7
transform.py ->工具箱
ToTensor这个工具把
pic (PIL Image or numpy.ndarray)
这些数据类型转换为Tensor
之后
transforms.ToTensor()
创建一个具体的工具Transform如何使用(python)
针对PIL类型
针对narray类型
为什么我们需要Tensor数据类型
tensor有很多方法如上图
有很多属性如上图
常见的Transform
基础知识
ToTensor
Normalize
归一化
output[channel] = (input[channel] - mean[channel]) / std[channel]
(input - 0.5) / 0.5 = 2 * input - 1input[0,1]output[-1,1]
归一化之后如下图
Resize
可以看到尺寸有变化了
Compose
等比放大
这里类似一个组合输出的形式
列表里面放的都是方法,前一个输出会当成后一个的输入,一步到位
RandomCrop
随机裁剪
Torchvision中数据集使用
CIFAR数据集的使用
DataLoader
数据加载器,每次从dataset取出数据(方式,内容等等)
batch_size
batch_size = 4
:这里是一个打包,4个一打包(默认情况下是随机抓取)结果是:
batch_size=64
drop_last
可以看到因为设置的
drop_last=False
最后不会被省去drop_last=True
最后一次可以省去shuffle
shuffle = False
两次取的都一样可以看到如果
shuffle=True
DataLoader(dataset=test_data,batch_size=64,shuffle=True,num_workers=2,drop_last=True)
最后一个step取的图片是不一样的,所以一般我们用True
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
padding
对输入图像进行填充,默认不填充
padding = 1
卷积层
inchannel和outchannel
最大池化层
与卷积不同:stride (Union[int, Tuple[int, int]**]) – the stride of the window. Default value is
kernel_size
stride的默认值是kernel_size
1080p->720p,依旧可以看清,只不过图片的信息量变小了很多,可以加快训练速度
非线性激活
体现在泛化能力
ReLU
Sigmoid
inplace
Input更不更新,一般来讲inplace = false
线性层以及其它层
torch.flatten(imgs)的shape是torch.Size([196608])
Sequential
注释的部分比较麻烦可以直接用Sequential
损失函数和反向传播
Loss Functions
- 计算实际输出和目标之间的差距
- 为我们更新输出提供一定的依据
L1Loss
MSELoss
CrossEntropyLoss
分类问题常用
神经网络的应用
优化器
现有网络模型的使用以及修改
添加
更改
模型的保存和加载
方法1,模型结构+模型参数
方式2,模型参数(官方推荐)
这种写法和第一种加载一样
陷阱
这样写会报错,无法load参数
所以我们应该把注释的内容重新填入
完整的模型训练套路
一个小的例子
完整过程
利用GPU训练
.cuda()
无GPU
有GPU(colab)
因为笔者GPU不符合要求,所以用:https://colab.research.google.com/
可以看到GPU很快
device
完整的模型验证
利用已经测试好的模型进行验证
我们可以看到模型预测成功
试错
torch.cuda.is_available()为False
因为我的GPU是AMD,所以is_available()是False没问题是正确的
安装虚拟环境成功结果进入Jupyter notebook没有虚拟环境的配置
解决方法:< env > 指的是您所设定的环境名称,我这里是pytorch
- 进入虚拟环境
activate <env>
- 输入
conda install nb_conda
- 安装后再次启动
jupyter notebook
即可
tensorboard: error: unrecognized arguments: --logdr=logs
解决方式:tensorboard --logdir logs即可,这里是版本问题
OpenCV下载失败
解决方式:pip install opencv-python==4.3.0.38,由于我们用的python版本比较低,所以下载这个版本最好
参考视频
相关代码
📎 参考网站
- 官方文档:https://pytorch.org/
- Author:Chailyn
- URL:https://own.chailyncui.blog/article/Pytorch
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts