- 基本目录
- pytorch加载数据初认识
- Dataset and Datelabel
- 1
- 1
- import os (处理操作系统相关功能的标准库)
- 1
- os . path . join()这个函数就是用来将两个地址来拼接的,并且会自动根据系统来判断要拼接的符号
- 1
- import PIL
- 1
- code
- 1
- Tensorboard的使用
- 介绍
- TensorBoard是由TensorFlow提供的一个可视化工具,用于帮助开发者理解、调试和优化深度学习模型。它可以显示训练过程中的各种指标(如损失函数值、准确率等)的变化情况,同时还能展示模型的体系结构、计算图、张量值的分布等信息。通过TensorBoard,你可以更加直观地了解模型的运行状态,以及模型训练和优化的效果。
- 用法
- 1 需要完成的效果图
- 2、
- 代码运行完成以后,左上角出现了一个logs
- 3、 学习如何打开 logs文件夹
- 1、conda 命令行打开
- 2、pycharm终端
- 1,还可以使用 port关键字来设置端口号,避免冲突
- 结果
- 1,还可以使用 port关键字来设置端口号,避免冲突
- 添加标量的时候就添加了一下数据,包括标题,x,y轴
- 出现这个问题就使用多个文件来存储事件
- 4、add_image()的用法 : “ 常用来观察训练结果”
- 需要的数据类型为numpy、torch、string型,之前用的PIL 获取的图像信息是PIL型,所以不符合要求,所以开始使用opencv 来读取,opencv读取的就是numpy型
- TensorBoard 中 目前需要重点关注的东西,转换numpy ,指定shape
- 需要的数据类型为numpy、torch、string型,之前用的PIL 获取的图像信息是PIL型,所以不符合要求,所以开始使用opencv 来读取,opencv读取的就是numpy型
- 1 需要完成的效果图
- 图像变换 (例如:统一尺寸,类的转换)
- transform的使用
- 介绍
- Torchvision 中的 transforms
- 介绍
- 鲁棒性
- 略微研究一下transforms的源代码
- , ToTensor -----张量,并且可以使用GPU来进行加速计算
- 里面有很多功能的class
- 结构及其用法
- 为什么???
- code
- 1
- result
- Ai理解代码
- 主体思想
- 1
- , ToTensor -----张量,并且可以使用GPU来进行加速计算
- Transorforms ---torch 和 tensorboard--writer结合的使用
- 介绍
- 常见的Transforms
- 1
- python中 __call__ 的用法
- ToTensor的使用
- code
- code
- Normalize 的使用 (对输入图像进行归一化的处理)
- 归一化处理的算法-----------输入的值 减去平均值再除以标准差
- 计算公式 :最后那是 ,input输入范围为[0,1]然后通过公式计算出 结果的范围为 [-1,1]
- code
- 辉哥整理版本
- 辉哥整理版本
- 答疑
- 归一化过后,因为某些原因,归一化之前和之后的值可能很相近
- 归一化处理的算法-----------输入的值 减去平均值再除以标准差
- Resize()的使用 (对输入图像进行尺寸大小的处理)
- 1
- code
- 1
- 1
- result
- 1
- 1
- 1
- Compose()的使用 (将多个图像处理操作组合在一起,以便于一次对图像进行处理)
- 1
- 1
- totensor数据类型如何转换为PIL
- RandomCrop()用法 ---随机裁剪
- code
- 1
- code
- 总结使用过方法
- 1、源码的输入 数据格式要求,输出是什么类型
- 2、多看官网文档
- 3、关注方法需要什么参数
- 1
- Torchvision中的数据集使用
- code
- result
- code
- Dataloader 的使用----数据加载器
- 例如 把数据加载到神经网络当中
- code ,可以看到它需要的参数很多,但是大多数都是有默认值的,一般有默认值的用默认值就好了
- 常见参数设置
- batch_size :每次抓取张数
- shuffle :打乱顺序 ,True为两次的顺序不一样,False 为两次的顺序一样,默认是False ,但是一般设置为True
- num_workers :多进程,加载数据的时候是使用多个进程还是单个进程进行加载 ,默认值为 0,就是主进程加载
- drop_last : 比如总共 100批,每次取3 批,然后我最后还剩下一批,这批就舍去掉了
- code
- 1
- result :表示一次获取4 张图片,并且是三通道的,32*32,tensor里面代表图片的target号,因为没有设置采集器,所以它是默认随机抽取的
- 1
- code2 版本
- 1
- result 第24步,每一步都取 64张图片,但是最后一步不是64,因为我设置了剩下的不去舍去掉
- 需要注意的是
- 1
- 神经网络的基本骨架 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
- input 输入部分 :需要输入一个小批量(批量大小) 、in_通道(输入通道数),H,W
- 如何计算 ---从而得到一个卷积核 :对应元素相乘再相加,例如这个,三行后算完以后得到 10,也就是卷积核的第一行第一列的位置是10,其实最后得到的结果是由 Stride 步长来决定的
- 如何用代码实现
- 1、因为神经网络接收张量数据类型,所以第一步是转换输入的数据类型为张量
- code
- result
- 补充学习的内容
- 查看添加padding 参数之后的变化,可以明显看到 得到的矩阵变大了很多
- 卷积层
- 神经网络--卷积层 ---从图中就可以看出来最后输出的通道数,是有几个卷积核就有几个通道数
- 什么是卷积
- 参数
- 对于kernel_size ,就是只需要定义一个大小,其中的数并不要我们去定义,那么这个卷积核的这个参数,这些值是从分布当中去进行一个采样得到的
- 参数
- code
- result----------输出的是 表示神经网络模型的 字符串
- 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)为空洞卷积
- 补充知识点 :感受野
- a ) 为普通卷积, b,c)为空洞卷积
- return_indices 这个真的少用,所以没有讲解
- ceil_mode :是用来定义当池化窗口移动的时候,当通过不同的步长来形成这种样子的时候,来决定这6个数是否都要舍去或者留下
- 也就先当与 如果 = True 的话,就用使用 Ceiling模式 来保留
- 也就先当与 如果 = True 的话,就用使用 Ceiling模式 来保留
- 最大池化操作
- 得到框住的数字中最大的一个数
- 例如
- code实现 code 版本号 1.0
- code实现
- code
- 使用tensorboard的时候的报错信息
- tensorboard: error: argument {serve,dev}: invalid choice: 'logs_maxpool' (choose from 'serve', 'dev') ---------意思是路径中有空格
- code -result
- code
- 得到框住的数字中最大的一个数
- 补充资料
- 内容
- 最大值池化的优点是 黑背白图 ,而均值池化的优点是 白背 黑图
- 全局池化方式
- 内容
- 池化的目的
- 非线性激活
- 作用 概括
- 拿 RELU来举例子
- 需要填写一个参数
- inplace 的意思就是说 ,当使用非线性变换的时候,这个值是不是覆盖原来位置的值,还是说,另外创建一个变换来保存这个非线性变换后的值
- 需要填写一个参数
- 作用 概括
- 线性层及其他层的介绍
- 主要就是了解着几个层
- 线性层 ---线性网络
- 线性层需要的参数 feature :特征、特点
- code1
- code 1-result
- 第一行是原始的图片的shape,第二行是进行展平的一个形状,第三个是经过线性层以后的一个形状,因为我们设置线性层的输入特征为196608 而输出特征为10,所以得到一下结果
- 第一行是原始的图片的shape,第二行是进行展平的一个形状,第三个是经过线性层以后的一个形状,因为我们设置线性层的输入特征为196608 而输出特征为10,所以得到一下结果
- 顺便介绍一个troch.flatten() ---用来展平的
- 线性层需要的参数 feature :特征、特点
- 线性层 ---线性网络
- 主要就是了解着几个层
- 神经网络 -搭建小实战和Sequential(序列)---先当与之前学的compose不过它作用于神经网络结构的使用
- 网页内容
- CRFA 10 模型结构
- 1
- 1
- code 实现代码
- 分析
- code实现
- 这种代码编写方式 更加简洁,而且输出的神经网络结构也有了序列编号,使用老版本的code 就没有序号
- 使用可视化看看
- 分析
- 网页内容
- 损失函数和反向传播
- 概念定义
- 反向传播的时候可以求出每个需要调节的参数,以及这个参数对应的梯度
- 在这一节中讲究的是得到的值越小越好,但是又不能小的太彻底
- L1loss function 它的计算方法
- code +result ---小例子
- L1loss function 它的计算方法
- MSELOSS 均方误差
- code
- code
- 交叉熵
- code
- code
- 复现损失函数 Loss function
- 概念定义
- 优化器
- 首先需要自己购置一个优化器
- 然后调用优化器step方法,它利用之前得到的梯度来对参数进行更新
- 首先需要自己购置一个优化器
- 现有网络模型的使用和修改
- Dataset and Datelabel