经典神经网络之VGG16
前言VGG16相比AlexNet采用多个小卷积核(如3个3×3代替7×7)来增加网络深度,减少参数量,同时保持较大感受野,提升模型性能,且小卷积核更利于保持图像特征。 一、整体结构VGG系列更像是一个定式的网络,通过隐藏层的数量来进行编号 优点是结构简洁,使用统一的3×3卷积核和2×2最大池化,通过加深网络结构提升性能; 缺点是计算资源耗费大,参数多(主要集中在全连接层),模型大(约500M),训练时间长,但有公开的预训练模型可供使用。 二、模型代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293import torchfrom torch import nnfrom torchsummary import summaryclass VGG16(nn.Module):...
经典神经网络之AlexNet
前言AlexNet和LetNet的网络结构大差不差,主干都是卷积层与池化层的线性排列,但是AlexNet比LetNet深很多,主要是五个卷积层、两个全连接隐藏层和一个全连接输出层 一、整体结构AlexNet输入为RGB三通道的227 × 227 × 3大小的图像,通过增加网络深度,AlexNet 能够更好地学习数据集的特征,从而提高了图像分类的精度 二、ReLU函数在进行激活时,AlexNet使用了RELU激活函数, 相比 sigmoid 和 tanh 函数,能有效缓解梯度消失问题,加速收敛,且计算简单高效。其稀疏激活特性还能减少冗余信息,提升特征提取效率。 三、数据增强和Dropout数据增强可以通过对图像进行旋转、翻转、裁剪等变换,增加训练数据的多样性,提高模型的泛化能力 Dropout 则是在训练过程中随机删除一定比例的神经元,强制网络学习多个互不相同的子网络,从而提高网络的泛化能力 共同的目的都是提高网络的泛化能力 注意Dropout在随机删除神经元时不是直接删除,而是随着神经元的删除而改变 例如将Dropout 概率 p=0.5为了保持期望值不变,未被...
经典卷积神经网络之LeNet
前言:卷积层的输入要求卷积层对图像的输入顺序有要求,[batch, channel, height, width],当图片为灰度图是,第一层卷积的in_channels=1,后续out_channels=卷积核数量 图片原本的顺序是(height, width, channels),需要用permute来处理,并且将数值转换为浮点型 卷积、矩阵乘法等可能无法正确处理非浮点类型的数据。 一、网络结构解读 模型在手写数字识别上具有良好的效果,但是结构较为简单,只涉及卷积,池化,全连接的线性排列,这里不做过多介绍,毕竟神经网络这些参数可解释性都很差,学习他的搭建结构就好 输出特征图的参数计算比较简单,主要是在第一层全连接层的输入那里需要填。 1.1 线性层的最后输出 值得一提的是在 LeNet 模型中,最后一个线性层的输出是一个大小为 10 的向量,这些输出值被称为 logits。这些 logits 是模型对输入图像属于每个类别的原始预测值,还没有经过 Softmax 函数处理。 真正传入softmax,将预测值转变为概率是在训练阶段的交叉熵函数中$$\text...
部署本地项目到Git仓库流程
前言:Gitee学习笔记一、用Git命令行指令上传创建好自己的Gitee账号后,首先在界面里面创建一个仓库 填好仓库的名称,路径和描述信息 这里可以看到一些基础的教学,先克隆仓库地址,例如LinYong/almost get back 回到需要放置仓库的文件夹,右键更多选项,点击open git bash here,打开终端界面 输入git clone + 仓库地址,可以在文件夹中看到新增的仓库文件夹 点进去新建文件,这里就是我们放工程文件的地方 在这里再打开open git bash here界面 依次输入这几条指令: 指令解析: git clone + 地址 ==>拉去别人的仓库到本地 git pull ==> 更新整个仓库的所有更改(别人修改的也可以看见),提交前一定要先pull,push之前先pull确保提交时是代码的最新版本 git add . ==>将更改过的新修改文件添加到暂存区,这里的 . 代表所有文件 git commit -m =...
卷积神经网络(CNN)原理
前言:何为卷积神经网络卷积神经网络是一种深度学习模型,包括了卷积层,激活函数,池化层以及全连接层等等,他的设计灵感来自于生物学中的视觉系统,旨在模拟人类视觉处理的方式。 CNN的三大特性:局部连接,权重共享,池化 一、卷积层1.1 卷积过程卷积层的主要作用是提取输入数据中的局部特征 这张动画中蓝色的框就是指一个数据窗口,红色框为卷积核(滤波器),最后得到的绿色方形就是卷积的结果(卷积操作是通过滑动卷积核,在每个局部区域上进行“先乘再和”的运算,最终生成一个特征图,每个输出值是一个标量。) 1.2 卷积层的作用以及涉及的超参数详解卷积层主要用来提取局部特征。 在实际使用中涉及到的参数有: 卷积核大小:决定了卷积核覆盖的局部区域大小,影响特征提取的粒度。较小的卷积核可以捕捉更细粒度的特征,适合提取边缘和纹理;较大的卷积核可以捕捉更广泛的特征,但计算量更大。 卷积核形状参数一定要是奇数,因为奇数大小的卷积核具有唯一的中心像素,便于在卷积操作中均匀取样并保持对称性,同时有助于处理图像边缘,避免模糊和信息损失。 步长:每次滑动的位置,控制卷积核每次移动的像素数,影响输出特征图的尺寸...
全连接神经网络、不同激活函数和梯度下降法的区别、神经网络批量标准化
前言 全连接神经网络(又称前馈神经网络或多层感知机)是最基础的神经网络结构,由众多带有参数的神经元组成,常用语对图像进行分类 博主会经常分享自己在人工智能阶段的学习笔记,欢迎大家访问我滴个人博客!(养成系Blog!) 小牛壮士滴Blog~ - 低头赶路 敬事如仪https://kukudelin.top/ 一、人工神经元(全连接神经网络的最小单位)神经元中的核心公式,本质上就是在每个神经元上进行一次逻辑回归,得到下一层的输入值: 构成人工神经元的三个关键因素,这里比较重要的是激活函数,如果没有激活函数的话本质上模型还是线性的。 神经元需要激活函数,核心原因在于引入非线性变换,从而突破线性模型的表达能力限制,如果神经元上全是Wx+b的运算,最终合成的网络都可以做矩阵合并成一个大的线性网络,而异或分类、图像识别等复杂任务是非线性问题,前面的文章我们已经对机器学习算法中的激活函数sigma,以及梯度下降法BGD,SGD和MGD进行了介绍,后续我们将继续介绍深度学习领域中涉及到的一些激活函数以及梯度下降算法。 二、全连接神经网络的组成在介绍激活函数和梯度下降之前,我们...
pytorch基本组件的使用以及神经网络完整训练流程介绍
前言:本篇文章是为后续更进一步学习经典神经网络,以及更先进的技术筑基,一定要牢牢掌握,年薪百万不是梦!! 一、Dataset1234from torch.utils.data import Datasetfrom PIL import Imageimport osimport random 用torch.utils.data中的Dataset组件来实现图片数据集的的合并以及标记标签的功能 1.1 MyData类这里需要我们自己来写一个MyData类用于初始化根目录,图片目录,并将他们拼接。以及实现取出单条数据和获取数据长度的方法 12345678910111213141516171819202122232425262728293031323334353637383940class MyData(Dataset): def __init__(self,root_dir,label_dir): """ 获取根目录和标签目录图片地址 将他们拼接后输出成图片相对路径地址列表 "&...
pytorch基础操作
前言: 此篇主要涉及pytorch的入门内容,主要是张量的基础操作以及使用pytorch进行反向传播,最后还简要介绍了pytorch的一系列常用的基础组件,以便对后续更深层次的学习任务奠定基础。 一、创建张量1.1 简单张量根据已有数据创建张量,torch.tensor默认数字类型是float32 123456789101112131415def test0(): # 创建标量 data = torch.tensor(10) print(data) # 使用numpy数组创建张量 data = np.random.randn(2,3) data = torch.tensor(data) print(data) # 使用列表创建多维张量 data = [[[i for i in range(10)],[j for j in range(10,20)]]] data = torch.tensor(data) print(data)test0() tensor(10) tensor([[ 0.5558, ...
K_Means算法与DBSCAN算法的工作流程与代码复现
前言 前面的文章中,我们讲述了用于回归的线性回归算法,用于分类的逻辑回归算法以及其变式softmax函数,其实不管是回归还是分类,都是通过已有的数据集,知道输入和输出结果之间的关系,然后根据这种已知的关系,训练得到一个最优的模型。这样的模式被称为监督学习。但是在实际生产中,这样既有特征(feature)又有标签(label)的数据集似乎需要使用特殊设备或经过昂贵且用时非常长的实验过程进行人工标记才能得到。当我们不知道数据集中数据、特征之间的关系,而是要根据聚类或一定的模型才能得到数据之间的关系时,我们称为这样的模式叫做无监督学习。在无监督学习中数据只有特征(feature)无标签(label),它本质上是一个统计手段,在没有标签的数据里可以发现潜在的一些结构的一种训练方式。 本篇文章我们来讲讲无监督学习中,用于聚类的K_Means算法与DBSCAN算法。 一、聚类和分类 聚类适用于没有明确类别标签的数据(无监督),目的是通过相似性将数据划分为若干个簇,以发现数据的内在结构和分布规律。它不需要预先定义类别,而是根据数据本身的特征自动分组。 分类则...
图像认识与OpenCV
前言先来一个高级的功能,获取图像指定位置坐标 123456789101112131415161718192021222324252627282930313233343536373839import cv2 as cvimport pandas as pdimport os# 回调函数,用于处理鼠标事件def mouse_callback(event, x, y, flags, param): if event == cv.EVENT_LBUTTONDOWN: # 左键点击 print(f"Left button clicked at: ({x}, {y})") # 将左键点击的坐标和类型保存到 CSV 文件 pd.DataFrame([{"X": x, "Y": y, "Type": "Left"}]).to_csv("click.csv", mode=...