pytorch 深度学习详细笔记01

  • 基本目录
  • pytorch加载数据初认识
    • Dataset and Datelabel
      • 1

    • import os (处理操作系统相关功能的标准库)
      • 1

      • os . path . join()这个函数就是用来将两个地址来拼接的,并且会自动根据系统来判断要拼接的符号

    • import PIL
      • 1

      • code

    • Tensorboard的使用
      • 介绍
        • TensorBoard是由TensorFlow提供的一个可视化工具,用于帮助开发者理解、调试和优化深度学习模型。它可以显示训练过程中的各种指标(如损失函数值、准确率等)的变化情况,同时还能展示模型的体系结构、计算图、张量值的分布等信息。通过TensorBoard,你可以更加直观地了解模型的运行状态,以及模型训练和优化的效果。
      • 用法
        • 1 需要完成的效果图

        • 2、

        • 代码运行完成以后,左上角出现了一个logs

        • 3、 学习如何打开 logs文件夹
          • 1、conda 命令行打开
          • 2、pycharm终端
            • 1,还可以使用 port关键字来设置端口号,避免冲突

            • 结果

          • 添加标量的时候就添加了一下数据,包括标题,x,y轴

          • 出现这个问题就使用多个文件来存储事件

        • 4、add_image()的用法 : “ 常用来观察训练结果”
          • 需要的数据类型为numpy、torch、string型,之前用的PIL 获取的图像信息是PIL型,所以不符合要求,所以开始使用opencv 来读取,opencv读取的就是numpy型

          • TensorBoard 中 目前需要重点关注的东西,转换numpy ,指定shape

      • 图像变换 (例如:统一尺寸,类的转换)
      • transform的使用
    • Torchvision 中的 transforms
      • 介绍

      • 鲁棒性

      • 略微研究一下transforms的源代码
        • , ToTensor -----张量,并且可以使用GPU来进行加速计算

          • 里面有很多功能的class
          • 结构及其用法

          • 为什么???

        • code
          • 1

          • result

          • Ai理解代码

          • 主体思想

      • Transorforms ---torch 和 tensorboard--writer结合的使用

    • 常见的Transforms
      • 1

      • python中 __call__ 的用法

      • ToTensor的使用
        • code

      • Normalize 的使用 (对输入图像进行归一化的处理)
        • 归一化处理的算法-----------输入的值 减去平均值再除以标准差

        • 计算公式 :最后那是 ,input输入范围为[0,1]然后通过公式计算出 结果的范围为 [-1,1]

        • code
          • 辉哥整理版本

        • 答疑

        • 归一化过后,因为某些原因,归一化之前和之后的值可能很相近

      • Resize()的使用 (对输入图像进行尺寸大小的处理)
        • 1

        • code
          • 1

        • result
          • 1

      • Compose()的使用 (将多个图像处理操作组合在一起,以便于一次对图像进行处理)
        • 1

      • totensor数据类型如何转换为PIL

      • RandomCrop()用法 ---随机裁剪
        • code

        • 1

      • 总结使用过方法
        • 1、源码的输入 数据格式要求,输出是什么类型
        • 2、多看官网文档
        • 3、关注方法需要什么参数
    • Torchvision中的数据集使用
      • code

      • result

    • Dataloader 的使用----数据加载器
      • 例如 把数据加载到神经网络当中
      • code ,可以看到它需要的参数很多,但是大多数都是有默认值的,一般有默认值的用默认值就好了

      • 常见参数设置
        • batch_size :每次抓取张数
        • shuffle :打乱顺序 ,True为两次的顺序不一样,False 为两次的顺序一样,默认是False ,但是一般设置为True
        • num_workers :多进程,加载数据的时候是使用多个进程还是单个进程进行加载 ,默认值为 0,就是主进程加载
        • drop_last : 比如总共 100批,每次取3 批,然后我最后还剩下一批,这批就舍去掉了

      • code
        • 1

        • result :表示一次获取4 张图片,并且是三通道的,32*32,tensor里面代表图片的target号,因为没有设置采集器,所以它是默认随机抽取的

      • code2 版本
        • 1

        • result 第24步,每一步都取 64张图片,但是最后一步不是64,因为我设置了剩下的不去舍去掉

        • 需要注意的是

    • 神经网络的基本骨架 nn.Module 的使用 --nn就是神经网络的缩写
      • 第一节
        • 神经网络

        • 神经网络 的输入需要 张量数据类型来输入,使其传入神经网络然后进行前向计算

        • 正向传播 (Forward Propagation)

        • 反向传播 (Backpropagation)

        • containers --神经网络骨架的基本搭建

      • 卷积操作
        • 卷积层

        • 从这里可以看到 卷积函数需要的一些参数

          • input 输入部分 :需要输入一个小批量(批量大小) 、in_通道(输入通道数),H,W

          • weight 权重部分 :需要一个 out_通道(通过卷积过后,输出通道数)、in_通道/groups(groups一般 =1 )、H、W

          • bias 偏置 部分 :需要 out_通道

          • dilation 膨胀部分 : 是卷积核当中每一个卷积核对应位的距离

          • padding 填充部分:填充左右两侧去填充 ,默认值:0 与无填充相同 。当padding = 1, 一般就是在图像特征图的周围填充一圈 0

        • 如何计算 ---从而得到一个卷积核 :对应元素相乘再相加,例如这个,三行后算完以后得到 10,也就是卷积核的第一行第一列的位置是10,其实最后得到的结果是由 Stride 步长来决定的

        • 如何用代码实现
          • 1、因为神经网络接收张量数据类型,所以第一步是转换输入的数据类型为张量
          • code

          • result

          • 补充学习的内容

          • 查看添加padding 参数之后的变化,可以明显看到 得到的矩阵变大了很多

      • 神经网络--卷积层 ---从图中就可以看出来最后输出的通道数,是有几个卷积核就有几个通道数

        • 什么是卷积

          • 参数

            • 对于kernel_size ,就是只需要定义一个大小,其中的数并不要我们去定义,那么这个卷积核的这个参数,这些值是从分布当中去进行一个采样得到的
        • code

          • result----------输出的是 表示神经网络模型的 字符串

        • 现在将加载的图片都放入神经网络,然后看看经过卷积过后的数据格式

        • 对比一下,可以看到原图经过卷积过后还是有一些变换的,可以通过通道数和图片大小来体现,在定义卷积层的时候,定义了输出的通道数为6,所以最后得到一个为6通道数的数据,并且定义了步长为1和 卷积核的大小为4,得到了29*29大小的 数据。

        • 现在我们使用之前学过的tensorboard 来把图像更加形象的展示出来

        • 借助tensorboard工具可以看到,这个是我下载的数据集,原图

        • 这个是我的原图通过卷积过后得到的图片

        • 重点又来了,向这种要一次就往tensorboard中放很多图片,大于等于两张,就要使用writer.add_images
    • 神经网络--最大池化的使用
      • 池化的目的
        • 池化是卷积神经网络中的一种常用操作,也称为下采样,其目的是减小每个特征图的维数。池化可以加速计算,降低过拟合,并使特征具有平移不变性。
        • 1、 减小计算量
          • 卷积神经网络的计算量是非常庞大的,池化可以显著减少每一层的计算量。经过卷积提取的特征图经过池化后被压缩了一定的大小,减少了需要计算的参数和计算量。同时,池化也可以降低特征图的空间分辨率,从而使得后续的操作的计算量进一步减少。
        • 2、防止过拟合
          • 卷积神经网络的计算量是非常庞大的,池化可以显著减少每一层的计算量。经过卷积提取的特征图经过池化后被压缩了一定的大小,减少了需要计算的参数和计算量。同时,池化也可以降低特征图的空间分辨率,从而使得后续的操作的计算量进一步减少。
        • 3、平移不变性
          • 卷积神经网络是一种处理图像、声音等连续性数据的网络,它应该具有平移不变性。池化可以通过对每个子区域在卷积后选择最大值或者平均值的方式,使得神经元对输入的微小变化不敏感,从而提高其平移不变性。
        • 4、应用场景
          • 卷积神经网络是一种处理图像、声音等连续性数据的网络,它应该具有平移不变性。池化可以通过对每个子区域在卷积后选择最大值或者平均值的方式,使得神经元对输入的微小变化不敏感,从而提高其平移不变性。
      • 参数

        • stride 的默认值和 卷积层的stride的默认值不一样,卷积层的默认值 =1 ,而 最大池化这里的 stride默认值为 kernel_size(卷积核数)
        • dilation ---空洞卷积
          • a ) 为普通卷积, b,c)为空洞卷积

          • 补充知识点 :感受野

        • return_indices 这个真的少用,所以没有讲解
        • ceil_mode :是用来定义当池化窗口移动的时候,当通过不同的步长来形成这种样子的时候,来决定这6个数是否都要舍去或者留下

          • 也就先当与 如果 = True 的话,就用使用 Ceiling模式 来保留

      • 最大池化操作
        • 得到框住的数字中最大的一个数

        • 例如

        • code实现 code 版本号 1.0

        • code实现
          • code

          • 使用tensorboard的时候的报错信息
            • tensorboard: error: argument {serve,dev}: invalid choice: 'logs_maxpool' (choose from 'serve', 'dev') ---------意思是路径中有空格
          • code -result

    • 非线性激活
      • 作用 概括

      • 拿 RELU来举例子
        • 需要填写一个参数

        • inplace 的意思就是说 ,当使用非线性变换的时候,这个值是不是覆盖原来位置的值,还是说,另外创建一个变换来保存这个非线性变换后的值

    • 线性层及其他层的介绍
      • 主要就是了解着几个层

        • 线性层 ---线性网络

          • 线性层需要的参数 feature :特征、特点

          • code1

          • code 1-result

            • 第一行是原始的图片的shape,第二行是进行展平的一个形状,第三个是经过线性层以后的一个形状,因为我们设置线性层的输入特征为196608 而输出特征为10,所以得到一下结果

          • 顺便介绍一个troch.flatten() ---用来展平的

    • 神经网络 -搭建小实战和Sequential(序列)---先当与之前学的compose不过它作用于神经网络结构的使用
      • 网页内容

      • CRFA 10 模型结构
        • 1

      • code 实现代码
        • 分析

        • code实现

        • 这种代码编写方式 更加简洁,而且输出的神经网络结构也有了序列编号,使用老版本的code 就没有序号

        • 使用可视化看看

    • 损失函数和反向传播
      • 概念定义

      • 反向传播的时候可以求出每个需要调节的参数,以及这个参数对应的梯度
      • 在这一节中讲究的是得到的值越小越好,但是又不能小的太彻底
        • L1loss function 它的计算方法

        • code +result ---小例子

      • MSELOSS 均方误差
        • code

      • 交叉熵

        • code

      • 复现损失函数 Loss function
    • 优化器
      • 首先需要自己购置一个优化器

      • 然后调用优化器step方法,它利用之前得到的梯度来对参数进行更新

    • 现有网络模型的使用和修改
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值