![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深度学习
文章平均质量分 67
深度学习
深度瞎学
这个作者很懒,什么都没留下…
展开
-
AI模型边缘端部署全流程二(工具篇)
搞AI模型的大部分都是从pycharm或者其他python的IDE入坑的,因此在跑程序的时候用断点调试非常的得心应手。而且断点调试利于追踪数据流也非常的适合用以问题分析。然而在边缘端部署的时候就很难再像使用pycharm一样进行远程的断点调试了。归根结底是因为边缘端不能进行代码编译只能跑应用程序。因此这就引申到了如何在远程端(我常用的是Windows)进行边缘端部署的应用程序的断点调试。原创 2023-11-02 10:08:00 · 691 阅读 · 0 评论 -
关于faster-rcnn中anchor box与bbox
问题提出情况在学习理解faster-rcnn网络时,都有出现anchor box这一个概念,然而anchor box的大小却是一个确定的值。那么假如你标注的目标框比anchor box小很多的情况下那不是预测得到的检测框不是划出了过多的无效值了吗?为了解决这个问题在这就需要先了解锚框这个概念一.锚框(anchor box)/先验框(prior bounding box)在众多经典的目标检测模型中,均有先验框的说法,有的paper(如Faster RCNN)中称之为anchor(锚点),有的pape原创 2021-03-04 15:59:46 · 3454 阅读 · 1 评论 -
对于使用pandas的loc以及reset_index进行索引重置
1.pandas.DataFrame.loc按标签或布尔数组访问一组行和列。.loc[ ] 主要是基于标签的,但也可用于布尔数组。允许输入包括:单个标签,例如 或 (请注意,该注释被解释为索引的标签,并且永远不会作为沿索引的整数位置)。5’a’5标签的列表或数组,例如 。[‘a’, ‘b’, ‘c’]具有标签的切片对象,例如 。‘a’:‘f’与被切片的轴长度相同的布尔数组,例如 。[True, False, True]可对齐的布尔系列。键的索引将在遮罩之前对齐。可对原创 2021-01-07 15:07:15 · 1788 阅读 · 0 评论 -
关于迁移学习
什么是/为什么要迁移学习?迁移学习(Transfer learning) 顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习(starting from scratch,tabula rasa)。1.训练集很小的情况下在进行tigga和misty以及neither的三分类问题时(自己拥有的数据原创 2020-12-07 16:38:46 · 359 阅读 · 0 评论 -
模型容量
简介通过调节机器学习模型的容量,可以控制模型是否偏于过拟合还是欠拟合。模型容量容量从本质上说是描述了整个模型的拟合能力的大小。如果容量不足,模型将不能够很好地表示数据,表现为欠拟合;如果容量太大,那么模型就很容易过分拟合数据,因为其记住了不适合与测试集的训练集特性,表现为过拟合。因此控制好模型的容量是一个关键问题。控制方法容量的控制可以通过多种方法控制,包括:控制模型的假设空间。添加正则项对模型进行偏好排除。相关结论当机器学习算法的容量适合于所执行任务的复杂度和所提供训练数原创 2020-11-23 09:59:04 · 1458 阅读 · 0 评论 -
Pytorch对于使用多GPU的注意事项
1.关于模型的打印或保存问题首先对于多GPU的使用分两种方案一种是简单的DP方案一种是复杂的DDP方案,在此处我们使用的是DP方案: if t.cuda.device_count() > 1: model = nn.DataParallel(model,device_ids=[0, 1]) if opt.use_gpu: model.cuda()由于两张卡所以我直接定义的 device_ids=[0, 1],若不定义此项dataparallel会自动分配所有GPU原创 2020-11-20 13:37:55 · 344 阅读 · 0 评论 -
神经网络改进方案:全局平均池化替代全连接层
基本原理全局平均池化英文名为:global average pooling简称为GAP其具体实现过程在原文 << Network In Network >> 中为:可以看出其是将矩阵中的 [w,h] ,进行平均池化变为一个单元。也即进行Flattrn和FC。其详细原理的图形示例可参考下图:其实也就是通过池化层将原有的输入为 [b,c,h,w] 减少成 [b,c,1,1] 的尺寸也即上文提到的将 [w,h] 进行平均池化变为一个单元。与FC层区别在常见的卷积神经网络中原创 2020-11-18 16:15:37 · 12852 阅读 · 10 评论 -
pytorch 使用dataparallel时不支持 nccl
问题出现在我将torch1.5.1升级到1.7.0时,使用分布式计算出现了不支持nccl,从而无法进行单机多卡计算。所以这提醒我们环境能用的情况下千万千万不要去更新(未更新之前我是可以使用分布式计算的。。。)。扯远了,回归正题。当出现这个问题的时候我先将cuda10.1与对应的cudnn重新安装。然后重新跑程序发现还是不能进行分布式。然后我将torch1.7.0退回1.5.1再跑,发现还是不能进行分布式,而且还出现了新问题:RuntimeError: CUDA out of memory. T原创 2020-11-14 20:48:27 · 2881 阅读 · 3 评论 -
RuntimeError: CUDA out of memory. Tried to allocate 2.18 GiB (GPU 0; 15.92 GiB total capacity; 13.71
如题这是经常遇见的显存不够问题,一般分为train阶段与valid阶段,我曾经在valid阶段时因为没有进行手动的梯度清零而导致显存不够,加上with t.no_grad:问题迎刃而解。 with t.no_grad(): for ii, data in enumerate(dataloader): input, label = data val_input1 = Variable(input, volatile=True)原创 2020-11-14 20:37:37 · 2303 阅读 · 2 评论 -
深度学习基础理论篇之机器学习基础
1.任务T通常机器学习任务定义为机器学习系统应该如何处理样本。样本是指我们从某些希望机器学习系统处理的对象或事件中收集到的已经量化的特征的集合。我们通常会将样本表示为一个向量x∈Rnx\isin\Reals^nx∈Rn,其中向量的每一个元素xix^ixi是一个特征。例如,一张图片的特征通常是指这张图片的像素值。2.交叉验证2.1 LOOCV首先,我们先介绍LOOCV方法,即(Leave-one-out cross-validation)。像Test set approach一样,LOOCV方法也包含原创 2020-08-02 15:40:22 · 262 阅读 · 0 评论 -
训练神经网络时,训练集loss下降,但是验证集loss一直不下降
可以判定问题的原因来自两方面,一方面是模型过拟合,另一方面是训练集和测试机的数据域不同。一、问题定位:至于问题的定位排查,建议按照先易后难的角度,也就是先排查训练集和测试集是否存在数据域的不同,再排查模型是否过拟合。1.关于数据域的排查具体来讲就是查验训练集和测试集的数据分布不一致,具体来说有如下几点(1)数据源分布不一样:例如在图像处理中,训练集的图像采集使用的是摄像头A拍摄的,而测试集是摄像头B拍摄的,但是摄像头A和B的拍摄效果差别较大(例如:图像成图的清晰度、对比度等);在语音识别中,训练集原创 2020-07-22 14:39:44 · 17927 阅读 · 0 评论 -
解决pytorch的RuntimeError: CUDA out of memory.以及loss出现超级大的原因
当我在完成第一个epoch的训练转入第一个epoch的验证的时候,跑了没多久pytorch就报错内存不足。然后上网查了一些解决方案,其中有使用pytorch的多GPU并行的方案来解决: if t.cuda.device_count() > 1: model = nn.DataParallel(model) if opt.use_gpu: model.cuda()然而其带来的结果也就是多跑了几组batchsize的验证。就继续报错。接着又尝试了pytorch fo原创 2020-07-17 19:16:21 · 5880 阅读 · 3 评论 -
pytorch的nn.module中input的四个维度含义以及实现各种操作
在使用pytorch的nn.module 的时候从使用说明上可以知道其标准输入为 [B, C, H, W], 其具体含义是:B - batchsize,例如你在使用dataloder的时候设置的batchsize是64那么此项则为64C - channel,也就是输入的矩阵的通道数,若你输入的是RGB图片,那么此项为3H - high,也就是你输入矩阵的高。W - width,也就是你输入矩阵的宽针对四个维度来达到你要实现的目标由于数据在经过net后输出并不一定满足满足期望输出的原创 2020-07-15 20:03:20 · 8432 阅读 · 0 评论 -
关于pytorch中关于nn.module的type问题。
RuntimeError: Input type (torch.cuda.DoubleTensor) and weight type (torch.cuda.FloatTensor) should be the same.如题所示的错误为input的type时double的而weight的type时float的(weight的type在pytorch中默认为float),因此遇到这种问题一般有两种解决方案1.将input的type由double更换为float示例:input = Variable(原创 2020-07-14 20:40:26 · 1352 阅读 · 0 评论 -
记录在使用sklearn中趟过的雷
使用sklearn是为了读取自制数据集中使用一些预处理操作,虽然pytorch的包中含有一些预处理操作,但并不全因此使用到了sklearn。此处记录一下在使用sklearn使用中趟的雷。1.MaxAbsScaler()MaxAbsScaler是将数据归一化到[-1,1],然而在此处使用中需要注意的是Max操作不能针对二维以上的矩阵,若是需要对三维矩阵进行的话,需要将三维矩阵安排为二维矩阵,自己使用的方法为:echo_trans = echo.reshape(echo.shape[0],-1)echo原创 2020-07-07 19:51:46 · 159 阅读 · 0 评论 -
记录使用pytorch过程中踩过的坑之全连接层
在进行一篇文章的网络结构复现时,其网络结构有一部分是vgg结构。在使用tensorboard对整体网络结构进行可视化的时候发现vgg结构的FC层疯狂报错。先贴出源码: ''' 这是网络设置部份 ''' self.maxpool = nn.MaxPool2d(2, 2) # conv1 self.conv1_1 = nn.Conv2d(2, 64, 3, padding=1)原创 2020-06-22 23:05:35 · 4207 阅读 · 0 评论 -
关于验证集以及训练集的loss/accuracy的使用问题
在训练过程中需要用验证集上的某个指标来调整学习率等参数,这个指标一般用验证集上的准确率,此时不需要计算验证集上的损失函数。但当验证集不够大的时候,准确率的波动可能太过剧烈,此时也可以用验证集上的损失函数作为调整学习率等参数的指标。意思也就是说验证集的loss有调整超参数的作用综上所述:可以不计算验证集上的loss,验证集上的loss不会参与模型的训练;不过,和validation accuracy一样,可以通过观察validation loss的下降趋势来调整学习率和训练轮数等超参数.参考链接:知乎回原创 2020-06-12 16:41:46 · 8905 阅读 · 0 评论 -
从数学上证明神经网络可以无限逼近连续函数
对于标题其实完整的陈述是这样的:神经网络可以在一个紧致集(compact set)上逼近任意连续函数。划重点,首先是紧致集,这是集合论中的知识,你可以把它想象为在一个确切的闭区间 [a, b] 内,可以用神经网络接近任何函数。这个边界必须要明确,实际上你是不可能使用神经网络对输入 x 在 (−∞,+∞)(-\infin,+\infin)(−∞,+∞)区间上逼近 f(x)=x2f(x)=x^{2}f(x)=x2 。第二是逼近这个在数学上的定义:Universal approximation theore原创 2020-06-08 09:27:25 · 1881 阅读 · 0 评论 -
对于正则化的一些理解
正则化为什么更易获得稀疏解L2正则相当于用圆去逼近目标,而L1正则相当于用菱形去逼近目标,所以更容易引起交点在坐标轴上即得到稀疏解https://link.zhihu.com/?target=https%3A//vimsky.com/article/3852.htmlL1正则化引起稀疏解的多种解释https://zhuanlan.zhihu.com/p/50142573L1正则为什么更容易获得稀疏解(导数解释)https://blog.csdn.net/b876144622/article/de原创 2020-05-22 15:09:32 · 145 阅读 · 0 评论 -
sklearn对数据进行预处理
1.MaxAbsScaler将每个特征按其最大绝对值进行缩放。该估计器对每个特征进行缩放和单独转换,使训练集中每个特征的最大绝对值为1.0。它不转移/中心数据,因此不破坏任何稀疏性。这个标量也可以应用于稀疏的CSR或CSC矩阵。使用示例:>>> from sklearn.preprocessing import MaxAbsScaler>>> X = [[ 1., -1., 2.],... [ 2., 0., 0.],... [ 0.原创 2020-05-13 15:30:53 · 450 阅读 · 0 评论 -
pytorch使用gpu对网络计算进行加速
1.基本要求你的电脑里面有合适的GPU显卡(NVIDA),并且需要支持CUDA模块你必须安装GPU版的Torch,(详细安装方法请移步pytorch官网)2.使用GPU训练CNN利用pytorch使用GPU进行加速方法主要就是将数据的形式变成GPU能读的形式,然后将CNN也变成GPU能读的形式,具体办法就是在后面加上.cuda()。例如:'''注意在进行某种运算的时候使用.cuda(),以防内存不够'''test_data=test_data.test_labels[:2000].cu原创 2020-05-12 15:28:56 · 1154 阅读 · 0 评论 -
利用pytorch实现平均绝对值误差(MAE)
1.LOSS functionsL1LossCLASS torch.nn.L1Loss(size_average=None, reduce=None, reduction=‘mean’)创建一个标准来度量输入x和目标y中的每个元素之间的平均绝对误差(MAE)。l(x,y)=L={l1,...,lN}T,ln=∣xn−yn∣l(x,y)=L=\{l_1,...,l_N\}^T,l_n=|x_n-y_n|l(x,y)=L={l1,...,lN}T,ln=∣xn−yn∣其中N为batch原创 2020-05-10 15:18:17 · 13735 阅读 · 0 评论 -
关于训练、验证、测试集(pytorch)
https://zhuanlan.zhihu.com/p/29024978转载 2020-04-25 19:04:00 · 2699 阅读 · 0 评论 -
pytorch中的矩阵维度分辨
x = torch.randn([1, 3, 4, 4])Out:tensor([[[[-0.2728, -0.3203, -0.3554, 0.1830], [ 0.3597, -0.9062, 0.0591, 0.9316], [-2.3520, -0.9139, 0.2391, -1.1957], [ 1.0322, -...原创 2020-04-23 21:26:41 · 954 阅读 · 0 评论 -
nn.Sequential用法
一个连续的容器。模块将按照在构造函数中传递的顺序添加到模块中。或者,也可以传递模块的有序字典。为了更容易理解,这是一个小示例:#使用Sequential的示例model = nn.Sequential( nn.Conv2d(1,20,5), nn.ReLU(), nn.Conv2d(20,64,5), nn.Re...原创 2020-04-20 19:52:46 · 3925 阅读 · 0 评论 -
对于pytorch中VGG模型的理解
官方对于VGG模型的Git_hub源码只摘取到vgg11bn部分。链接地址:https://github.com/pytorch/vision/blob/master/torchvision/models/vgg.pyimport torchimport torch.nn as nnfrom .utils import load_state_dict_from_url__all__...原创 2020-03-26 20:14:04 · 1669 阅读 · 0 评论 -
VGGNet参数变换
1. VGGNet的特点1、结构简洁VGG结构由5层卷积层、3层全连接层、softmax输出层构成,层与层之间使用max-pooling(最大池化)分开,所有隐层的激活单元都采用ReLU函数。2、小卷积核和多卷积子层VGG使用多个较小卷积核(3x3)的卷积层代替一个卷积核较大的卷积层,一方面可以减少参数,另一方面相当于进行了更多的非线性映射,可以增加网络的拟合/表达能力。小卷积核是VG...转载 2020-03-25 17:08:25 · 1469 阅读 · 0 评论 -
深入理解卷积层,全连接层的作用意义
理解1:卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。因为用到了所有的局部特征,所以叫全连接。理解2:从卷积网络谈起,卷积网络在形式上有一点点像咱们正在召开的“人民代表大会制度”。卷积核的个数相当于候选人,图像中不同的特征会激活不同的“候选人”(卷积核)。池化层(仅指最大池化)起着类似于“合票”的作用,不同特征在对不同的“候选人”有着各自的喜好。全连接相...转载 2020-03-25 16:46:43 · 1462 阅读 · 0 评论 -
深度神经网络中的感受野
在机器视觉领域的深度神经网络中有一个概念叫做感受野,用来表示网络内部的不同位置的神经元对原图像的感受范围的大小。神经元之所以无法对原始图像的所有信息进行感知,是因为在这些网络结构中普遍使用卷积层和pooling层,在层与层之间均为局部相连(通过sliding filter)。神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着他可能蕴含更为全局、语义层次更高的特征;而值越小则表示其所包...原创 2020-03-20 15:17:23 · 320 阅读 · 0 评论 -
目标检测
原创 2020-03-19 20:20:03 · 77 阅读 · 0 评论 -
样本的均值和方差的无偏估计与测试阶段均值方差的关系
什么是无偏估计??估计是用样本统计量(可以理解为随机抽样)来估计总体参数时的一种无偏推断。无偏估计的要求就是:估计出来的参数的数学期望等于被估计参数的真实值。所以呢,可以看出:估计值也是一个变量,因为是随机的嘛。 真实值谁也不知道啊(因为你不可能把列出无限的实验结果来,除了可能通过数学计算得到的常见的分布)。给你一组服从一定分布的随机变量 X , 假设样本的真实的均值与方差可以表示为:...原创 2020-03-16 17:29:58 · 1933 阅读 · 0 评论 -
深度可分离卷积
卷积神经网络在图像处理中的地位已然毋庸置疑。卷积运算具备强大的特征提取能力、相比全连接又消耗更少的参数,应用在图像这样的二维结构数据中有着先天优势。然而受限于目前移动端设备硬件条件,显著降低神经网络的运算量依旧是网络结构优化的目标之一。本文所述的Separable Convolution就是降低卷积运算参数量的一种典型方法。常规卷积运算假设输入层为一个大小为64×64像素、三通道彩色图片。经过...转载 2020-03-16 15:23:18 · 569 阅读 · 0 评论 -
tf.get_variable函数
tf.get_variable函数函数:tf.get_variableget_variable( name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collections=None, caching_device=No...转载 2020-03-13 14:56:52 · 602 阅读 · 0 评论 -
卷积核输入和输出通道直观图
卷积神经网络的通道数与卷积核数的关系1.上图中总共有二个卷集核,分别是W0和W1,大小都是3x3x3,前面的3x3是卷积核大小,后面的3是输入的feature map的通道,如果在tensorflow的卷积函数中形式是3x3x3x2,前面和上面一样,最后2就是输出的feature map的通道数,也是卷积核的数量。2.以w0为例,蓝色框中三个通道各个位置的数值A=[[0,0,0,0,0,1,...转载 2020-03-13 13:58:19 · 1694 阅读 · 0 评论 -
Python基础--range()和np.arrange()的区别与联系
range(start, stop[, step])这是一个通用的函数来创建包含算术级数的列表。它最常用于for循环。参数必须是纯整数。如果省略step参数,则默认为1。如果省略start参数,则默认为0。完整的形式返回一个普通整数列表。如果步骤是肯定的,最后一个元素是小于停止的最大元素; 如果step是负数,最后一个元素是大于stop的最小元素。 步骤不能为零(否则报错)。示例:>...转载 2020-03-13 14:40:55 · 1098 阅读 · 0 评论