
11 Python/DL/ML
文章平均质量分 68
python 、机器学习、深度学习
/home/liupc
这个作者很懒,什么都没留下…
展开
-
python/ML/DL学习目录
/*------深度学习理论------------------------**/ 1. 深度学习介绍、全连接神经网络 为什么要做深读学习而不是宽度学习? 2. 反向传播算法 BP算法手工推导 3.使用Keras实现全连接神经网络完成手写数字识别 4. mini-batch ...原创 2018-07-14 20:02:29 · 5550 阅读 · 1 评论 -
图像检索评价指标:PR曲线的计算与绘制
# @file name : test2.py# @brief : 如何绘制PR曲线# @author : liupc# @date : 2021/8/2import numpy as npfrom tqdm import tqdmimport matplotlib.pyplot as plt#计算汉明距离。有几位不同,距离就为几。def CalcHammingDist(B1, B2): q = B2.shape[1] distH = .原创 2022-03-21 22:29:48 · 3903 阅读 · 1 评论 -
使用的数据集
一、数据集:pubu_db这个数据集是五一的时候,采集的不同信噪比下的数据集。有四种信号,每种信号有5个不同的信噪比。2021.9.14日,使用alexnet跑的结果,准确率为100%,所以没啥太大意义感觉。二、数据集pubu_UAV数据集这个数据集是五一的时候,采集的10种无人机的数据集。...原创 2021-09-14 11:18:44 · 1463 阅读 · 4 评论 -
优化问题与凸优化问题
点击此处返回总目录 一、优化问题 什么是优化问题...原创 2019-11-04 09:33:36 · 524 阅读 · 0 评论 -
分组卷积的实现
一、分组卷积的概念(回顾)前面讲了。这里简单回顾一下:分组卷积就是将特征图平均分为N组,然后每组内部进行正常卷积,然后N组得到的特征图按照通道维度进行拼接,得到输出。如图所示,左边是正常的卷积,输入通道为12,输出通道为6,卷积核大小为3*3。右边就是分组卷积。分成了三组,然后分别做卷积。每一组输入通道有4,输出通道为2。经过分组卷积之后,得到的也是6个通道输出。二、分组卷积的优缺点分组卷积的优点:1. 分组卷积的参数量是正常卷积的1/N 。N为分组数,这里为3。2.原创 2021-08-31 11:20:51 · 3016 阅读 · 0 评论 -
6. torchvision中的ResNeXt实现
在torchvision中,并没有单独实现ResNeXt,而是在实现ResNet的实现中顺便实现的。代码如下,我把与ResNeXt有关的拿出来了:import torchimport torch.nn as nndef conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1): """3x3 convolution with padding""" return nn.Conv2d(in_planes, ou原创 2021-08-30 15:28:35 · 601 阅读 · 0 评论 -
实验2:Inception-resnet-v2模型的实现
本来做的实验是:inception-resnet-v2模型实现,并且用它来进行推理,但是推理的部分实在是没必要做笔记。就是《inference汇总》稍微改了一点点而已。这里就只把inception-resnet-v2模型的实现列出来了。完整的inference的代码见:D:\pythonCodes\深度学习实验\4.1_经典分类网络\7:GoogLeNet v4\inference_inception_resnet_v2在torchvision中,是没有inception-v4的实现的。这里找的是:ht原创 2021-08-22 14:22:41 · 3464 阅读 · 8 评论 -
实验1:inception - v4模型的实现
本来做的实验是:inception-v4模型实现,并且用它来进行推理,但是推理的部分实在是没必要做笔记。就是《inference汇总》稍微改了一点点而已。这里就只把inception-v4模型的实现列出来了。完整的inference的代码见:D:\pythonCodes\深度学习实验\4.1_经典分类网络\7:GoogLeNet v4\inference_inceptionV4在torchvision中,是没有inception-v4的实现的。这里找的是:https://github.com/Cad原创 2021-08-22 14:08:39 · 1006 阅读 · 0 评论 -
论文精读:Inception-ResNet的网络结构
讲了Inception v4之后,就很容易理解Inception-ResNet了。Inception-ResNet有两个版本:v1和v2。一、整体架构左图是Inception v4的网络结构,右图是Inception-ResNet v1和v2的结构。可以看到,Inception-ResNet v1和v2也是由6大模块组成的:Stem;Inception-resnet-A、B、C;Reduction-A、B。不同的应该是每一块的设计。二、详细结构对比2.1 stem左边原创 2021-08-21 17:35:23 · 1564 阅读 · 0 评论 -
Inception v4的网络结构
一、Inception v4整体架构Inception v4的整体框架如图9所示:分为6大模块:Stem;Inception-A、B、C;Reduction-A、B。每个模块针对性的设计。这也是缺点吧,适用性很差。换一个数据集谁知道行不行,谁知道改哪里啊。所以现在很少能看到inception v4和inception resnet,几乎没人用。二、详细介绍2.1 StemStem(主干),最大的作用就是快速降低特征图的分辨率,使得后面的inception减小计算量。共有9层。也.原创 2021-08-21 13:13:21 · 1523 阅读 · 0 评论 -
补充:标签平滑的实现
一、torch.gather()函数与交叉熵损失的计算1.1 torch.gather()函数这个函数较难懂。这里讲一下,因为后面可能用到。结果的形状与index的形状一样。比如上例中,index是一个2*2的张量,那么最后的结果就是2*2的张量。首先令out[i][j] = input[i][j],然后因为dim是1,所以要把j换掉,换成index[i][j]。这样就得到最后的结果了。out[0][0] = input[0][0], 把0换成index[0][0] = 0。所以..原创 2021-08-19 09:52:05 · 485 阅读 · 0 评论 -
torchvision中inception v3的实现
一、torchvision中inception v3的网络结构()原创 2021-08-17 15:14:25 · 1718 阅读 · 1 评论 -
GoogLeNet的实现
一、Inception模块的写法每一个inception的结构都一样,不同就是输入输出的通道数不一样。所以可以写成一个Module,这样就可以复用。以inception(3a)为例:代码:# @file name : test.py# @brief : Inception模块的写法# @author : liupc# @date : 2021/8/10import torchimport torch.nn as nndef Bas.原创 2021-08-10 20:29:39 · 351 阅读 · 0 评论 -
3. 论文精读1:Inception模块、GoogLeNet网络结构
一、GoogLeNet结构1.1 Inception 结构如图,右边是Inception的结构。左边是简单版本。简单版本存在一些问题,然后改进得到后面的版本。通过命名"Inception module with dimension reducetions"就知道,是通过降维的方法来改进的。怎么做改进的呢?我们通过找茬来看看:可以看到,改进就是加了3个1*1的卷积。1*1的卷积就是用来做降维的。(1)(2)(3) Inception Module的特点1..原创 2021-08-09 15:56:35 · 703 阅读 · 0 评论 -
图像检索评价指标:mAP@k、mAP的计算
一、mAP(mean Average Precision,平均检索精度)【原理】很多地方喜欢用这张图来解释,确实画的很好。这张图是求mAP@10的结果。mAP@k,就是查询的时候返回k张图片,然后计算mAP。mAP呢,就是对所有的结果都进行排序。k就等于gallery数据集的大小了。【举例】假设有3张图片,这三张图片的哈希码为:query1=[1,-1,1,1], query2=[-1,1,-1,-1],query3=[1,-1,-1,-1]。数据库中有7张图片,对应的哈原创 2021-08-05 16:42:53 · 11895 阅读 · 13 评论 -
总结:各种卷积操作:global avg pooling、水平pooling、1*1卷积
一、global avg pooling卷积核的大小为H*W,所以得到一个C*1*1的向量。二、水平pooling即卷积核的大小是1*W,生成的是H个C*1的向量。原创 2021-07-22 19:09:00 · 1176 阅读 · 0 评论 -
tensor.view()、torch.flatten()
一、torch.view()二、torch.flatten()原创 2021-07-20 11:47:01 · 3448 阅读 · 0 评论 -
torch.max()、torch.topk()
在用卷积神经网络对结果进行预测时,输出的是一个Batchsize*n的向量。比如batchsize=64,在ImageNet是1000分类的任务。则输出的是一个64*1000的tensor。这时候,我们想要看看这每张图片的1000个预测值中哪个值最大,最大值对应的下标是多少。这时候就需要用到torch.max()函数了。一、torch.max()、torch.min()格式: torch.max(input, dim)函数会返回两个tensor,第一个tensor是每...原创 2021-07-20 10:55:08 · 2020 阅读 · 1 评论 -
总结:multicrop的使用
一、FiveCrop()和TenCrop()的使用场景目前我见到的场景,往往是在测试的时候,将一张图片裁剪成10张,然后分别对10张进行预测,再取平均值得到最后的预测结果。比如《5. 实验2:对预训练的AlexNet进行finetune,实现对猫狗数据集二分类》以及VGG的finetune代码中。VGG的论文中也使用了multi-crop的技巧,不过它更夸张,一张图片裁剪成了150张。见《4. 论文精读2:训练技巧、测试技巧、实验结果、总结》二、FiveCrop()和TenCrop()的使用原创 2021-07-17 15:50:49 · 2616 阅读 · 1 评论 -
5. torchvision中VGG的实现详解
一、torchvision中的VGG的观察下面是torchvision中VGG16的实现,我提出来了,并且把加载参数的代码注释掉了:# @file name : VGG.py# @brief : # @author : liupc# @date : 2021/7/15import torchimport torch.nn as nnclass VGG(nn.Module): def __init__(self, features, num原创 2021-07-15 20:28:24 · 2048 阅读 · 2 评论 -
总结:对经典网络上进行模型改造的方法
在实际使用过程中,我们经常对经典网络(比如Resnet、AlexNet等)进行改造,在经典网络的基础上设计我们自己的网络。情况一:借助model.children()方法前面讲了可以通过model.children()方法的获取网络的某些层。因此,可以通过以上方法,再加自己的层,得到我们的网络。比如:IDE网络中,我们就是这么做的。如下:import torchvision.models as modelsfrom torch import nnfrom torch.nn ...原创 2021-07-13 11:41:27 · 874 阅读 · 0 评论 -
总结:如何获取模型的某一层
就是使用"."和[i]这两种方式获取,可以先把网络打印出来,然后再写。一般就是看到数字就用[i],看到名字,就用"."来获取。比如:alexnet模型import torchvision.models as modelsmodel = models.alexnet(pretrained=False)print(model)结果为:D:\Anaconda3\envs\pytorch_env\python.exe D:/pythonCodes/深度学习实验/经典分类网络/fine原创 2021-07-13 10:32:21 · 1275 阅读 · 0 评论 -
torchvision中的resnet的实现
一、ResNet网络模型详解1.1 整体结构可以看到,resnet34主要就是由layer1-4组成。而这4个layer分别就是由3、4、6、3个BasicBlock堆叠而成。BasicBlock有两种:右边虚线的BasicBlock主要用在layer2-4的第一块。作用就是要保证主分支和shortcut的输出特征shape相同。1.2详细介绍前面:输入图片尺寸:224*224*3conv1: 输入通道是3,输出通道是...原创 2021-05-24 23:39:38 · 3689 阅读 · 9 评论 -
SE-ResNet的实现
与前面的inference代码没什么不同。比如alexnet的inference代码:https://blog.youkuaiyun.com/pengchengliu/article/details/108909195一、准备工作|----data |----seresnet50-60a8950a85b2b.pkl #预训练模型权重,从网上下载下来的。|----imagenet1000.json #编号与标签...原创 2021-05-22 21:53:50 · 14187 阅读 · 9 评论 -
补充:动态时间规整(DTW)算法
整理自:https://zhuanlan.zhihu.com/p/43247215DTW(dynamic time warping) 最初用于识别语音的相似性。我们用数字表示音调高低,例如某个单词发音的音调为1-3-2-4。现在有两个人说这个单词,一个人在前半部分拖长,其发音为1-1-3-3-2-4;另一个人在后半部分拖长,其发音为1-3-2-2-4-4。现在要计算1-1-3-3-2-4和1-3-2-2-4-4两个序列的距离(距离越小,相似度越高)。因为两个序列代表同一个单词,我们希望算出.原创 2021-03-26 21:01:34 · 236 阅读 · 0 评论 -
整理:TripletMarginLoss、nn.MarginRankingLoss
在pytorch中,提供了两个损失函数,都与triplet loss相关。但是使用的方式不一样。一、TripletMarginLoss这个就是最正宗的Triplet Loss的实现。它的输入是anchor, positive, negative三个B*C的张量,输出triplet loss的值。定义为:criterion = torch.nn.TripletMarginLoss(margin=1.0, p=2.0, eps=1e-06, swap=False, size_averag.原创 2021-03-24 17:00:43 · 8418 阅读 · 4 评论 -
补充:使用矩阵运算计算两组特征向量相互之间的距离
一、题目假设集合A有m个向量,集合B有n个向量。所有向量的维度都是d维。如何求这m个向量与这n个向量的距离(共m*n个)?二、分析一般,我们会想到使用两重循环的方式来求。for i in range(m): for j in range(n): dist[i][j] = ...但是比较耗时。三、方法我们可以使用矩阵运算来解决。表示成矩阵形式为:P(m*d矩阵)、C(n*d矩阵)。结果dist应该是m*n的矩阵。首先,看...原创 2021-03-23 15:06:49 · 1208 阅读 · 0 评论 -
实验2:FusionNet的实现
一、网络结构二、一步一步实现FusionNet(1)输入图像为640*640,3通道。经过一个卷积层,代码为: self.conv11 = nn.Sequential( nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1), #输入通道为3,输出通道为64。padding=1,输出尺寸不变。还是640*640. nn.BatchNorm2d(64), .原创 2021-03-18 21:47:58 · 1071 阅读 · 1 评论 -
总结:nn.Module的children()与modules()方法、如何获取网络的某些层
一、nn.Module的children()方法与modules()方法的区别children()与modules()都是返回网络模型里的组成元素,但是children()返回的是最外层的元素,modules()返回的是所有的元素,包括不同级别的子元素。首先定义以下全连接网络:import torchfrom torch import nnclass SimpleNet(nn.Module): def __init__(self, in_dim, n_h...原创 2021-02-20 12:12:06 · 6151 阅读 · 7 评论 -
常用内置模块(11):正则表达式、re模块
一、正则表达式 二、re库 2.1 常用函数 #查找 re.findall() #搜索所有匹配结果。返回列表。 re.search() #搜索匹配的第一个结果。返回的是match对象。 re.match() # re.finditer() # ...原创 2021-02-08 09:41:05 · 307 阅读 · 0 评论 -
常用内置模块(12):shutil库
shutil可以用来移动,拷贝文件。1. move() #与linux的move命令用法相同例1:import shutilsrc = "./a/hello.png"dst = "./b" #如果存在b目录,则把hello.png移动到b目录下。如果不存在b目录,则将hello.png移动到当前目录下,重命名为bshutil.move(src, dst)例2:import shutilsrc = "./a/hello.png"dst = "./...原创 2021-01-22 18:10:58 · 223 阅读 · 0 评论 -
补充:将numpy保存成txt文件
1. 保存成txt 将列表保存成txt文件: 结果: 2. 从txt中读取数据,变成数组 对于上面的数据: 结果: ...原创 2021-01-21 14:31:47 · 4228 阅读 · 0 评论 -
补充:混淆矩阵、图像分割指标计算
一、混淆矩阵的求法二、图像分割常用指标一、混淆矩阵1.1 混淆矩阵介绍之前介绍过二分类混淆矩阵:《混淆矩阵、错误率、正确率、精确度、召回率、F1值、PR曲线、ROC曲线、AUC》现在说一下多分类混淆矩阵。其实是一样的,就是长下面这样。有了混淆矩阵之后,就可以求各种率了。比如正确率、错误率、召回率等等。1.2 混淆矩阵计算知道了标签与预测之后,就可以得到混淆矩阵了。比如,下面的数据。共有10个数据,类别有6类。第一行是标签。第二行是预测的结果。可以统计得..原创 2021-01-12 21:44:40 · 4724 阅读 · 0 评论 -
整理:熵、KL散度、交叉熵、nn.CrossEntropyLoss()、nn.LogSoftmax()、nn.NLLLoss()
一、信息量、熵、相对熵(KL散度)、交叉熵二、Softmax 与 交叉熵三、pytorch中的交叉熵损失 nn.CrossEntropyLoss() 四、pytorch中的LogSoftmax()与nn.NLLLoss()一、信息量、熵、相对熵(KL散度)、交叉熵二、Softmax 与 交叉熵三、pytorch中的交叉熵损失 nn.CrossEntropyLoss() 四、pytorch中的LogSoftmax...原创 2021-01-12 15:29:13 · 1005 阅读 · 0 评论 -
补充:双线性差值
opencv使用函数cv2.resize()进行图像缩放的时候,默认使用使用的插值方式是双线性差值(cv2.INTER_LINEAR)。我们知道,FCN是在用双线性差值的方式来初始化反卷积的卷积核。所以在这里补充一下。但是其他论文很少用这种方式,所以参考意义不是很大,自己的话用不用都行。把代码放在这里,能跑通就行。提供了两个双线性差值的用法:(1)使用双线性差值法resize一张图片。也就是opencv里的图像放缩的实现。(2)实现初始化反卷积的卷积核。也就是FCN中的使用。使用一:..原创 2021-01-08 17:12:07 · 598 阅读 · 2 评论 -
补充:numpy的数据类型
numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。下表列举了常用 NumPy 基本类型。 数据类型转换: a.astype('uint8') ...原创 2021-01-08 11:06:19 · 148 阅读 · 0 评论 -
常用内置模块(10):glob库
一、简介 glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,就类似于Windows下的文件搜索。 二、使用 * #匹配0个或多个字符 ? #匹配1个字符 [] #匹配指定范围内的字符,如[0-9]匹配数字、[a-z]匹配字母。注意匹配的是一个字符。 比如:对于以下结构,编写test.py ...原创 2020-12-01 22:03:26 · 384 阅读 · 0 评论 -
常用第三方模块(5):tqdm
一、简介 显示循环的进度条的库。taqadum, تقدّم)在阿拉伯语中的意思是进展。tqdm可以在长循环中添加一个进度提示信息,用户只需要 封装任意的迭代器 tqdm(iterator),是一个快速、扩展性强的进度条工具库。 二、使用 结果: ...原创 2020-12-01 20:25:43 · 385 阅读 · 0 评论 -
常用内置模块(9):json库
常用来存储字典类型、列表类型等。 一、写入 with open("score.json", "w", encoding="utf-8") as f: json.dump(data, f, indent=4) indent #控制分行和缩进的。应该是一个非负的整型,如果是0就是顶格分行显示,如果为空就是一行最紧凑显示,否则会换行且按照indent的数值显示前面的空白分行显示,这样打印出来的jso...原创 2020-11-30 16:12:27 · 241 阅读 · 0 评论 -
3.2 张量的创建
一:直接创建 二:依据数值创建 三:依据概率创建 一、直接创建 pytorch提供了丰富的张量创建的方法。这里总结为3大类。我们先看一下直接创建方法。 1 torch.tensor() 2 torch.from_numpy(ndarray) 详细介绍如下: 1. torch.tensor(data, dtype = None, device=None, ...原创 2020-11-30 13:53:23 · 460 阅读 · 0 评论