![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深度学习
文章平均质量分 79
ccdous
这个作者很懒,什么都没留下…
展开
-
物体检测算法
基于基础网络块和各个多尺度特征块,单发多框检测生成不同数量和不同大小的锚框,并通过预测这些锚框的类别和偏移量检测不同大小的目标。Faster R-CNN将Fast R-CNN中使用的选择性搜索替换为参与训练的区域提议网络,这样后者可以在减少提议区域数量的情况下仍保证目标检测的精度。R-CNN对图像选取若干提议区域,使用卷积神经网络对每个提议区域执行前向传播以抽取其特征,然后再用这些特征来预测提议区域的类别和边界框。(2)在训练单发多框检测模型时,损失函数是根据锚框的类别和偏移量的预测及标注值计算得出的。原创 2024-07-16 20:53:20 · 320 阅读 · 0 评论 -
锚框及代码
---------------------------------------------------------------------------------------------------看不下去了,下次看。#一个形状为 (N, M, 2) 的张量,其中 N 是 boxes1 的数量,M 是 boxes2 的数量,2= 表示每个交集框的宽度和高度。#(c_assigned_bb[:, :2] - c_anc[:, :2]) 表示真实边界框和锚框的中心坐标 (中心x, 中心y)原创 2024-07-14 16:12:48 · 482 阅读 · 0 评论 -
物体检测和数据集
选择了一个批次中的前10张图像,执行了维度置换操作,将图像的维度从PyTorch的默认格式 (batch_size, channels, height, width) 调整为 (batch_size, height, width, channels)# 这里的target包含(类别,左上角x,左上角y,右下角x,右下角y),(2)边界框中心的(𝑥,𝑦)轴坐标以及框的宽度和高度。"""从(左上,右下)转换到(中间,宽度,高度)""""""从(中间,宽度,高度)转换到(左上,右下)"""原创 2024-07-14 11:19:30 · 583 阅读 · 0 评论 -
微调及代码
2、除输出层外,目标模型从源模型中复制所有模型设计及其参数,并根据目标数据集对这些参数进行微调。4、在目标数据集(如椅子数据集)上训练目标模型。输出层将从头开始进行训练,而所有其他层的参数将根据源模型的参数进行微调。1、微调是在目标数据集上的正常训练任务,但使用更强的正则化(有更强的lr和更少的epoch)3、向目标模型添加输出层,其输出数是目标数据集中的类别数。3、通常,微调参数使用较小的学习率,而从头开始训练输出层可以使用更大的学习率。这将复制源模型上的所有模型设计及其参数(输出层除外)。原创 2024-07-11 17:23:10 · 621 阅读 · 0 评论 -
数据(图像)增广
4、为了在预测过程中得到确切的结果,我们通常对训练样本只进行图像增广,而在预测过程中不使用带随机操作的图像增广。1、增加一个已有数据集,使得有更多的多样性,比如加入不同的背景噪音、改变图片的颜色和形状。5、深度学习框架提供了许多不同的图像增广方法,这些方法可以被同时应用。#面积为原始面积10%到100%的区域,宽高比从0.5~2之间随机取值。1、数据增广通过变形数据来获取多样性,从而使得模型泛化性更好。2、常见图片增广包括翻转、切割、变色。2、增强数据是在线生成的。3、就是把数据集换了而已。原创 2024-07-11 15:56:47 · 501 阅读 · 0 评论 -
分布式训练
跟多GPU不同是:数据不是从主存拿的,是在分布式文件系统拿的,有多个工作站,工作站中有多个GPU,通过网络读取数据到GPU中,GPU通过网络接收到来自参数服务器的参数进行运算计算梯度,最后将梯度传回服务器,服务器对梯度进行求和更新参数。在分布式计算时要避免通信的开销大于计算的开销,一个简单的方法就是将batchsize增大,但数据集不大的时候用过于大的batchsize可能会使测试精度变低;但随着批量大小的增加,收敛程度会变低,需要更多的epoch进行训练,所以需要权衡。6、将所有GPU中的梯度求和。原创 2024-07-11 12:00:10 · 198 阅读 · 0 评论 -
单机多卡并行及多GPU训练
将ASIC设计为2D,为了深度学习内的矩阵运算;卷积也可以换成矩阵乘法。FPGA通常是做模拟的,做好后模拟成功进行ASIC留片。深度学习是计算密集型运算,GPU更适合计算密集型运算。四、Systolic Array。这是一种板子,可以进行烧制编程。一个PE里面可以做一个简单运算。一、DSP:数字信号处理。FFT:快速傅里叶变换。二、可编程阵列FPGA。原创 2024-07-10 10:53:05 · 184 阅读 · 0 评论 -
硬件:CPU和GPU、TPU和其他
2、Cpu一次可以计算一个线程,而gpu有多少个绿点一次就能计算多少个线程,Gpu比cpu快是因为gpu它的核多,Gpu通过多核和大的带宽去提高了运算效率,但gpu它的内存做不了很大。1、超线程一般是给不一样的任务的计算使用,而非在计算密集型工作中。3、每秒计算的浮点数,浮点数乘以主频。二、提升CPU利用率:计组学过的。三、提升GPU的利用率。原创 2024-07-09 17:06:41 · 156 阅读 · 0 评论 -
残差网络(ResNet)
(1)捷径连接(Shortcut Connection)实现了恒等映射(Identity Mapping),也就是说,网络至少可以直接输出输入数据的原始值 𝑥x。6、因为最优点附近梯度为0,拟合得越好,越靠近最优点,梯度越小,相应的最优点附近就越平坦;(2)通过捷径连接,梯度可以直接从输出层反向传播到输入层。3、利用残差块(residual blocks)可以训练出一个有效的深层神经网络:输入可以通过层间的残余连接更快地向前传播。4、残差块先接高宽减半(步幅为2)通道乘以2,再接多个高宽不变的残差块。原创 2024-07-09 16:37:22 · 557 阅读 · 0 评论 -
批量归一化
在原来我们会考虑到梯度爆炸或梯度消失的情况,学习率过大的话,上层的梯度比较大,可能会直接爆炸,学习率过小下层梯度小可能训练不动,但是加入批量归一化之后,我们将每一层的输入都固定在一个比较稳定的范围内,这样就可以使用更大的学习率,不用担心出现之前的那样问题。2、初始化一般是一个均值为0,方差为1的的分布,如果不是那么适合的话,我们可以去学习一个新的方差和均值,能更好的进行神经网络的学习,BN的作用是把我们的均值方差拉的比较好,每一个新的小批量都会重新计算其均值和方差。momentum步长。原创 2024-07-09 11:18:15 · 666 阅读 · 0 评论 -
含并行连结的网络
2、GoogLeNet将9个设计精细的Inception块与其他层(卷积层、全连接层)串联起来,是第一个达到有上百层的网络。它通过不同窗口形状的卷积层和最大汇聚层来并行抽取信息,并使用1×1卷积层减少每像素级别上的通道维数从而降低模型复杂度,主要优点是模型参数小,计算复杂度低。2、并不强求最后的stage得出来的个数等于类别数,可以通过全局avegpool得到的结果拉成通道数的向量,在使用全连接层将其映射到相应的标号上。变种的1×7、7×1(3同理)卷积层是一个先看行的信息,另外一个在看列的信息。原创 2024-07-06 23:28:56 · 535 阅读 · 0 评论 -
网络中的网络 NiN
3、最后使用全局平均池化层得到输出(输出通道数是类别数),全局池化层它的高宽等于输入的高宽,等价于对一个类别来说,把它的平均拿出来,把这个值当做类别的预测,再加上soft max就能得到我们的预测了,这样我们就可以不用使用全连接层了,减少我们所占用内存的参数个数。3、一个卷积层后跟两个全连接层(1*1卷积,步幅1,无填充,输出形状跟卷积层输出一样,起到全连接作用):1×1卷积层相当于一个全连接层,它所做的操作是,按照像素去逐一做的全连接层。1、卷积层的参数:输入的通道数乘以输出的通道数再乘以窗口的高宽。原创 2024-07-06 22:55:11 · 843 阅读 · 0 评论 -
使用块的网络 VGG
1、VGG-11使用可复用的卷积块构造网络。不同的VGG模型可通过每个块中卷积层数量和输出通道数量的差异来定义。2、不同次数的重复块得到不同的架构,eg:VGG-16(卷积层和全连接层相加的总数)2、VGG块:3*3卷积(pad=1,n层,m通道)、2*2最大池化层。2、块的使用导致网络定义的非常简洁。使用块可以有效地设计复杂的网络。3、深层且窄的卷积(即3×3)比较浅层且宽的卷积更有效。1、深度学习追求更深更大,使用VGG将卷积层组合为块。1、多个VGG块后接全连接层。一、AlexNet与VGG。原创 2024-07-06 21:17:38 · 212 阅读 · 0 评论 -
深度卷积神经网络 AlexNet
2、relu与sigmoid的相比,relu在正值的梯度更大,梯度在正区间恒为1,在负区间为0,并且在零点的时候,relu的一阶导更好一点,Sigmoid 函数的导数在极值处(接近0或1)非常小,会导致梯度在反向传播过程中迅速衰减。1、在90年代的时候,数据量不是特别大,计算也比较均匀, 我们常用是神经网络,因为神经网络是一个比较便宜的框架,模型是比较小的,因为做了一个随机梯度下降,所以对内存的要求并不是特别高。4、计算能力和数据所要的算法能力,他们在不同阶段的发展程度,导致大家对网络的选取有不同的偏好。原创 2024-07-06 13:42:05 · 552 阅读 · 0 评论 -
经典卷积神经网络 LeNet
eval是将模型设置为评估模式,评估模式就不会改变模型参数了可以用来预测结果;#如果未提供设备参数,则使用模型第一个参数的设备作为默认设备。#(i + 1) % (num_batches // 5)每训练到一个阶段时(5次中的每一次)会更新可视化数据。# 训练损失之和,训练准确率之和,样本数。"""使用GPU计算模型在数据集上的精度""""""用GPU训练模型(在第六章定义)"""#我们传入的是28*28,所以加了padding。# 正确预测的数量,总预测的数量。计算的是当前批次的总损失。原创 2024-07-04 21:37:25 · 857 阅读 · 0 评论 -
池化层(最大、平均)
1、卷积层对位置非常敏感,使用卷积层时,可能一个地方的轻微变动都会使结果发生变化,我们希望不要这么敏感,就有了池化层(更加柔和)。(1)对于CNN卷积核可学习是指,卷积核的数值不是预先固定的,而是在训练过程中通过反向传播算法自动调整和优化的。2. 前向传播:在每一次前向传播中,卷积核对输入数据进行卷积操作,生成特征图。5. 参数更新:使用优化算法(如梯度下降法),调整卷积核的值。2、二维最大池化:返回滑动窗口中的最大值,每个窗口中最强的模式信号。(步骤:1. 初始化:卷积核的初始值通常是随机生成的。原创 2024-07-04 14:20:21 · 343 阅读 · 0 评论 -
卷积层里的多输入多输出
torch.stack((K, K + 1, K + 2), 0)将原来的卷积核 K、K + 1和 K + 2叠加在一起,形成一个具有3个输出通道的卷积核张量。#K是一个四维卷积核,K的形状为 (C_out, C_in, K_h, K_w),其中 C_out是输出通道数,C_in是输入通道数,K_h和 K_w分别是卷积核的高度和宽度。(1)对每一个输入,它对应C_o维度个的三维核,核拿出来与每一个输出通道一一做运算,就会得一个输入的三维矩阵对应它的多个输出通道;每一个输出通道在识别一个特殊的模式;原创 2024-07-04 09:34:01 · 748 阅读 · 0 评论 -
卷积层里的填充和步幅
(1)输出大小与层数线性相关,加入了步幅能使之线性相关,步幅将模型输出成倍的减少,使得我的计算量不会过于复杂。(2)步幅可以减小输出的高和宽,例如输出的高和宽仅为输入的高和宽的1/𝑛(𝑛是一个大于1的整数)。# 这里的(1,1)表示批量大小和通道数都是1,将X.shape追加到(1, 1)后面。2、对于卷积,我们另一个超参数是核的大小,通常使用的卷积核是3×3或者5×5,很少用偶数核。(3)步幅是每次滑动核窗口时的行/列的步长,可以成倍的减少输出形状。(2)n是输入,k是卷积核,p是填充,s是步幅。原创 2024-07-03 21:38:51 · 504 阅读 · 0 评论 -
从全连接到卷积
全连接层的权重矩阵的维度可以表示为 (n,m),其中 n 是输入神经元的数量,m 是输出神经元的数量。如果一个全连接层有 4 个输入维度和 3 个输出维度,那么它的权重矩阵的维度就是 4×3。输出的一个窗口所用的只是一个2×2的矩阵,这说明了局部性。i,j变的时候,不能让w跟着变,即在别的维度都是一样的权重,否则失去平移不变性。(4)卷积核矩阵的大小,控制的是局部性;# 构造一个二维卷积层,它具有1个输出通道和形状为(1,2)的卷积核。(3)这是卷积操作子的情况,后面会写卷积层的操作。原创 2024-07-03 21:19:05 · 930 阅读 · 0 评论 -
选GPU运行
1、数据在同一个GPU上,可以将它们相加,若不在同一设备上,cpu里面数据放到gpu上会很慢,所以运算要在同样的设备上进行。2、Z = X.cuda(1),也可以创建不同设备的数据(x在cuda1上,z在cuda2上)1、将模型参数放到GPU上net = net.to(device=try_gpu())"""返回所有可用的GPU,如果没有GPU,则返回[cpu(),]""""""如果存在,则返回gpu(i),否则返回cpu()"""2、将张量分配给设备,没有GPU也可以运行。1、查询可用gpu的数量。原创 2024-07-02 20:49:06 · 344 阅读 · 0 评论 -
深度学习计算
它的任何子类都必须定义一个将其输入转换为输出的前向传播函数, 并且必须存储任何必需的参数。请注意,输出的形状可能与输入的形状不同。例如,我们上面模型中的第一个全连接的层接收一个20维的输入,但是返回一个维度为256的输出。#写在上一节,旨在保持每层网络的输入和输出的方差一致,从而避免梯度消失或爆炸的问题,可以 在不同的输入输出维度下进行权重范围选择达到目的。模型中,实现了一个隐藏层,权重不是一个模型参数,因此它永远不会被反向传播更新,神经网络将这个固定层的输出通过一个全连接层。原创 2024-07-02 17:16:17 · 438 阅读 · 0 评论 -
数值稳定性、模型初始化和激活函数
Var(x)=E(x^2)-E(x)^2,这里E(x)=0(把E^2变成了Var[])pytorch的normal函数里面传参是标准差,数学上的正态分布写的是方差,这里按normal函数来的。b、对学习率敏感,如果学习率太大->大参数值->更大的梯度,如果学习率太小>训练无进展,我们可能需要在训练过程不断调整学习率。h^(t-1)是t-1层的输出,也就是t层的输入,y是需要优化的目标函数,向量关于向量的倒数是一个矩阵。3、将每一层的输出和梯度都看成随机变量,使每一层权重为均值为0,方差为常数、原创 2024-06-27 20:10:56 · 451 阅读 · 0 评论 -
暂退法及代码
在预测中,不进行训练时,直接返回不做丢弃:即一旦模型训练完成,并且在测试集上验证模型的性能后,我们希望使用模型进行实际的预测或应用。在这个阶段,不再需要使用正则化来限制模型的复杂度,因为我们关心的是模型在新数据上的预测能力。2、使用有噪音的数据等价于Tikhonov正则,丢弃法其实是一个正则,正则都是为了使权重不要过大,使训练过拟合。3、正则式只在训练中使用,用于控制w超参数范围来限制模型的复杂度,防止过拟合。暂退法在前向传播过程中,计算每一内部层的同时丢弃一些神经元。要保持前后期望E不变。原创 2024-06-26 10:28:12 · 399 阅读 · 0 评论 -
权重衰退及代码
随着 𝜆λ 增大,模型在优化过程中会更加倾向于减小参数 wi 的值,以减少正则项的值。极端情况下,当seta等于0,意味着所有的w为0,即只有一个偏移,比如seta为1 ,每个w都不会大于1,并且当w越多,每个w就相当于越小。2、正则项也称为岭回归中的正则化项,向损失函数中添加L2范数(参数向量的平方和),有助于防止模型过度拟合训练数据,通过惩罚较大的参数值来促使模型更加简单(限制w的取值)且泛化能力更强。正则化是处理过拟合的常用方法:在训练集的损失函数中加入惩罚项,以降低学习到的模型的复杂度。原创 2024-06-25 20:26:54 · 827 阅读 · 0 评论 -
模型选择、过拟合与欠拟合
1、模型容量:拟合各种函数的能力,可以理解为模型的复杂程度,低就是简单模型,高就是复杂模型。(3)VC维:VC维度定义了在假设空间中能够被模型拟合的样本点的最大数量,例如二维空间的vc维是3,在多1个点,比如四个点就陷入了XOR问题,这里知道大概概念就好了。对于有一层隐藏层的感知机,其中这一层输出位m维向量,最终输出层向量为k,按照线性模型反推,输入->隐藏层(d+1)*m,隐藏层->输出层(m+1)*k。3、简单数据高模型容量可能过拟合,就相当于模型将数据全部记下来了,包括很多噪音,对新数据没有泛化性;原创 2024-06-25 17:27:53 · 1016 阅读 · 0 评论 -
多层感知机
而感知机输出的是一个离散的类,是一个二分类问题,可以0、1,也可以1、-1。4、对损失函数,如果分类正确y<w,x>大于0,损失函数值取0,就没有梯度不用更新;通过蓝色的线和黄色的线将其分隔,将1234分类正负,再进行一次product运算将其分开,就相当于多了一层的计算,最终将其分类。(3)如果没有激活函数,西格玛是线性,最终的o依旧是线性函数,相当于单层感知机,激活函数防止层数坍塌。(3)ReLU激活函数,这个最简单,因为前面的激活函数要算e的指数,需要不小的代价。1、感知机是二分类问题。原创 2024-06-23 12:24:59 · 946 阅读 · 0 评论 -
softmax回归
其基本思想是将每个类别表示为一个向量,其中只有一个位置的值为1,其余位置的值为0。#这里W.shape[0]=784,X是256*28*28,X.reshape((-1, W.shape[0]))令X成为256*784的矩阵。#例子里的图片是(1,28,28),如果我们后面要用到大的图片,可以使用resize去更改大小。#y_hat[range(len(y_hat)), y]取出了真实标号的预测概率。"""下载Fashion-MNIST数据集,然后将其加载到内存中"""原创 2024-06-23 00:30:15 · 611 阅读 · 0 评论 -
线性神经网络-线性回归
计算完损失后,我们开始反向传播,存储每个参数的梯度。#生成一个均值为0、标准差为1、形状为(num_examples, len(w))的张量,num_examples样本数量,len(w)特征数量。6、只有线性回归有显示解,有显示解的模型比较简单,机器学习通常用于解决NP-complete问题,我们通常不追求显示解,因为这样会应付不了困难的数据。以预估房价为例,X为nx2矩阵,代表n间房子面积和房龄,y为n维列向量,代表真实价格。# 这些样本是随机读取的,没有特定的顺序,shuffle()打乱顺序。原创 2024-06-22 13:42:56 · 1071 阅读 · 0 评论 -
自动求导(正、反向传播)
5、一般对于输入数据会先正向计算结果,再反向计算梯度,正向计算时会保存所有的中间变量,计算梯度的时候已经有了abz的具体值了,直接带入就能得到导数,比如dz/db=2b。4.一般调用反向传播计算梯度都是标量,若遇到向量*向量的情况(即y也为向量)可以先求sum转化为标量再调用反向传播求梯度,如下图x.grad==2*x。5.u=y.detach()此处表明,将u当作一个常数,而非关于x的函数,求导自然为常数u,如上图中z.sum().backward()y=2*torch.dot(x,x)#内积。原创 2024-06-22 09:15:04 · 282 阅读 · 0 评论 -
线性代数、矩阵计算
(2)使用keepdims可以保留维度,便于广播机制同样shape操作,被求和那个维度大小变为1,也就是前者直接拍扁了,后者会按的长度为1。对矩阵,F范数,前面写到了,torch.norm(矩阵)。L2范数:(对向量)torch.norm(向量),得到一个标量,元素平方和的开根。4、范数,b、c为向量,A为矩阵。(2)Y是列向量,x是标量,y关于x求导也是列矩阵。(1)Y是标量,x是列向量,y关于x求导是行矩阵。I是对角矩阵,a是与x无关的矩阵。1、对于向量,若a是标量,为a的绝对值乘以b的向量长度。原创 2024-06-20 20:25:49 · 482 阅读 · 0 评论 -
数据操作、数据预处理
改变一个张量的形状而不改变元素数量和元素值x.reshape(3, 4);四、广播机制,对于不同形状的数组,对其进行运算时,会将其广播为相同形状的数组再进行运算。2、不重复使用x,可减少内存开销,x=x+y(析构操作;1维(向量):一个特征向量(将样本抽象为数字)2维(矩阵):一个样本的特征矩阵(样本、特征)4维:比如一个RGB图片的批量(一批3维的)对张量中的所有元素进行求和X.sum(),会产生一个标量。0维(标量):表示一个物体的类别。二、创建数组:形状、元素数据类型、元素的值。原创 2024-06-20 15:22:03 · 232 阅读 · 0 评论