精华内容
下载资源
问答
  • 2020-01-09 10:11:29

    from 《tensorflow learn in one day》 by Krishna Rungta
    在这里插入图片描述

    更多相关内容
  • 深度神经网络模型在城市路边停车方案中的应用.pdf
  • DenseNet-GRU:直肠癌CT影像分类的深度神经网络模型.pdf
  • 基于双层异构深度神经网络模型的人脸识别关键技术研究.pdf
  • 与此同时,包括混合条件训练,多口音决策树状态绑定,深度神经网络级联和多级自适应网络级联隐马尔可夫模型建模等的多口音建模方法在本文中被组合和比较。一个能显式地利用口音信息的改进多级自适应网络级联隐马尔可夫...
  • 基于深度神经网络模型的中文分词方案.pdf
  • 图像分类的深度卷积神经网络模型综述 图像分类的深度卷积神经网络模型综述 图像分类的深度卷积神经网络模型综述 图像分类的深度卷积神经网络模型综述 图像分类的深度卷积神经网络模型综述 图像分类的深度卷积神经...
  • 输气管道微泄漏检测的深度神经网络模型研究.pdf
  • 面向嵌入式应用的深度神经网络模型压缩技术综述.pdf
  • 基于深度神经网络模型的钻井井漏预测研究.pdf
  • 本论文从深度神经网络模型结构出发,展开了较为系统和深入的研究,一方面对现有的模型进行优化,另一方面结合语音及语言信号的特性探究新的网络结构模型,从而提高基于深度神经网络的语音识别系统的性能和训练效率。...
  • 带相关反馈的基于深度神经网络模型的人脸检索方法.pdf
  • 深度神经网络建模方法用于数据缺乏的带口音普通话语音识别的研究(英文).pdf
  • 2深度神经网络模型压缩综述_耿丽丽.caj
  • 近年来,随着深度学习的飞速发展,深度神经网络受到了越来越多的关注,在许多应用领域取得了显著效果。通常,在较高的计算量下,深度神经网络的学习能力随着网络层深度的增加而不断提高,因此深度神经网络在大型数据...
  • 【项目实战】Python实现深度神经网络RNN-LSTM分类模型(医学疾病诊断) 资料说明:包括数据集+源代码+Word文档说明。 资料内容包括: 1)项目背景; 2)收集数据; 3)数据预处理; 4)探索数据分析; 5)特征工程; 6...
  • 【项目实战】Python实现深度神经网络gcForest(多粒度级联森林)分类模型(医学诊断) 资料说明:包括数据+代码+文档+代码讲解。 1.项目背景 2.数据获取 3.数据预处理 4.探索性数据分析 5.特征工程 6.构建GCForest建模 ...
  • 使用深度神经网络检测Cassini ISS图像中圆盘状星体轮廓.pdf
  • 深度神经网络(DNNs)擅长于视觉识别任务,并日益被用作灵长类动物大脑神经计算的建模框架。就像单个大脑一样,每个DNN都有独特的连通性和表征特征。
  • 基于主成分分析与深度神经网络的快速噪声水平估计算法.pdf
  • 基于深度神经网络的冠脉造影图像的血管狭窄自动定位及分类预测.pdf
  • 基于深度神经网络的卷烟智能投放模型构建方法.pdf
  • 基于深度神经网络的脱硫系统预测模型及应用.pdf
  • 深度神经网络模型剪枝

    千次阅读 2020-04-20 23:43:13
    深度神经网络模型剪枝 神经网络剪枝 Neural Network Pruning

    深度神经网络模型剪枝

    神经网络剪枝 Neural Network Pruning

    下面是我对剪枝的一点点理解,如有理解不到位,请大家指正

    ▶剪枝只是将模型中权重比较小,对输出影响不大的神经元参数置0,并且实验证明在大多数情况下,权重较小的神经元置0后对模型的最终输出确实影响不大,当然,这也跟剪枝比例和模型规模有关系

    ▶剪枝并没有减少模型的参数量,间接减少计算量:剪枝只是在置0,但参数仍然以0存在,从底层方面对于一个与0相乘的数,直接输出0不会做过多计算,数据结构中也有这个理论:当 ‘与运算’ 前的表达式结果为False时,该表达式直接为False,不再计算 ‘与运算’ 后的表达式。

    ▶在一些特殊情况下,权重小的神经元并不一定对输出影响小,因此还有很多其他的剪枝方式

    ▶对网络中的每一层按比例剪枝,而不是对整个网络剪


    拿MNIST跑了下,剪掉部分对模型性能的影响

    网络:
    self.linear1 = MaskLinear(28*28, 512)
    self.bn1 = nn.BatchNorm1d(512)
    self.linear2 = MaskLinear(512, 256)
    self.bn2 = nn.BatchNorm1d(256)
    self.linear3 = MaskLinear(256, 10)
    self.act = nn.LeakyReLU()
    self.softmax = nn.Softmax(dim=1)
    训练了8个epoch

    剪枝前:
    Test acc: 97.91324%
    剪枝 60% 后:
    Test acc: 97.20395%
    剪枝前后正确率差异: 0.7092927631578902 %


    剪枝 50% 后:
    Test acc: 97.61513%
    剪枝前后正确率差异: 0.2981085526315752 %


    剪枝 40% 后:
    Test acc: 97.91324%
    剪枝前后正确率差异: 0.0 %


    剪枝 30% 后:
    Test acc: 97.87212%
    剪枝前后正确率差异: 0.04111842105263008 %


    剪枝 20% 后:
    Test acc: 97.87212%
    剪枝前后正确率差异: 0.04111842105263008 %


    剪枝 10% 后:
    Test acc: 97.93380%
    剪枝前后正确率差异: 0.02055921052631504 %

    下面是对权重小的神经元进行剪枝的代码栗子,感兴趣的可以跑一跑

    定义了一个2层的全连接,第一层输入为1, 输出为5, 第二层输入为5,输出为1,然后剪掉40%

    先看一些结果
    在这里插入图片描述


    代码:

    import torch
    from torch import nn
    import numpy as np
    
    
    class MaskLinear(nn.Linear):                    # 重写nn.Linear 为 MaskLinear
        def __init__(self, in_features, out_features, bias=True):
            super(MaskLinear, self).__init__(in_features, out_features, bias)
            self.mask = None
    
        def set_mask(self, mask):                   # 根据掩码剪掉权重
            self.mask = mask.detach().requires_grad_(False)
            self.weight.data = self.weight.data * self.mask.data
            self.mask = None
    
        def get_mask(self):                         # 获取掩码
            # print(self.mask_flag)
            return self.mask
    
        def forward(self, x):
            return nn.functional.linear(x, self.weight, self.bias)
    
    
    class MLP(nn.Module):
        def __init__(self):
            super(MLP, self).__init__()
            self.linear1 = MaskLinear(1, 5)
            self.linear2 = MaskLinear(5, 1)
    
        def forward(self, x):
            x = x.view((x.shape[0], -1))
            l1 = self.linear1(x)
            l2 = self.linear2(l1)
            return l2
    
        def set_masks(self, masks):
            self.linear1.set_mask(masks[0])
            self.linear2.set_mask(masks[1])
    
    
    def weight_prune(model, pruning_perc):          # 根据比例perc计算掩码
        threshold_list = []
        for param in model.parameters():
            if len(param.data.size()) != 1:
                weight = param.cpu().data.abs().numpy().flatten()
                threshold = np.percentile(weight, pruning_perc)
                threshold_list.append(threshold)
        masks = []
        idx = 0
        for param in model.parameters():
            if len(param.data.size()) != 1:
                pruning_inds = param.data.abs() > threshold_list[idx]
                masks.append(pruning_inds.float())
                idx += 1
        return masks
    
    
    def train(model, data, target, epoch):
        model.train()
        opt = torch.optim.Adam(model.parameters())
        for ep in range(epoch):
            opt.zero_grad()
            out = model(data)
            loss = torch.mean((out - target) ** 2)
            loss.backward()
            opt.step()
            print('epoch: {1:2d} Train out: {0:2.4f}'.format(out.item(), ep+1))
        return model
    
    
    def main():
        model = MLP()
        data = torch.tensor([3.0])
        model = train(model, data, data, 100)
        torch.save(model, 'net.pth')
        for name, param in model.named_parameters():
            print('{0:15s}: {1}'.format(name, param.data))
        print('\n############-▲▲剪枝前▲▲-------▼▼剪枝40%后▼▼-##########\n')
        mask = weight_prune(model, 40)          # 获取掩码,剪掉40%
        model.set_masks(mask)                   # 剪枝
        for name, param in model.named_parameters():
            print('{0:15s}: {1}'.format(name, param.data))
    
    
    if __name__ == '__main__':
        main()
    
    
    展开全文
  • 深度学习中的字母识别: Keras的深度神经网络模型
  • 基于深度神经网络的语音识别模型研究_张仕良 ,caj格式,需要用CAJViewer阅读软件打开
  • 基于深度神经网络的股票预测系统.pdf
  • 深度神经网络模型压缩方法总结

    千次阅读 2018-03-13 19:15:03
    这种是直接提出新的卷积计算方式,从而减少参数,达到压缩模型的效果,例如SqueezedNet,mobileNet 1. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size 代码地址:...

    新的卷积计算方法

    这种是直接提出新的卷积计算方式,从而减少参数,达到压缩模型的效果,例如SqueezedNet,mobileNet

    1. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size

    代码地址https://github.com/DeepScale/SqueezeNet
    下图是论文中的Fire Module,将上一层的输出分别输入到1*1的卷积核3*3的卷积层中。
    这里写图片描述
    使用以下三个策略来减少SqueezeNet参数 :
    (1)使用1∗1卷积代替3∗3 卷积:卷积模板的选择,从12年的AlexNet模型一路发展到2015年底Deep Residual Learning模型,基本上卷积大小都选择在3x3了,因为其有效性,以及设计简洁性。本文替换3x3的卷积kernel为1x1的卷积kernel可以让参数缩小9X。但是为了不影响识别精度,并不是全部替换,而是一部分用3x3,一部分用1x1。
    (2)减少输入3x3卷积的input feature map数量 :这一部分使用squeeze layers来实现 。参数量=通道数*filter数*卷积窗口,因此减少feature map的输入数量就可以一定程度上的减少参数量。
    (3)将欠采样操作延后,可以给卷积层提供更大的激活图:更大的激活图保留了更多的信息,可以提供更高的分类准确率 。在具体实现时,只在卷积第1、4、8层做了max pooling,在conv10做了全局平均pooling
    其中,(1)和(2)可以显著减少参数数量,(3)可以在参数数量受限的情况下提高准确率。
    另外论文中还使用了global average pooling代替全连接层的策略来进一步减少参数量(关于GAP要复习一下NIN)。

    可以看出,Squeeze层由于使用1∗1卷积极大地压缩了参数数量,并且进行了降维操作,但是对应的代价是输出特征图的通道数(维数)也大大减少。之后的expand层使用不同尺寸的卷积模板来提取特征,同时将两个输出连接到一起,又将维度升高。但是3∗3的卷积模板参数较多,远超1∗1卷积的参数,对减少参数十分不利,所以作者又针对3∗3卷积进行了剪枝操作以减少参数数量。从网络整体来看,feature map的尺寸不断减小,通道数不断增加,最后使用平均池化将输出转换成1∗1∗1000完成分类任务。

    2.MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    这篇文章主要基于深度可分离卷积(具体参考有道云笔记)。
    深度可分离卷积是基于Xception的,在Xception中是先做channelwise的卷积再做pointwise的卷积,例如:在经典的卷积操作,如果output channel是256,input channel是128,卷积核大小3*3,那么参数量为 12833256=294912 128 ∗ 3 ∗ 3 ∗ 256 = 294912 ,而Spearable卷积方法,假如DM=4,这样中间层的channel数为128*4=512,再经过1*1卷积降维到256个channel,需要的总参数为:128*3*3*4 + 128*4*1*1*256=135680,参数量相当于普通卷积的46%,还增加了通道数(128*4=512)增强了特征表达能力。
    这里写图片描述
    在MobileNet中,作者也是先做深度方向上的卷积,再做点卷积。
    这里写图片描述
    对MobileNet的参数量分析:
    标准卷积参数量
    深度卷积参数量
    深度可分离卷积参数量
    减少的参数量

    3.ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile

    做模型压缩的连起名字的方式都是类似的么。。。
    具体讲解参考:https://blog.csdn.net/u011974639/article/details/79200559,这里的关于shuffle的图例很清晰明了。
    文章的主要基于两个点:1)深度可分离卷积;2)Group Convolution。
    主要的贡献点就是做了一个通道混洗(Channel shuffle)

    已训练好的模型上做裁剪

    方法

    这种就是在训练好的模型上做一些修改,然后在fine-tuning到原来的准确率,主要有一些方法:

    • 剪枝:神经网络是由一层一层的节点通过边连接,每个边上会有权重,所谓剪枝,就是当我们发现某些边上的权重很小,可以认为这样的边不重要,进而可以去掉这些边。在训练的过程中,在训练完大模型之后,看看哪些边的权值比较小,把这些边去掉,然后继续训练模型;

    • 权值共享:就是让一些边共用一个权值,达到缩减参数个数的目的。假设相邻两层之间是全连接,每层有1000个节点,那么这两层之间就有1000*1000=100万个权重参数。可以将这一百万个权值做聚类,利用每一类的均值代替这一类中的每个权值大小,这样同属于一类的很多边共享相同的权值,假设把一百万个权值聚成一千类,则可以把参数个数从一百万降到一千个。

    • 量化:一般而言,神经网络模型的参数都是用的32bit长度的浮点型数表示,实际上不需要保留那么高的精度,可以通过量化,比如用0~255表示原来32个bit所表示的精度,通过牺牲精度来降低每一个权值所需要占用的空间。

    • 神经网络二值化:比量化更为极致的做法就是神经网络二值化,也即将所有的权值不用浮点数表示了,用二进制的数表示,要么是+1,要么是-1,用二进制的方式表示,原来一个32bit权值现在只需要一个bit就可以表示,可以大大减小模型尺寸。

    论文

    • XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

    网络权重二值化、输入二值化,从头开始训练一个二值化网络,不是在已有的网络上二值化

    • Learning both Weights and Connections for Efficient Neural Networks

    学习重要的连接,根据连接的权重进行裁剪,fine-tuning让网络保持稀疏的连接

    • Exploiting linear structure within convolutional networks for efficient evaluation.

    对已经训练好的网络应用奇异值分解

    • Eie: Efficient inference engine on compressed deep neural network.

    加速器

    • Deep compression: Compressing DNNs with pruning, trained quantization and huffman coding.

    裁剪(阈值)、量化(8bit,存储方式)、哈夫曼编码
    http://blog.csdn.net/may0324/article/details/52935869

    • Deep Model Compression: Distilling Knowledge from Noisy Teachers

    • Teacher-student Framework,一个网络指导另外一个网络的训练

    • PerforatedCNNs: Acceleration through Elimination of Redundant Convolutions

    在一些稀疏位置跳过CNN求值,加速效果不明显,且不能压缩模型

    • Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or −1

    训练二值化网络
    https://tensortalk.com/?cat=model-compression-parameter-pruning

    • PRUNING FILTERS FOR EFFICIENT CONVNETS

    计算filter的L1范数,直接过滤掉较小L1范数对应的feature map, 然后再次训练,有两种,一是每裁剪一层训练一下,一是直接裁剪整个网络,然后fine-tuning. 相比权值连接的裁剪,这种比较暴力,好处就是不会引入稀疏矩阵的计算,从而也不需要稀疏矩阵库,坏处就是可能无法恢复到最开始的准确率。

    展开全文
  • 基于深度神经网络的多因素感知终端换机预测模型.pdf
  • 基于深度神经网络的原发性肝癌证型诊断分类预测模型.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 232,473
精华内容 92,989
关键字:

深度神经网络模型