22.优化器 当使用损失函数时,可以调用损失函数的 backward,得到反向传播,反向传播可以求出每个需要调节的参数对应的梯度,有了梯度就可以利用优化器,优化器根据梯度对参数进行调整,以达到整体误差降低的目的。
21.损失函数与反向传播 torch.nn 里的 loss function 衡量误差,在使用过程中根据需求使用,注意输入形状和输出形状即可loss 衡量实际神经网络输出 output 与真实想要结果 target 的差距,越小越好计算实际输出和目标之间的差距为我们更新输出提供一定的依据(反向传播):给每一个卷积核中的参数提供了梯度 grad,采用反向传播时,每一个要更新的参数都会计算出对应的梯度,优化过程中根据梯度对参数进行优化,最终达到整个 loss 进行降低的目的。
20.神经网络 - 搭建小实战和 Sequential 的使用 在 PyTorch 中,Sequential 是一个容器(container)类,用于构建神经网络模型。它允许你按顺序(sequential)添加不同的网络层,并将它们串联在一起,形成一个网络模型。这样做可以方便地定义简单的前向传播过程,适用于许多基本的网络结构。Sequential 的优点之一是其简洁性和易读性,特别适用于简单的网络结构。然而,对于更复杂的模型,可能需要使用 PyTorch 的其他模型构建方式,如使用 nn.Module 基类自定义网络结构,以满足更灵活的需求。
17.神经网络 - 最大池化的使用 最大池化的目的是保留输入的特征,同时把数据量减小(数据维度变小),对于整个网络来说,进行计算的参数变少,会训练地更快,(池化最大的作用是增大感受野,让后面的卷积看到更全局的内容。池化一般跟在卷积后,卷积层是用来提取特征的,一般有相应特征的位置是比较大的数字,最大池化可以提取出这一部分有相应特征的信息。( 注意,卷积中stride默认为1,而池化中stride默认为kernel_size )Ceil_mode = False 为例运行输出:(运行结果如下:)(以 Ceil_mode = True 为例)
13.DataLoader 的使用 dataset:只有dataset没有默认值,只需要将之前自定义的dataset实例化,再放到dataloader中即可batch_size:每次抓牌抓几张shuffle:打乱与否,值为True的话两次打牌时牌的顺序是不一样。默认为False,但一般用Truenum_workers:加载数据时采用单个进程还是多个进程,多进程的话速度相对较快,默认为0(主进程加载)。Windows系统下该值>0会有问题(报错提示:BrokenPipeError)
11.常见的Transforms(二) Compose() 中的参数需要是一个列表,Python中列表的表示形式为[数据1,数据2,…]在Compose中,数据需要是transforms类型,所以得到Compose([transforms参数1,transforms参数2,…])参数1的输出类型必须与参数2的输入类型匹配。因为compose的工作顺序是从左到右的,第一个参数transform介绍之后再进行第二个transform的操作,所以需要前一个的输出和后一个的输入匹配。参数需要输入想要裁剪成的图片大小。
10.常见的Transforms(一) 我们以图像举例子,不同的图片之间数据分布差异是很大的,有些图片的像素值普遍偏大,而有些图片的像素值偏小。③编写代码,使用Python自带的图片打开方式,然后运行UsefulTransforms,控制台可以看到该图片是PIL格式,大小是889x500,接下来介绍Transforms。使用归一化的目的是将输入数据进行标准化,使输入的数据具有相似的分布。所以在将不同的图片送给神经网络进行推理之前,我们也需要对不同的图片中数据分布进行归一化,以纠正不同图片样本之间的数据偏差,从而使得模型更好地完成推理。
9.Transforms的使用(一)(二) 可以理解为,transforms.py是一个工具箱,里面有很多工具,像ToTensor/Resize等,可以将这些工具看成模板,利用这些模板来创建我们需要的工具,根据这些工具的使用方法,输入数据,输出结果。Tensor 数据类型包装了反向神经网络所需要的一些理论基础的参数**,如:_backward_hooks、_grad等**(先转换成Tensor数据类型,再训练)从transforms中选择一个class,首先对它创建,根据创建的工具知道需要什么东西,返回出结果。(1)transforms该如何使用;
8.TensorBoard的使用(二) 这两个的title都是test,在一个title下,通过滑块显示每一步的图形,可以直观地观察训练中给model提供了哪些数据,或者想对model进行测试时,可以看到每个阶段的输出结果。这里需要额外注意一点,图片的shape,从PIL到numpy型,需要在add_image()中指定每一个数字/维表示的含义。先复制一下第一张图片的相对路径,因为该图片文件夹就在项目文件夹所在的位置,故只需复制相对地址。可以看到该图片是PIL.格式,不符合add_image()要求。运行该python文件,然后刷新一下事件。
6.Dataset类代码实战 ants_label里面存储txt文件,每个txt文件命名对应一张ants_image里的图片,txt里面存储真正的label,bees_label同理。ants_label里面存储txt文件,每个txt文件命名对应一张ants_image里的图片,txt里面存储真正的label,bees_label同理。当label比较复杂,存储数据比较多时,不可能以文件夹命名的方式,而是以每张图片对应一个txt文件,txt里存储label信息的方式.(注意,路径引号前加 r 可以防止转义,或使用双斜杠)
4.pycharm及jupyter使用对比 PyCharm:代码是以块为一个整体运行的话,Python文件的块是所有行的代码,即在PyCharm运行时出现错误时,修改后要从头开始运行PyCharm的Python控制台:PyCharm的Python控制台是一行一行代码运行的,即以每一行为一个块来运行的(也可以以任意行为块运行,按Shift+回车,输入下一行代码,再按回车运行)优点:Python控制台可以看到每个变量的属性缺点:出现错误后代码的可阅读性大大降低使用时间:一般调试时使用。