【pytorch】B站小土堆笔记
简单做了下笔记,代码写在notebook里了。
蔚蓝_cerulean
学生党,喜欢刷题
展开
-
【B站】小土堆pytorch
作者本身是接触深度学习较长时间了,刚开始是跟着李沐学《动手学深度学习》,但是发现自己高度依赖d2l库,而对pytorch框架不太了解,因此花2天时间恶补了下pytorch内容。然后CSDN就只发了下markdown内容,没有notebook的化显得很单薄,但是对我来说足够了,后续有需要有时间的话会重新整理一下。其中的有些知识比如卷积、验证等都比较熟悉了,笔记里没写太详细,当然视频教程不长,而且浓度是比较高的,还是。内容放在一个专栏里了,就不贴链接了,有什么问题欢迎评论区留言。原创 2023-12-14 13:53:21 · 393 阅读 · 0 评论 -
p4 dir和help函数
这里把pytorch看出一个工具箱,每个工具箱里面有小的工具包,一直到最小的直接使用的工具。dir() 打开与查看help() 教你使用例如:dir(pytorch)->输出1,2,3,4dir(pytorch.3)->输出a,b,c而help则是具体使用例如:help(pytorch.3.a)->输出:螺丝刀的使用方法。vscode自己实操:print("查看torch的工具包\n",dir(torch))原创 2023-12-13 15:39:39 · 833 阅读 · 0 评论 -
p6-p7 Dataset
这里用垃圾分类来处理。Dataset: 提供一种方法把数据加载进来,提供两个方法,分别实现获取数据和label、获取数据总量的功能。Dataloader: 把数据打包交给模型训练、具体后面再提。原创 2023-12-13 15:41:29 · 340 阅读 · 0 评论 -
p8-p9 Tensorboard
TensorBoard可以让我们查看具体某一步骤的情况,如上。原创 2023-12-13 15:45:18 · 345 阅读 · 0 评论 -
p10-p11 Transforms
transforms是pytorch的一个工具箱,里面封装一些工具,旋转、缩放、正则化等一系列操作。原创 2023-12-13 15:48:10 · 345 阅读 · 0 评论 -
p14 torchvision
这里up主介绍了一些transforms方法的使用:自己记住流程 看官方文档,关注输入输出,用的时候再查。代码的话单纯是功能实际使用,还是自己熟悉流程比较好。print(img)# ToTensorprint(img_tensor[0][0][0]) # 处理前,看看第一个位置的数值trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) # 因为图像时三个channel的,所以,均值和方差都是三维的。原创 2023-12-13 15:51:41 · 353 阅读 · 0 评论 -
p15 Dataloader
up在这里类别了打牌,dataloader就是从牌堆中抓取扑克牌。# 导包test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor(),download=True) # 加载数据集参数说明: batch_size 每次打包多少个数据 shuffle 是否打乱顺序 num_workers 线程数,windows>0可能出问题。原创 2023-12-13 15:55:49 · 361 阅读 · 0 评论 -
p16 nn.module
nn.module是pytorch框架中搭建神经网络的基础,所有的神经网络都需要继承这个模块。ps:这里还是仔细看官方文档def forward(self, input): # 前向传播这块就是讲了神经网络继承下这个类,找个简单神经网络写一下就懂了。原创 2023-12-13 15:56:34 · 344 阅读 · 0 评论 -
p17 卷积操作
这里function是nn的子包,但是很常用,一般单独导入。然后介绍卷积操作: 卷积操作目的是减少图片维度(减少了参数数量),保留关键信息。具体操作是卷积核对位相乘作为结果,算完之后往后往下走。这里不想多记。import torch.nn.functional as F # 制作一个函数的句柄,后面方便直接使用了[0, 1, 0],# 要想用 torch.nn.functional.conv2d 这个函数,就必须满足形状的要求,上述的尺寸不满足,要做处理。原创 2023-12-13 15:58:15 · 325 阅读 · 0 评论 -
p18 卷积层
卷积层对应前面的卷积操作,直接作为神经网络的一层。self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0) # 输入通道(这里RGB是3)、输出通道(卷积核数量)x = self.conv1(x) # x 已经放到了卷积层 conv1当中了return xtudui = Tudui() # 初始化网络# 下面把每一张图像都进行卷积step = 0。原创 2023-12-13 15:58:49 · 354 阅读 · 0 评论 -
p21 线性层
过了下pytorch中的各种层吧,只能说,学会自己看官方文档。output = torch.flatten(imgs) # 展平(1行)'''正则化层 Normalization Layers nn.BatchNorm2d有一篇论文,意思是正则化层可以提高训练速度参数只有一个,channel中的C,num_feature, 令其跟 channel 数相同即可,官方文档有个事例:>>> # Without Learnable Parameters # 不含可学习参数。原创 2023-12-13 16:00:01 · 389 阅读 · 0 评论 -
p22 sequential
这里介绍了sequential不过实现的时候重点在算下参数吧。代码看下notebook就OK了。self.flatten = Flatten() # 展平操作Flatten(), # 展平操作return m。原创 2023-12-13 16:02:27 · 353 阅读 · 0 评论 -
p23 损失函数和反向传播
这里up讲了看官方文档的损失函数。原创 2023-12-13 16:03:46 · 326 阅读 · 0 评论 -
p24 优化器
优化器这里还是详细说一下吧。每个优化器具体参数都不太一样,但是一般都用默认值,只传参数和学习率就ok了。学习率不要太大,0.01好一些。loss = nn.CrossEntropyLoss() # 定义损失函数result_loss = loss(outputs, targets) # 调用损失函数result_loss.backward() # 反向传播, 这里要注意不能使用定义损失函数那里的 loss,而要使用 调用损失函数之后的 result_loss。原创 2023-12-13 16:04:18 · 337 阅读 · 0 评论 -
p25 现有模型修改
讲了先用模型导入,和修改具体层。# 数据集太大了,不下载# 要想用于 CIFAR10 数据集, 可以在网络下面多加一行,转成10分类的输出,这样输出的结果,跟下面的不一样,位置不一样# 层级不同# 如何利用现有的网络,改变结构# 上面是添加层,下面是如何修改VGG里面的层内容vgg16_false.classifier[6] = nn.Linear(4096, 10) # 中括号里的内容,是网络输出结果自带的索引,套进这种格式,就可以直接修改那一层的内容代码不难,顺手问问gpt就行了。原创 2023-12-13 16:04:49 · 385 阅读 · 0 评论 -
p26 模型保存和修改
就是把参数保存下来。保存的文件实际上没啥要求的,但是建议后缀.pth两种方式保存(1、存模型+参数 2、参数存为字典)# 保存方式1,模型结构+模型参数 模型 + 参数 都保存torch.save(vgg16, "vgg16_method1.pth") # 引号里是保存路径# 保存方式2,模型参数(官方推荐) ,因为这个方式,储存量小,在terminal中,ls -all可以查看对应加载方式# 方式1,加载模型# 方式2,加载模型。原创 2023-12-13 16:06:11 · 334 阅读 · 0 评论 -
p27-p29 模型训练套路
过一遍流程,一气呵成。预处理->模型->学习率、优化器、损失函数、epoch。这里用tensorboard记录损失值还是要关注下的,还有正确率的表示方法。model.py# 搭建神经网络return xinput = torch.ones((64, 3, 32, 32)) # 为什么用ones?前面也是用的ones吗?train.py# 准备数据集# length 长度# 如果train_data_size=10, 训练数据集的长度为:10。原创 2023-12-14 13:41:35 · 338 阅读 · 1 评论 -
p30-p31 GPU
GPU的训练速度是远高于CPU的。两种方式交给GPU训练,一般还是方式2。要改的有: 模型、损失函数、优化器。数据(需要a=a.b)方式1 逐个.cuda()很麻烦# length 长度# 如果train_data_size=10, 训练数据集的长度为:10print("训练数据集的长度为:{}".format(train_data_size))print("测试数据集的长度为:{}".format(test_data_size))# 利用 DataLoader 来加载数据集。原创 2023-12-14 13:42:17 · 371 阅读 · 1 评论 -
p32 验证套路
不想多说。 注意下 torch.no_grad()和model.eval()就行了。torch.no_grad()禁用梯度操作,节约性能。model.eval()不只是不反向传播,里面某些层(如dropout)是不生效的。# image_path = "TuDui/imgs/airplane.png" # 复制相对路径,就是对的了image = Image.open(image_path) # PIL类型的图片。原创 2023-12-14 13:43:13 · 314 阅读 · 1 评论