精华内容
下载资源
问答
  • 今天小编就为大家分享一篇pytorch动态网络以及权重共享实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Share weight in Resnet model 提问: 答案: I’m not sure if you will train the share weight twice in one forward action, if it is , I think the forward code should be something like followi

    引用:https://discuss.pytorch.org/t/share-weight-in-resnet-model/21371

    Share weight in Resnet model

    提问:

    答案:

    I’m not sure if you will train the share weight twice in one forward action, if it is , I think the forward code should be something like following.

    
    def forward(self, x):
        input_image = x
        ...
        x = self.share_weight_layer(x)
        ...
        pool = x = self.avg_pool(x)
        product = pool * input_image
        x = self.some_layer(product)
        ...
        x = self.share_weight_layer(x) # this is the same layer as previous one
        ...
        return x

     

    展开全文
  • keras 共享权重

    2020-09-01 18:15:40
    在写CBAM时遇到问题,maxpooling和average pooling要共享一个全连接,但是不会写这种共享一个层的。 写法: 先定义出层不用加输入,相当于一个函数 然后用的时候直接调用就好了。 感谢大神!!参考:...

    在写CBAM时遇到问题,maxpooling和average pooling要共享一个全连接,但是不会写这种共享一个层的。
    在这里插入图片描述
    写法:
    在这里插入图片描述
    先定义出层不用加输入,相当于一个函数
    在这里插入图片描述

    然后用的时候直接调用就好了。
    感谢大神!!参考:https://blog.csdn.net/ngadminq/article/details/107005092

    展开全文
  • 是个nXn的共享权重矩阵(上图中,n=5),因此这里有26个参数。  代表在输入层的nXn的矩形区域的特征值。 这就意味着第一个隐藏层中的所有 神经元都检测在图像的不同位置处的同一个特征 。( 权重共享,则检测...

    一、神经网络

    先回顾一下多层神经网络
    这里写图片描述
    多层神经网络包括一个输入层和一个输出层,中间有多个隐藏层。每层有若干个神经元,相邻两层之间的后一层的每个神经元都分别与前一层的所有神经元连接。在识别问题中,输入层(即网络的第一层)代表特征向量,其每一个神经元代表一个特征值。

    多层神经网络在图像识别问题中,输入层的每一个神经元可能代表一个像素的灰度值。但这种神经网络用于图像识别有几个问题,一是没有考虑图像的空间结构,识别性能受到限制;二是每相邻两层的神经元都是全相连,参数太多,训练速度受到限制。

    二、卷积神经网络的结构

        CNN就可解决上面传统神经网络的问题。CNN是在多层神经网络基础上发展起来的针对图像分类和识别而设计的一种深度学习方法。CNN使用了针对图像识别的特殊结构,可以快速训练。因为速度快,使得训练多层神经网络变得容易,而多层结构在识别准确率上又很大优势。

    CNN有三个基本概念:局部感知域(local receptive fields),共享权重(shared weights)和池化(pooling)。

    局部感知域: 在上图中的神经网络中输入层是用一列神经元来表示的,在CNN中,不妨将输入层当做二维矩阵排列神经元

    与常规神经网络一样,输入层的神经元需要和隐藏层的神经元连接。但这里不是将每一个输入神经元都与每一个隐藏神经元连接,而是仅仅在一个图像的局部区域创建连接。以大小为28X28的图像为例,假如第一个隐藏层的神经元与输入层的一个5X5的区域连接,如下图所示: 
    这里写图片描述
    这个5X5的区域就叫做局部感知域。该局部感知域的25个神经元与第一个隐藏层的同一个神经元连接,每个连接上有一个权重参数,因此局部感知域共有5X5个权重。如果将局部感知域沿着从左往右,从上往下的顺序滑动,就会得对应隐藏层中不同的神经元,如下图分别展示了第一个隐藏层的前两个神经元与输入层的连接情况。 
    这里写图片描述
    这里写图片描述
    如果输入层是尺寸为28X28的图像,局部感知域大小为5X5,那么得到的第一个隐藏层的大小是24X24。

    共享权重: 上面得到的第一隐藏层中的24X24个神经元都使用同样的5X5个权重。第l个隐藏层中第i个神经元的输出为: 

                                                             
    其中, 是该感知域连接的共享偏置是个nXn的共享权重矩阵(上图中,n=5),因此这里有26个参数。 代表在输入层的nXn的矩形区域的特征值。

    这就意味着第一个隐藏层中的所有神经元都检测在图像的不同位置处的同一个特征。(权重共享,则检测特征相同)因此也将从输入层到隐藏层的这种映射称为特征映射(或称作filters, kernels)。该特征映射的权重称为共享权重,其偏置称为共享偏置。

    为了做图像识别,通常需要不止一个的特征映射,因此一个完整的卷积层包含若干个不同的特征映射。下图中是个三个特征映射的例子。(因为图像为灰色图像,所以输入通道为1,输入的28*28个神经元分别代表着输入图像的不同位置的像素值大小)
    这里写图片描述
    在实际应用中CNN可能使用更多的甚至几十个特征映射。以MNIST手写数字识别为例,学习到的一些特征如下: 
    这里写图片描述
    这20幅图像分别对应20个不同的特征映射(filters, kernels)。每个特征映射由5X5的图像表示,代表局部感知域中的5X5个权重。亮的像素点代表小的权重,与之对应的图像中的像素产生的影响较小。暗的像素点代表大的权重,意味着对应的图像中的像素的影响较大。可看出这些特征映射反应了某些特殊的空间结构,因此CNN学习到了一些与空间结构有关的信息用于识别。

    当CNN用于彩色图像的识别分类时,输入通道则不只一个通道,下面以输入通道为3通道为例,描述标准卷积操作的具体过程:

    上图中,输入为3通道,有两个卷积核(两个共享权重),其且每个卷积核的通道数必须等于输入通道数3,最终卷积层的输出通道数等于卷积核个数2,即输出的特征图个数为卷积核的个数2。通道就是某种意义上的特征图

    标准的卷积操作当输入的feature map数量(即输入的通道数)是N,卷积层filter(卷积核)个数是M时,则M个filter中,每一个filter都有N个channel,都要分别和输入的N个通道做卷积,得到N个特征图,然后将这N个feature map按Eletwise相加(即:进行通道融合),再加上该filter对应的偏置(一个filter对应一个共享偏置),作为该卷积核所得的特征图。同理,对其他M-1个filter也进行以上操作。所以最终该层的输出为M个feature map(即:输出channel等于filter的个数)。可见,输出的同一张特征图上的所有元素共享同一个卷积核,即共享一个权重。不同特征图对应的卷积核不同。

    由以上卷积过程可看出,不同特征图(通道)代表不同的特征,同一张特征图(同一个通道)上的所有元素(神经元)都是对图像的不同位置同一个特征的检测通道中某一处(特征图上某一个神经元)数值的大小就是当前位置当前特征强弱的反应

    卷积操作的输出特征图大小计算式为:

    o=[(i−k+2∗p​)/2  ] +1  (其中i为卷积层的输入大小,k为卷积核大小,p为padding大小。中括号表示向下取整

    三、激励函数(激活函数)

    由前述可知,在CNN中,卷积操作只是加权求和的线性操作,若神经网络只用卷积层,那么无论有多少层,输出都是输入的线性组合,网络的表达能力有限,无法学习到非线性函数。因此CNN引入激励函数,激活函数是个非线性函数,常作用于卷积层和全连接层输出的每个神经元(分量/元素),给神经元引入了非线性因素,使网络表达能力更强,几乎可逼近任意函数,这样神经网络就可应用到众多的非线性模型中。

    激励函数作用于卷积层的输出时:,各符号意义同上。

    作用于全连接层的输出时:为当前FC层的第i个神经元的输出值,为该输出神经元对应的权重矩阵,为该FC层的输入神经元矩阵。

    这里σ是神经元的激励函数(可以是sigmoid函数、thanh函数或ReLU函数等)。

    四、池化层

    在CNN中,池化层通常紧随卷积或激励函数作用之后,目的是简化卷积层的输出。池化函数将某个元素邻域的总体统计特征作为网络在该位置的输出,是个下采样过程,减少了参数量。池化包括最大值池化和均值池化两种方式,都可实现局部平移不变性,即当输入有一定的平移时,经池化后输出不会发生改变。CNN通过引入池化,使得其特征提取不会因为目标位置的变化而受到较大的影响。(pooling之后的特征图大小遵循向上取整原则)

    五、全连接层(FC层)

    FC层负责学习特征图的组合:先将前面卷积层或池化层输出的所有二维特征图一起映射1个一维特征向量然后对所有特征进行不同的加权求和,得到输入的表达,中间可能有多个FC层,最后模型输出一个维度等于类别数(输出的神经元个数向量表示每一类的概率(softmax归一化),然后得分最高的类别判为输入的类别 FC层在整个CNN中起到“分类器”的作用。

    六、反卷积(转置卷积Deconvuolution / Transconvolution / upconvolution)

    反卷积和卷积的工作过程差不多,主要的区别在于反卷积输出图片的尺寸会大于输入图片的尺寸,通过增加padding来实现这一操作。当反卷积的stride>=2时,则通过间隔插入padding来实现。注意:反卷积并不能还原卷积之前的矩阵,只能还原卷积之前的特征图大小。反卷积的本质还是卷积,只是在进行卷积之前,会自动进行padding补0,从而使得输出的矩阵与指定输出矩阵的shape相同。深度学习框架本身,会根据设定的反卷积值来计算输入矩阵的尺寸,如果维度不符合,则会报错。

      同样,可结合卷积计算表达式和反卷积的输入大小i'(即卷积的输出大小 o ),来设置合适的反卷积参数:s'、k'、p',从而计算反卷积的输出大小o',也就是卷积的输入大小i。通常 s'=s,k'=k。根据s的大小来确定padding的位置和数值大小。

    (1)当stride=1时,padding均匀设置在反卷积的输入特征图的四周,且padding的个数为:p'=k-1,反卷积输出大小为:o'=(i'−1)∗s+k−2p。如图1所示。

    (2)当stride>=2时,p'=k-1-p,padding在反卷积的输入特征图的上方和右侧边缘的个数为a,a=(i-k+2p)%s,特征图上的单元之间填补(s-1)个零. 反卷积输出大小为:o'=(i'−1)∗s+k−2p+a。如图2或图3所示。

      

        图1          图2          图3

    展开全文
  • 二,卷积神经网络的结构 卷积神经网络有三个基本概念:局部感知域(local receptive fields),共享权重(shared weights)和池化(pooling)。 局部感知域: 在上图中的神经网络中输入层是用一列的神经元来表示的,在...

    一,前言

    卷积神经网络(Constitutional Neural Networks, CNN)是在多层神经网络的基础上发展起来的针对图像分类和识别而特别设计的一种深度学习方法。先回顾一下多层神经网络:
    这里写图片描述
    多层神经网络包括一个输入层和一个输出层,中间有多个隐藏层。每一层有若干个神经元,相邻的两层之间的后一层的每一个神经元都分别与前一层的每一个神经元连接。在一般的识别问题中,输入层代表特征向量,输入层的每一个神经元代表一个特征值。

    在图像识别问题中,输入层的每一个神经元可能代表一个像素的灰度值。但这种神经网络用于图像识别有几个问题,一是没有考虑图像的空间结构,识别性能会受到限制;二是每相邻两层的神经元都是全相连,参数太多,训练速度受到限制。

    而卷积神经网络就可以解决这些问题。卷积神经网络使用了针对图像识别的特殊结构,可以快速训练。因为速度快,使得采用多层神经网络变得容易,而多层结构在识别准确率上又很大优势。

    二,卷积神经网络的结构

    卷积神经网络有三个基本概念:局部感知域(local receptive fields),共享权重(shared weights)和池化(pooling)。

    局部感知域: 在上图中的神经网络中输入层是用一列的神经元来表示的,在CNN中,不妨将输入层当做二维矩阵排列的神经元。

    与常规神经网络一样,输入层的神经元需要和隐藏层的神经元连接。但是这里不是将每一个输入神经元都与每一个隐藏神经元连接,而是仅仅在一个图像的局部区域创建连接。以大小为28X28的图像为例,假如第一个隐藏层的神经元与输入层的一个5X5的区域连接,如下图所示:
    这里写图片描述
    这个5X5的区域就叫做局部感知域。该局部感知域的25个神经元与第一个隐藏层的同一个神经元连接,每个连接上有一个权重参数,因此局部感知域共有5X5个权重。如果将局部感知域沿着从左往右,从上往下的顺序滑动,就会得对应隐藏层中不同的神经元,如下图分别展示了第一个隐藏层的前两个神经元与输入层的连接情况。
    这里写图片描述
    这里写图片描述
    如果输入层是尺寸为28X28的图像,局部感知域大小为5X5,那么得到的第一个隐藏层的大小是24X24。

    共享权重: 上面得到的第一隐藏层中的24X24个神经元都使用同样的5X5个权重。第j个隐藏层中第k个神经元的输出为:

                                                            


    这里σ是神经元的激励函数(可以是sigmoid函数、thanh函数或者rectified linear unit函数等)。b 是该感知域连接的共享偏差。wl,m是个5X5共享权重矩阵。因此这里有26个参数。 ax,y 代表在输入层的x,y处的输入激励。

    这就意味着第一个隐藏层中的所有神经元都检测在图像的不同位置处的同一个特征。(权重共享,检测特征相同)因此也将从输入层到隐藏层的这种映射称为特征映射(或称作filters, kernels)。该特征映射的权重称为共享权重,其偏差称为共享偏差。

    为了做图像识别,通常需要不止一个的特征映射,因此一个完整的卷积层包含若干个不同的特征映射。下图中是个三个特征映射的例子。
    这里写图片描述
    在实际应用中CNN可能使用更多的甚至几十个特征映射。以MNIST手写数字识别为例,学习到的一些特征如下:
    这里写图片描述
    这20幅图像分别对应20个不同的特征映射(或称作filters, kernels)。每一个特征映射由5X5的图像表示,代表了局部感知域中的5X5个权重。亮的像素点代表小的权重,与之对应的图像中的像素产生的影响要小一些。暗的像素点代表的大的权重,也意味着对应的图像中的像素的影响要大一些。可以看出这些特征映射反应了某些特殊的空间结构,因此CNN学习到了一些与空间结构有关的信息用于识别。

    池化层(pooling layers) 池化层通常紧随卷积层之后使用,其作用是简化卷积层的输出。例如,池化层中的每一个神经元可能将前一层的一个2X2区域内的神经元求和。而另一个经常使用的max-pooling,该池化单元简单地将一个2X2的输入域中的最大激励输出,如下图所示:
    这里写图片描述
    如果卷积层的输出包含24X24个神经元,那么在池化后可得到12X12个神经元。每一个特征映射后分别有一个池化处理,前面所述的卷积层池化后的结构为:
    这里写图片描述
    Max-pooling并不是唯一的池化方法,另一种池化方法是L2−pooling

    ,该方法是将卷积层2X2区域中的神经元的输出求平方和的平方根。尽管细节与Max-pooling不一样,但其效果也是简化卷积层输出的信息。

    将上述结构连接在一起,再加上一个输出层,得到一个完整的卷积神经网络。在手写数字识别的例子中输出层有十个神经元,分别对应0,1, … ,9的输出。
    这里写图片描述
    网络中的最后一层是一个全连接层,即该层的每个神经元都与最后一个Max-pooling层的每个神经元连接。

    这个结构这是一个特殊的例子,实际CNN中也可在卷积层和池化层之后可再加上一个或多个全连接层。

    展开全文
  • 卷积网络的核心思想是将:局部感受野、权值共享(或者权值复制)以及时间或空间亚采样(池化)这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性. 诺贝尔奖获得者神经生理学家Hubel和Wie-sel早在...
  • 其实, 就是我们经常看到的图4,利用卷积实现了局部连接,然后输出数据里的每个神经元通过同一个卷积核(共享权重)去卷积图像后再加上同一个偏置(共享偏置)得到的,如果没有用共享权值,那么一个神经元需要对应一个卷积核...
  • 不用再使用keras.models的API 目录 keras.models.Sequential() () keras.models.Model() 继承类 共享权重网络 keras.models.Sequential() () 适用于简单线性堆叠网络。 流程:创建Sequential()对象,逐层堆叠网络 ...
  • 基于以上观点,Jiajun Liu在“Learning Abstract Snippet Detectors with Temporal Embedding in Convolutional Neural Networks” 中提出利用部分连接非共享权重的方式(长的与CNN中的卷基层比较像,但权重是非共享...
  • cnn网络定义了四个卷积层,权重为随机初始化的权重,输入为随机的(50,64,64,3)的向量 x1,x2的输出都调用了cnn这个函数 import tensorflow as tf def cnn(hidden): kwargs = dict(strides=2, activation=tf.nn....
  • 再谈权重共享

    2020-11-03 17:07:28
    之前在几篇博客中说到了权重共享,但都觉得不够全面,这里做个专题,以后有新的理解都在此更新。 1. 减少运算只是锦上添花 之前说到权重共享可以减少运算,是的,但这样说好像是可有可无,只是运算量大小的问题...
  • Transformer 权重共享

    2021-01-25 22:43:47
    Transformer在哪里做了权重共享,为什么可以做权重共享? Transformer在两个地方进行了权重共享: (1)Encoder和Decoder间的Embedding层权重共享; (2)Decoder中Embedding层和FC层权重共享。 对于(1),...
  • 共享权重:有点像提取公因数,假设模型的每一层都有公用的公因数,是否可以提取出来在结果处做一次运算,而不是每一层都算一次 接下来会针对以上三点逐个介绍。 模型剪枝 模型的构成是由许多浮点型的神经...
  • 参数共享权重复制是深度学习中经常被忽略的领域。但是了解这个简单的概念有助于更广泛地理解卷积神经网络的内部。卷积神经网络(cnn)能够使那些通过网络馈送的图像在进行仿射变换时具有不变性。 这个特点提供了识别...
  • pytorch1.0 实现多个层权重共享

    千次阅读 2019-08-08 11:35:26
    1、在模型前向传播时,可以多次重用同一个模块实现权重共享。 2、用python循环语句或条件语句在每个前向传播时构建一个动态计算图,所以下面这个模型是一个动态网络(动态控制流程) import torch import torch....
  • local attention与深度分离卷积或动态卷积相比,在稀疏连接上拥有一样的正则化,其主要区别在于权重共享中,深度分离卷积或动态卷积是不同通道之间不共享权重,而在不同空间位置上共享权重。我们观察到深度分离卷...
  • 神经网络中权重共享的理解

    千次阅读 2019-10-12 09:04:22
    所谓的权重共享就是说,输入一张图片,这张图片的用一个filter进行卷积操作的时候,图片中的每一个位置都被同一个filter进行卷积,所以权重是一样的,也就是共享。这个是在一个卷积层操作的时候的权重共享,另一个卷...
  • 孪生网络权重共享

    千次阅读 2019-02-22 11:14:47
    参考 https://blog.csdn.net/qq_35826213/article/details/86313469 https://keras.io/getting-started/functional-api-guide/#shared-vision-model
  • pytorch动态网络以及权重共享

    千次阅读 2018-11-02 20:29:27
    pytorch 动态网络+权值共享 pytorch以动态图著称,下面以一个栗子来实现动态网络和权值共享技术: # -*- coding: utf-8 -*- import random import torch class DynamicNet(torch.nn.Module): def __init__(self, D...
  • 2 pytorch的权重共享

    千次阅读 2017-05-22 14:56:21
    #这里重复利用Middle linear,权重共享,比tensorflow更方便哎 h_relu = self.middle_linear(h_relu).clamp(min= 0 ) y_pred = self.output_linear(h_relu) return y_pred # N is batch size; D_in is ...
  • CNN的fliter里的每个值都是学习出来的不是事先设定好的。 经过fliter处理后得到是特征图(feature map) 卷积减少权重参数的本质: 权重共享
  • 编写keras层,keras权重共享

    千次阅读 2017-10-25 09:50:17
    例如:希望两个一样的模块A和B共用权重,且A的输出作用在B的输入 from keras.layers import Conv2D, Input, Multiply, Lambda, Add from keras.models import Model input_tensor = Input((5,5,3)) add_tensor...
  • 利用keras实现孪生网络中的权值共享

    万次阅读 多人点赞 2019-01-11 19:15:15
    首先声明,这里的权值共享指的不是CNN原理中的共享权值,而是如何在构建类似于Siamese Network这样的多分支网络,且分支结构相同时,如何使用keras使分支的权重共享。 Functional API 为达到上述的目的,建议使用...
  • 卷积核在进行计算的时候,如上图,滤波器中的参数是固定不变的,按照设定好的步数移动扫面完全部位置,参数(权重共享就是说被扫描的像素全都共享这个滤波器中的权重进行计算。说白了就是所有被扫描的像素每一次都...
  • RNN--权重的时/空域共享

    千次阅读 2018-11-01 10:48:13
    权重的时/空域共享 weight-sharing is a key in DL, RNN shares weights temporally.
  • """函数式子API:权重共享 能够重复的使用同一个实例,这样相当于重复使用一个层的权重,不需要重新编写""" from keras import layers from keras import Input from keras . models import Model ...
  • CNN中的权值共享理解

    万次阅读 2017-11-08 09:38:32
    Weight:权值,权重权值共享CNN是权重共享,减少了参数的数量。这个有必要再对比研究一下。 一般神经网络层与层之间的连接是,每个神经元与上一层的全部神经元相连,这些连接线的权重独立于其他的神经元,所以假设...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,567
精华内容 24,626
关键字:

共享权重