- 博客(63)
- 收藏
- 关注
原创 力扣刷题热题100道之数组篇
思考:利用左右指针移动来决定sum的值由哪些数字决定,定义max,当sum>max时,对max进行更新。当sum当前值<=0时,表明当前范围的值对于增大数值无用,所以放弃这些值,注意是放弃当前无用的所有部分的值,直到sum>0或者l>r停止。r指针指向每次加上的新值,l指针指向开始范围值。
2025-03-01 13:26:00
238
原创 力扣刷题之链表篇
思考:删除链表中的一个节点要考虑链表不断链,需将被删除节点前的节点与被删除节点后的节点连接起来;此题头节点也有被删除的可能,所以建立一个虚拟节点作为头节点更方便使用。题号:203,707,206,142。203.移除链表元素。
2025-02-22 16:37:43
241
原创 力扣刷题之数组篇
使用变量h记录数组中与val值相等的元素的个数,将与val值不等的元素向前移动代替val值相等的元素,最后得到的元素个数为原长度-相等的值的个数。算法要求logn,使用二分查找,二分查找使用双指针low和high得到mid,若排序数组中含有想要查找的内容则返回mid,若无则返回low指针所指位置。可将负数看作是一个已排序的序列,将非负数看作是另一个,这样就是两个已排序的序列进行整合,你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。题号:35、27、977、209、59。
2025-02-20 14:22:46
612
原创 转置卷积的一些理解
转置卷积 当图像输入到卷积网络中,最终生成的特征图的宽高会减小 在语义分割中标签和原始图像大小一致,若输出宽高减小,不利于标签比对 于是使用转置卷积将图像宽高还原。在转置卷积的时候,就是由输入(原始输出)大小a,padding,stride,k求出输出(原始输入)的大小n。在卷积的时候,通常输入大于输出,可根据输入大小n,padding,stride,k求出输出的大小a。所以可以建立转置卷积中输入a与输出n的大小关系。转置卷积实际上就是卷积的逆运算。
2024-10-22 11:11:01
237
1
原创 深度学习-2:数据向量化
在逻辑回归中,x,w,b都是列向量,若要计算w.T*x+b,不向量化的话就需要for循环计算起来很麻烦。向量化后,使用numpy.dot(w,x)函数即可快速计算。
2024-10-20 22:21:06
463
原创 深度学习-1:逻辑回归和梯度下降
我们想要得到该输入是猫图的概率,也就是希望y_hat是一个0-1之间的值,但w.T*x+b所得值往往不为0-1之间的概率,所以使用sigmoid函数对w.T*x+b进行变换,输出一个概率值,w.T*x+b越大,输出概率越接近于1。学习算法旨在学习到合适的w和b使J获得最小值,对w和b进行初始化后,利用梯度下降法对w和b进行更新,以获得最小的J值。J,dw1,dw2,db作为累加器,记录一次迭代中多个样本损失,梯度总和,然后求这些值的平均值,对参数进行更新。以下图为例,将使J值最小的W值成为Wmin。
2024-10-20 21:57:03
556
原创 批量归一化Batch Norm
对于第三层隐藏层来说,要不断地学习更新参数将作为输入的a1,a2,a3,a4映射到一个正确的y_hat,但是在网络学习中,前面的层的参数也在变化,导致第三层隐藏的输入的数据一直也在变化,这涉及到协变量问题,通过引入BN层,可减少这些隐藏单元值的分布的不稳定性,使数据分布一直保持相同的均值和方差,减少了后面层对前面层的依赖,允许网络每一层独立学习。添加了BN层的网络,每层要学习的参数变成了4个,卷积或全连接层的w和b,BN层的拉伸和偏移参数。批量规范化层和暂退层一样,在训练模式和预测模式下计算不同。
2024-10-20 10:11:09
465
原创 单层卷积网络/简单卷积网络示例
对于单个过滤器,两者进行卷积获得z=wa0,在利用广播机制加上偏置b1,再利用激活函数进行激活,将经过不同过滤器的输出组合到一起就得到了这层的输出,下层的输入,实际上整个流程还是和全连接相似。不管输入数据多大,使用几个过滤器就提取几个特征,需要的参数不变,避免了大数据需要多的参数,避免了过拟合。卷积网络实质上还是想通过输入得到想要的输出,离不开输入特征,权重,偏置,激活函数。nH,nw,nc分别是高,宽和通道数,f是卷积核长宽,s是步幅,p是填充。在卷积网络最后一层,所有数据展平,作为全连接层的特征输入。
2024-10-19 19:11:49
221
原创 三维卷积-过滤器作用,输入输出通道数
若想提取红色通道的边缘特征,可以将过滤器其中一个通道上的数值设置为提取边缘的数值,将绿和蓝通道上的过滤器数值设置为全0。使用不同的过滤器来获取不同的特征,若想检测边缘特征,可以将过滤器设置为边缘检测过滤器。一个滤波器检测一个特征,若想检测多个特征选用多个滤波器。设置过滤器使之只对哪个通道有特殊作用是可行的。过滤器的个数=输出图像的通道数=提取的特征数。输入图像的通道数和过滤器的通道数要相同。输入图像的通道数=过滤器的通道数。输出图像的每个通道都表示一个特征。
2024-10-19 18:43:24
285
原创 填充与步幅
一个3x3的卷积核对6X6的图像进行卷积,得到一个4x4的图像此时,生成图像长或宽 l=n-f+1使用过滤器对图像进行卷积出现的问题有:每次卷积后图像都会变小,当网络过深的时候,就会遗失许多像素过滤器对边缘像素访问仅一次,对中间像素访问较多,会遗失边缘细节为解决以上问题,对图像进行填充对原图像进行填充后,利用滤波器进行卷积后的图像长或宽变成了:l=n+2p-f+1此时,输出图像大小与原图大小一致,并且边缘像素与输出图像的更多像素有关卷积分为valid和same类型。
2024-10-19 18:19:05
315
原创 归一化输入
当输入的不同的特征取值范围差异过大,取得对应参数差别也会很大,在对参数进行优化的过程中,参数小的维度步长较小,参数大的维度步长较大,优化过程中路径曲折,将输入归一化,使特征取值范围差别小,对应的参数范围差距小,优化起来更快速。算出特征均值,用特征的每个元素-对应均值。即可得到均值为0,方差为1的特征分布。算出对应方差,使用特征元素除方差。对于特征范围差别不大的无需归一化。
2024-10-19 14:55:55
321
原创 正则化-权重衰减
另一种思维就是若将总的损失看作是损失和正则项的总和,想要总的损失最小,就需要在损失和正则项之间找到一个平衡,正则项限制了参数的取值范围,防止参数取值过大。当添加正则项,若正则项前面的参数过大,要想减小损失函数的值只能是w趋于0,w趋于0减少了神经网络中神经元的影响,相当于屏蔽了一些神经元,使网络变得简单。以激活函数tanh为例,z=xw+b,正则化参数大,w小,z就小,激活范围就在原点周围,类似于线性函数,无法表示复杂的决策函数,减轻了过拟合。若添加了正则化项,反向求梯度的时候也要对正则化项求导。
2024-10-19 09:21:06
327
原创 6 卷积神经网络
图像中拥有丰富的结构,而这些结构可以被人类和机器学习模型使用。卷积神经网络(convolutional neural networks,CNN)是机器学习利用自然图像中一些已知结构的创造性方法。6.1.1 空间不变性在机器学习中,空间不变性通常与卷积神经网络(CNN)相关联。空间不变性包含平移不变性平移不变性使得CNN在处理图像数据时非常有效,因为它们可以识别出图像中的目标,而不管这些目标位于图像的哪个位置。卷积网络中,卷积层的权重被称为卷积核。
2024-10-15 21:22:38
799
原创 5.深度学习计算
若想访问某层的参数,用层来调用state_dict()函数。由于需要目标函数对参数求梯度进行优化,所以需要记录梯度。所以各层的参数也具有属性grad,梯度初始化为None。每个网络都由各层组成,一个网络模块中的层可由索引访问。使用named_parameters()访问所有参数。操作符用于将列表中的每个元组作为独立的参数传递给。网络中的参数一般是指各层权重和偏置。5.2.1.2 一次性访问所有参数。函数会直接打印列表中的元组。各层或者整个模型都可以调用。可直接对各层参数进行调用。5.2.1 参数访问。
2024-10-15 20:10:48
659
原创 2024/10/12 力扣 15.三数之和
当问题中变量较多时,常考虑固定某个变量,此题采用固定首个数去找另外两个数的方法。每次固定一个数,就会直接将该数的所有组合找完,所以与固定的数重复的值可直接跳过。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。答案中不可以包含重复的三元组。唯一可能的三元组和不为 0。唯一可能的三元组和为 0。,判断是否存在三元组。
2024-10-12 09:12:04
492
原创 2024/10/10 力扣11 盛最多水的容器
在需要移动指针时对此时容器的两个长进行判定,短的那个则被放弃,因为容器是以短的长度为长,当指针移动宽在减小的时候,短的那个不会存在比当前更大的容器。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。两个指针初始一个指向第一个,一个指向最后一个,此时宽最大,指针一步步移动是缩小宽的过程。将竖直方向看做长,水平方向看作宽,面积等于长乘宽,相当于两个变量。还要明确容器的长由两个竖直方向上短的那个决定。轴共同构成的容器可以容纳最多的水。
2024-10-10 13:07:49
271
原创 10/9 力扣128 最长连续序列
思想:找到一个序列中最小的元素再开始从1往后计数,若列表中存在比当前数更小的数,则不从当前数开始序列长度计数。,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。最长数字连续序列是 [1, 2, 3, 4]。将列表转化为集合,消除重复元素,避免重复遍历。请你设计并实现时间复杂度为。给定一个未排序的整数数组。
2024-10-09 20:20:42
272
原创 10/1 力扣 49.字母异位词分组
在创建d = defaultdict(list)之后,可以像使用普通字典一样使用d,但是当尝试访问一个不存在的键时,例如d['new_key'],defaultdict会自动创建一个新条目'new_key': [],并且不会抛出异常。与普通字典不同,defaultdict在初始化时可以指定一个默认工厂函数,这个函数会在访问不存在的键时被调用,返回一个默认值。若字符串字母组成相似,则排序后一定相等,将排序后的字符串作为键,使用这些字符的串都作为该键的值,最后将字典的值变为列表返回。
2024-10-01 16:15:53
600
1
原创 2024/9/26 day1 动手学习深度学习
正态分布(Normal distribution)又名高斯分布。数组切片:[start:end:step]矩阵实际上就是将被乘向量的空间进行扭曲。
2024-09-30 10:51:50
184
原创 构建网络遇到的问题-AlexNet
实质上train_dataset里面的内容是由所有图片进行排列的,每一行都由(img,类别号)组成。7.在模型训练完后,用图片去让模型进行分类,要注意模型使用的图片大小,输入的图像一般要是4维的。若当前文件是train.py位于在D:\projects\AlexNet\train.py。classes_to_idx:即目录下文件夹(类别)的对应的id,从0开始。8.模型最后输出一般是一个二维数组,(图片个数,类别个数)classes:即目录下文件夹(类别)的个数。transform=数据要进行的操作。
2024-09-25 19:07:46
986
原创 CV-day1 基础知识
图片中一个框是由多个像素点组成,彩色图片一般会有R,G,B三个通道,像素点是由数值表示,每个数字范围从0到255,下图所示的图片是一张248像素宽度,400像素高度的图片,并且有RGB三通道,那么这张图片可以用3x248x400个数字表示,每个数字范围从 0到255,模型的任务就是接受这些数字,然后预测出这些数字代表的标签(label)。0为黑色,255为白色。
2024-09-24 16:37:20
394
原创 2024/9/18 模型训练流程、利用GPU训练
一、模型训练流程以CIFAR10数据集为例:代码在train.py 网络模型在module.py一、模型训练流程1.获取数据集可用len获取数据长度2.使用DataLoader从数据集中获取数据3.构建网络模型一般网络模型会单独建立一个模块进行存放,若要使用,在使用模块进行引用if __name__ == '__main__':下的代码多用于当前模块的测试4.创建模型对象,损失函数,优化器5.创建一些模型参数6.训练过程小知识:对于item函数7.测试步骤。
2024-09-18 20:41:35
469
原创 2024/9/18 模型的存储与读取
2.在model_load文件中读取模型(方式一)和模型参数并装载模型(方式二)1.在model_save文件中保存模型(方式一)和模型参数(方式二)主要涉及到torch.save和torch.load函数。一、模型的存储与读取。
2024-09-18 18:17:11
263
原创 2024/9/18 损失函数,优化器,模型利用与修改
在损失函数中的输入是模型预测中的输出结果和目标结果损失函数都可在pytorch官方文档中查看。
2024-09-18 11:33:30
470
原创 2024/9/17 pytorch-卷积神经网络
pytorch有很多接口,其中的torch.nn可以让我们方便的调用以便生成神经网络各层是一个构成神经网络层的一个基本类别,一般生成一个类别来继承nn.moduletorch.tensor(a)将a初始化为一个tensor类型数据。
2024-09-17 16:44:06
2049
原创 2024/9/16 dataloader、tensorboard、transform
假设有一个名为pytorch的包dir():用于打开包,看里面的内容help():用于查看具体的内容的用处。
2024-09-16 21:25:39
1063
原创 9/7 力扣69,88
0则将nums2内的剩余的最小数据复制到nums1中 nums1[:n]=nums2[:n]当nums1[m-1]>nums2[n-1],nums1[k]=nums1[m-1],此时,nums1内有一个数据被安置,则m-1。将可找的值范围定在[0,x],每次与mid做比较,最后left所处位置的值一定是平方大于x的第一个值。否则,nums1[k]=nums2[n-1],此时,nums2内有一个数据被安置,则n-1。2.当m>0且n>0时,比较两数组末尾的数的大小,定义一个k值代表当前能放的最后的位置。
2024-09-07 19:48:17
816
原创 9/5 链表 力扣24,141,142
若有环则两指针一定会相遇,因为可以把fast指针走两步,slow指针走一步,看作是fast指针在一步一步向slow指针靠近(有点暧昧了哈哈哈)给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。错误点:开始只考虑改变两节点索引,这在前两个之间是适用的,若还要将链表联系起来,还需使用一个节点代表前方节点指向后方节点组。使用快慢指针得到两指针相遇点,指定一指针从头开始,一指针从相遇点开始,两指针相遇点即为环入口。指针再次到达,则链表中存在环。交换节点顺序涉及到节点指针的改变,要注意节点之间的连接。
2024-09-06 16:38:08
539
原创 9/4 链表-力扣 234、19
3.last和pre同时指向头节点,用last节点先走n步,当该节点走到链尾时,pre节点即指向要删除节点的前驱节点。将前部分值放入列表后,若有奇数个节点,则链表上的指针需再向后移一位;思考:链表遍历只能从前往后,为使能同时访问两端数据,创建一个列表去记录前部分数据。2.当链表有n个节点要删除倒数第n个时,直接返回头节点的后续节点。1.当链表只有一个节点并且要删除倒数第一个节点时,直接返回空。思考:在链表中要删除哪个节点,就要去找它的前驱节点。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。
2024-09-04 16:54:27
355
原创 9/3 链表-力扣160 、203、206
思考:首先判断头节点与val值之间的关系,若头节点值等于val值则将头一直往后移,循环停止后判断头节点是否为空;思考:若有公共节点则两链表一定会在某一个节点相遇,获取两个链表长度,得到长度差值,长链表先走差值,此时两个链表剩余长度相同,则在相遇时获取到公共节点。思考:生成一个固定的头节点,将链表的每个元素使用头插法插入到新链表中即可完成反转。,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回。,请你反转链表,并返回反转后的链表。,函数返回结果后,链表必须。给你一个链表的头节点。
2024-09-03 17:27:26
571
原创 9/2 pandas数据结构介绍
1.对于Series :当对象相加时,如果存在不同的索引对,则结果的索引是所有索引的并集,对于不重叠的标签,会导致缺失值 obj1 + obj2。注:在重构时,标签只含新的指定序列中的标签,新的和原来的匹配则保留,不匹配则删除原来的,添加新的。2.对于DataFrame:会将行和列的索引同时进行匹配,得到的行列索引是所有索引的并集,不重叠的标签,会导致缺失值。data.drop(["a”,“b"],axis="index或columns")担当索引不为整数索引时,可用data[-1]来提取最后一个数据。
2024-09-02 18:00:58
1334
原创 9/1 pandas入门
1.Series类似于一维数组,由一组数据和与之对应的标签(索引)组成obj = pd.Series(数据,index=) index可指定可省略2.可以通过索引获取单个或多个值3.可进行numpy计算4.可看作是长度固定的字典可将字典转化为Series:s1 = pd.Series(dict)可将Series还原为字典:s1.to_dict()将字典转化为Series时,可指定索引:s1 = pd.Series(dict,index) 若原字典中有对应索引则将对应值匹配,若无则匹配NAN。
2024-09-01 20:14:01
240
原创 9/1 力扣67题,2题
思路:将接收到的字符串变换为int形式,将两数相加,又将其变换为字符型二进制形式放入列表中,若两数相加和为0则直接返回0.2.十进制转化为二进制,取每次余数,将其变成字符形式储存在列表中,直至商为0。= None else l1 遍历处。=None else 0 取值处。每次的sum就是新生成的元素。
2024-09-01 18:44:37
1185
原创 9\1 numpy基础(二)
数组中的元素可能会有重复,使用numpy.unique(arr)对数组进行唯一化并返回排序结果。sample = np.random.standard_normal(size)生成样本数组。np.dot(a, b)或a @ b或a.dot(b):计算两数组内积,即矩阵乘法。样本数组生成:arr = rng.standard_normal(size)生成。arr.mean() arr.sum()等函数,可以计算整个也可以以轴计算。numpy.where(布尔数组,arr或标量,arr或标量)
2024-09-01 16:36:33
355
原创 8/31 numpy基础(一)
两数组之间的比较会形成一个布尔型数组,这个数组的每个元素是比较的两数组之间各元素的比较结果。4.np.arange(15)相当于创建了一个0-14的数组。两数组之间或数组与标量之间的运算会作用于数组之中的所有元素。1.使用data.dtype获取数组数据类型。2.使用astype将数组数据类型进行转换。注:对列表切片进行整体赋值会报错。浮点数转整数小数部分会被截断;数字型字符串能被转化为数值形式。整数转化为浮点会加上小数点;可对ndarray进行切片。2.数组的维度与数据类型。可对切片整体进行赋值。
2024-08-31 17:57:05
278
1
原创 8/31 python的相关操作
字典型 {index : value for index, value in enumerate(collection) if condition }列表型 [expr for value in collection if condition]集合型:{expr for value in collection if condition}核心是简化生成,在一个序列中符合条件的元素被选出,加入到新生成的序列中。string的title方法将每个单词的首字母大写。1.内置序列函数 p62。
2024-08-31 17:09:30
255
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅