深度学习
文章平均质量分 80
xiaoxifei
这个作者很懒,什么都没留下…
展开
-
Pytorch 如何 优化/调整 模型参数
Pytorch 如何自动优化/调整 模型超参文章目录Pytorch 如何自动优化/调整 模型超参背景优化模型参数贝叶斯优化深度学习框架下的参数优化平台安装使用参考参考背景对于优化模型性能表现而言,主要可归纳为两种方式:采用NAS的方式搜索,获得某个任务上最优的模型结构以及模型参数设置优化模型参数诚然,对于第一种方式来说,NAS对算力的消耗是巨大的,因而需要具备巨量计算资源才能够进行...原创 2020-04-30 10:55:23 · 9903 阅读 · 6 评论 -
Pytorch 模型训练如何提速(speed up pytorch model training)
前言导致pytorch的模型训练速度比较慢的原因最有可能的是三个:1. 数据导入环节,操作复杂2.模型本身很复杂,数据流在模型中传递时过于耗时 3.loss函数计算复杂。这其中第一个环节往往是最有可能的原因,第二,三个环节其实一回事;pytorch本身的框架针对这两个问题也做了大量的优化,如果不是专业技术过硬,建议在这两个环节上就不要过于纠结了,设计简单易用的模型才是正道。数据导入环...原创 2019-12-25 10:54:53 · 3336 阅读 · 0 评论 -
Pytorch 版本的lookahead 优化函数使用(附代码)
Lookahead 优化算法是Adam的作者继Adam之后的又一力作,论文可以参见https://arxiv.org/abs/1907.08610这篇博客先不讲述Lookahead具体原理,先介绍如何将Lookahead集成到现有的代码中。本人在三个项目中(涉及风格转换、物体识别)使用该优化器,最大的感受就是使用该优化器十分有利于模型收敛,原本不收敛或者收敛过慢的模型在使用lookahea...原创 2019-11-30 14:35:25 · 2957 阅读 · 1 评论 -
tensorflow 报错DLL load failed:找不到指定的模块
我在重新安装tensorflow 1.12 版本(GPU与CPU)时报如下错误。这个错误很简单,就是CUDA版本CUDNN版本同安装的tensorflow版本不匹配,由于我早已经安装CUDA10.0以及相应版本的CUDNN,所以会报这个错误。因为其他项目依赖CUDA10.0 因此我无法降低CUDA版本,所以解决这个问题很简单,重新安装tensorflow 1.14.0 版本即可。如...原创 2019-11-25 11:05:12 · 691 阅读 · 0 评论 -
Reduce failed to synchronize: device-side assert triggered .(一个在中文里很难找到解决方案的问题)
这里必须吐槽下中文环境的bug搜寻情况,直接输入上面的报错很难找到中文描述对应的解决方案。这是在使用pytorch 自带的BCELoss所报的错误,在GPU,多GPU与CPU运行loss时都会报这样的错误。我的pytorch环境是0.4.1 ,低于此版本的pytorch都会报这样的问题,1.0版本以上的没有测试过,不知道。这个bug的来源是BCELoss中输入的张量value的范围必须...原创 2019-04-16 10:41:33 · 17293 阅读 · 11 评论 -
SegNet学习笔记(附Pytorch 代码)
SegNet 的应用SegNet常用于图像的语义分割。什么是语义分割了?,我们知道图像分割大致可以划分为三类,一类是语义分割、一类是实例分割,一类是全景分割,另外还有一些可以归为超像素分割。打个比方,如果是有一群人的沙滩排球这样的一个场景,图像中有一群人,有蓝天,大海,沙滩,还有一些椰子树。语义分割就是将人从这张图中分出来,其他的全部认为是背景;实例分割,就是不仅仅要把人分出来,还要区别不同的人...原创 2019-03-21 11:26:51 · 12641 阅读 · 18 评论 -
卷积神经网络降低显存消耗方法(可分离卷积Separable Convolution,Pytorch代码示例)
卷积神经网络中的Separable Convolution卷积网络运算中非常消耗显存,除了从框架本身考虑节省显存外,也可以从计算方式来入手,这里分享一篇讲分离卷积计算的博客(https://yinguobing.com/separable-convolution/#fn2)常规的卷积运算假设输入为64643的这样一个彩色图片,经过一个包含有4个filter的卷积层,最终输出4个通道,设定每一...原创 2019-02-27 10:40:47 · 5341 阅读 · 6 评论 -
Pytorch optimizer.step() 和loss.backward()和scheduler.step()的关系与区别 (Pytorch 代码讲解)
因为有人问我optimizer的step为什么不能放在min-batch那个循环之外,还有optimizer.step和loss.backward的区别;那么我想把答案记录下来。首先需要明确optimzier优化器的作用, 形象地来说,优化器就是需要根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值的作用,这也是机器学习里面最一般的方法论。从优化器的作用出发,要使得优...原创 2019-02-20 15:24:53 · 68025 阅读 · 22 评论 -
WGAN-GP学习笔记(从理论到Pytorch实践)
WGAN相关学习,主要文献 improved of training of WGAN首先我们需要明白一般的GAN数学表达式如下:mathminGmaxDEx∼Pr[log(D(x))]+Ex~∼Pg[log(1−D(x~))]math\mathop{min}\limits_{G}\mathop{max}\limits_{D}\mathop{E}\limits_{x\sim{P_r}}[log...原创 2019-02-17 17:03:22 · 16579 阅读 · 8 评论 -
一种图像增广(Image Augmentation)方式 Sample pairing image augmentation
在深度学习领域中常常存在着图像数量不够,或者图像种类不丰富等情况,这一点在医学图像处理中尤其常见,根据我个人经验,使用良好的图像增广(Augmentation)往往能达到事半功倍,甚至是起到决定性的效果。另外,随着半监督、无监督等算法的新起,对图像增广,以及图像relabel的各种算法也开始出现,有必要在这里讨论下一些奇怪但有效的图像增广方法。Sample pairing 增广方法来自于奇...原创 2019-05-21 16:32:17 · 3263 阅读 · 0 评论 -
一种图像增广(Image Augmentation)方式 Mix Up 算法 附有代码解析
这是对facebook研究团队的一篇文章 Mixup: Beyond Empirical Risk Minimization 的解读这篇文章相对于之前提到的Sample pariring来说就不那么神奇了,因为毕竟文章作者在里面有一些相关理论的推导。文章开头通篇讲的是ERM也就是经验风险最小化原则是整个机器学习遵循的原则,作者正是基于此思想才提出了MixUp的方法。在一般的机器学习任务中,比如...原创 2019-05-21 23:31:45 · 9670 阅读 · 10 评论 -
破除人工智能中的数据孤岛------联邦学习
众所周知,现在人工智能的工作优化模式是基于数据的,也就是所谓的数据驱动;但是随着人工智能落地场景越来越丰富,社会对于数据隐私的关注也越来越重,尤其是在一些本就需要对隐私保护比较看重的领域(比如银行信贷),范例如下所示:欧盟在几个月前颁布了《一般数据保护条例》(简称为GDPR)。该条例是近三十年来数据保护立法的最大变动,旨在加强对欧盟境内居民的个人数据和隐私保护。法案强调,机器学习模型必须具有可...原创 2019-05-13 10:44:51 · 1913 阅读 · 0 评论 -
一种数据增广方案(Data Augmentation)MixMatch算法 另附代码分析
MixMatch 算法来源于 MixMatch: A Holistic Approach to Semi-Supervised Learning 这篇文章,客观来说这篇文章并不能严格的算作是数据增广,应该是一种半监督的训练方法,即使用少量数据训练模型使模型达到举一反三的目的。但是我认为这仍然可以归为数据增广的范畴,因为数据增广的目的就是防止模型训练过拟合,使之能在更大的数据集上也有好的表现,只不过...原创 2019-05-22 19:55:24 · 5884 阅读 · 14 评论 -
Pytorch 模型训练模式和eval模型下差别巨大(Pytorch train and eval)附解决方案
当pytorch模型写明是eval()时有时表现的结果相对于train(True)差别非常巨大,这种差别经过逐层查看,主要来源于使用了BN,在eval下,使用的BN是一个固定的running rate,而在train下这个running rate会根据输入发生改变。解决方案是冻住bndef freeze_bn(m): if isinstance(m, nn.BatchNorm2d...原创 2019-05-29 16:29:02 · 9390 阅读 · 11 评论 -
Tensorflow2.0.0alpha 版本 DLL load failed:找不到指定模块
这个问题是一个很简单的问题,但是中文环境里面尽是一堆破建议,都没有搞清楚原因的由来就开始哔哔;造成这个错误的原因是tensorflow2.0 基于cuda10 开发,需要将自己的cuda设置为10,cudnn也需要相应版本,问题原因描述如下https://stackoverflow.com/questions/56419549/tensorflow-2-0-importerror...原创 2019-06-21 11:16:31 · 1518 阅读 · 0 评论 -
神经网络的可解释性 从经验主义到数学建模
这是我的一篇转载文章,原文地址:https://zhuanlan.zhihu.com/p/71287186本来想把题目取为“从炼丹到化学”,但是这样的题目太言过其实,远不是近期可以做到的,学术研究需要严谨。但是,寻找适当的数学工具去建模深度神经网络表达能力和训练能力,将基于经验主义的调参式深度学习,逐渐过渡为基于一些评测指标定量指导的深度学习, 是新一代人工智能需要面对的课题,也是在当前深度学...转载 2019-07-04 09:01:05 · 651 阅读 · 1 评论 -
Tensorflow 多个损失函数合成与多个损失函数多次操作的区别(Tensorflow: Multiple loss functions vs Multiple training ops)
代码样例第一种情况final_loss = tf.reduce_mean(loss1+loss2)train_op = tf.train.AdamOptimizer().minimize(final_loss)第二种情况train_op1 = tf.train.AdamOptimizer().minimize(loss1)train_op2 = tf.train.AdamOptimi...原创 2019-09-18 14:57:58 · 5563 阅读 · 0 评论 -
WGAN学习笔记(从理论分析到Pytorch代码实践)
原始的GAN存在的问题原始的GAN的目标函数实际上可以表现为−Ex∼Pr[logD(x)]−Ex∼Pg[log(1−D(x))]-E_{x\sim{P_r}}[logD(x)] - E_{x\sim{P_g}[log(1-D(x))]}−Ex∼Pr[logD(x)]−Ex∼Pg[log(1−D(x))]这里PrP_rPr是真实的样本分布,PgP_gPg是生成器产生的样本分布。...原创 2019-02-15 16:21:31 · 5514 阅读 · 8 评论 -
直观理解WGAN为什么好训练
转载自https://zhuanlan.zhihu.com/p/53260242最关键的地方其实是D(X),即对整个H*W*C这个高维空间的评分系统,好不好训,最关键的地方其实是D(X)的打分是否是从G(X)(生成分布)的支撑集的低分逐渐升高到R(X)(真实分布)的支撑集处的高分,从而使得G(X)这个生成分布可以顺着D(X)的梯度不断靠近真实分布R(X)。以往的损失函数在固定G后train...转载 2019-01-23 15:40:18 · 2324 阅读 · 0 评论 -
关于PatchGAN的理解
GAN一般情况下的网络结构,在一些人的实验中已经表明对于要求高分辨率、高细节保持的图像领域中并不适合,有些人根据这一情况设计了PatchGAN的思路。这种GAN的差别主要是在于Discriminator上,一般的GAN是只需要输出一个true or fasle 的矢量,这是代表对整张图像的评价;但是PatchGAN输出的是一个N x N的矩阵,这个N x N的矩阵的每一个元素,比如a(i,j) 只...原创 2019-01-16 14:30:02 · 38301 阅读 · 16 评论 -
生成对抗网络用于图像降噪 Image Denoising with GAN
使用tensorflow 搭建生成对抗网络用于进行图像降噪基于神经网络的解决方案,这种方法的主要思想是使用少量的样本渲染每个像素(比方说4spp或8spp而不是32Kspp),并将噪声图像传递到网络,这将产生高质量的真实感图像。1. 降噪效果展示:1.1 RGB图像1.2 医学CT图像2. 该网络代码需要加载的python包python 3.5 tensorfl...原创 2018-09-07 16:30:25 · 10125 阅读 · 19 评论 -
Pytorch模型及权重转为Keras
我们知道Pytorch采用的是动态图机制,非常有利于进行算法框架的快速开发以及相关验证,但是目前Pytorch直接应用于产品上还存在一定的不确定性,因此目前产品上主要还是采用基于Tensorflow或者Theano的成熟框架,正好keras作为对上述两种框架的成熟封装具有很好的适用性,可以方便的切换后端,用以使用Tensorflow、Tneano、CNTK 的backend;基于此,在工作中会遇到...原创 2018-09-13 11:49:45 · 8767 阅读 · 7 评论 -
keras下conv2DTranspose输出张量尺寸bug的修复
问题描述:最近需要将模型由pytorch改为keras框架,但是在conv2DTranspose这里总是出错,代码情况如下: 本来输入Conv2DTranspose的张量大小是(b,c,32,32),按照常理来计算,Conv2DTranspose的输出张量大小应该是(b,c,64,64),但是这里总是对不上,总是输出(b,c,?,?),最终进行查看也是一些莫名其妙的尺寸。解决方案:...原创 2018-09-14 10:34:28 · 5692 阅读 · 7 评论 -
BP神经网络反向传播算法一步一步实例推导(Backpropagation Example)
中文技术博客上描述的反向传播算法有一些跳跃性非常大,对于理解神经网络乃至深度学习的过程非常不利,我在网上找到一篇Backpropagation 的推导过程实例(https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/),写得明白透彻,按照最典型的梯度下降算法来进行推导,现将学习过程记录如下。1. loss ...原创 2018-10-14 17:31:39 · 5175 阅读 · 0 评论 -
深度强化学习课程 学习记录(一)UCB CS294-112
课程网站链接:http://rail.eecs.berkeley.edu/deeprlcourse/原创 2018-10-19 09:36:13 · 929 阅读 · 0 评论 -
Pytorch 为什么每一轮batch需要设置optimizer.zero_grad
CSDN上有人写过原因,但是其实写得繁琐了。根据pytorch中的backward()函数的计算,当网络参量进行反馈时,梯度是被积累的而不是被替换掉;但是在每一个batch时毫无疑问并不需要将两个batch的梯度混合起来累积,因此这里就需要每个batch设置一遍zero_grad 了。其实这里还可以补充的一点是,如果不是每一个batch就清除掉原有的梯度,而是比如说两个batch再清除掉梯...原创 2018-10-28 15:04:32 · 19174 阅读 · 5 评论 -
Cycle-GAN 模型介绍----原理简介
背景:Cycle-GAN是一个2017年推出的直击产业痛点的模型。众所周知,在一系列视觉问题上是很难以找到匹配的高质量图像作为target来供模型学习的,比如在超分辨领域内对于一个低分辨率的物体图像,未必能找到同样场景的高分辨率图像,这使得一系列深度学习模型的适应性有限。上述的困难总结起来就是:由于模型训练时必须依赖匹配的图像,而除非有目的的去产生这样的图像否则无法训练,并且很容易造成数据有偏...原创 2018-11-07 21:16:40 · 18004 阅读 · 1 评论 -
Pytorch 使用opnecv读入图像由HWC转为BCHW格式
传统使用opencv自带的swapaxes进行转换,然后使用pytorch的from_numpy转为tensor例如:img = img.swapaxes(1,2).swapaxes(0,1)但是有一个常用的图像增广模块albumentations模块中的img_to_tensor进行直接转换注意:我这里使用unsqueeze是为了验证模型的输出,如果使用pytorch的dat...原创 2018-11-16 17:09:34 · 5803 阅读 · 0 评论 -
Tensorflow占用GPU显存问题
我使用Pytorch进行模型训练时发现真正模型本身对于显存的占用并不明显,但是对应的转换为tensorflow后(权重也进行了转换),发现Python-tensorflow在使用时默认吃掉所有显存,并且不手动终结程序的话显存并不释放(我有两个序贯的模型,前面一个跑完后并不释放占用显存)(https://github.com/tensorflow/tensorflow/issues/1727),这一...原创 2018-11-22 13:19:24 · 7360 阅读 · 1 评论 -
Pytorch 训练与测试时爆显存(out of memory)的一个解决方案
Pytorch 训练时有时候会因为加载的东西过多而爆显存,有些时候这种情况还可以使用cuda的清理技术进行修整,当然如果模型实在太大,那也没办法。使用torch.cuda.empty_cache()删除一些不需要的变量代码示例如下:try: output = model(input)except RuntimeError as exception: if "out of...原创 2018-11-23 11:06:22 · 68633 阅读 · 49 评论 -
Deep Photo Enhancer 基于GANs的非匹配图像增强
当Cycle-GAN出来后,我当时就觉得会有一大波类似的东西出来,在CVPR18的会议上发的文章Deep Photo Enhancer: Unpaired Learning for Image Enhancement from Photographs with GANs 就是一种基于Cycle-GAN的往复互证思路做的模型,正好对我最近的工作可能有启发意义,因此写出来。本文的翻译工作在(https...原创 2018-12-06 09:56:24 · 3885 阅读 · 6 评论 -
Pytorch 安装命令记录
我每次都忘记pytorch安装命令中的路径,这次我把它记录下来使用pip3 进行的安装,命令如下:pip3 install http://download.pytorch.org/whl/cu90/torch-0.4.1-cp35-cp35m-linux_x86_64.whl这其中http到whl是固定的,cu90表明的是安装的是cuda9.0版本,后面torch那一串,0.4.1表明是0...原创 2018-12-16 15:13:16 · 806 阅读 · 0 评论 -
图像质量评估指标(4)基于深度学习框架的指标(1)
基于深度学习框架的指标 一基于深度学习框架的IQA指标 (1)如果说传统领域内的指标有什么缺陷的话,我个人认为传统指标的缺陷归根到底还是其所设计的特征不能很好地匹配真实的人类视觉,在某些领域往往会产生同人类视觉感知相左的结论。如果说深度学习IQA指标的设计有什么思想基础的话,我认为应该是从刻画视觉感知的角度出发来制定IQA的指标,形象的来说,拿一个vgg作为特征提取器,然后衡量两张图这些特征的...原创 2019-01-07 22:28:08 · 2464 阅读 · 0 评论 -
Pytorch 中model.zero_grad 和optimizer.zero_grad等效
实际上当optimizer使用optim.Optimzer进行定义后,那么在模型训练过程中model.zero_grad()和optimzier.zero_grad()两者是等效的,当然我更加推荐使用前者,因为更好理解一些。if optimizer = optim.Optimizer(net.parameters()), model.grad_zero() and optimizer.grad...原创 2019-01-15 10:37:21 · 6104 阅读 · 0 评论 -
Pytorch 抽取vgg各层并进行定制化处理
工作中有时候需要对vgg进行定制化处理,比如有些时候需要借助于vgg的层结构,但是需要使用的是2 channels输入,等等需求,这时候可以使用vgg的原始结构用class重写一遍,但是这样的方式比较慢,并且容易出错,下面给出一种比较简单的方式def define_vgg(vgg,input_channels,endlayer,use_maxpool=False): vgg_ad ...原创 2019-01-15 11:40:18 · 5267 阅读 · 0 评论 -
Pytorch 节省内存、显存的一些技巧
Pytorch中有一些节省内存、显存的技巧,我结合自己的经验以及如下网址所载内容进行描述:技巧inplace 操作比如在relu或者LeakyRelu里面使用inplace,可以减少对内存的消耗;这种操作根据我个人的经验是比较有效的,尤其是在一些ResNet结构单元使用比较多的模型上;具体可以参考下文进行尝试:比如ResNet 和 DenseNet 可以将 batchnorm 和relu...原创 2019-01-15 18:10:03 · 14053 阅读 · 0 评论 -
Pytorch的网络结构可视化(tensorboardX)(详细)
最近刚刚发现一个非常好用的显示模型神器Netronhttps://github.com/lutzroeder/Netron借助这个工具可以像windows的软件一样导入已经训练好的模型加权重即可一键生成我目前看了下visdom实现pytorch的网络结构查找还是很困难,在stackflow上有很多人使用自己编写的基于matplotlib来实现网络结构可视化适用性也不是很好,后来查找到使...原创 2018-09-17 13:02:00 · 31877 阅读 · 29 评论