(名称:全连接。意思就是输出层的神经元和输入层的每个神经元都连接)

在卷积神经网络的最后,往往会出现一两层全连接层,全连接一般会把卷积输出的二维特征图转化成一维的一个向量,这是怎么来的呢?目的何在呢?

举个例子:

最后的两列小圆球就是两个全连接层,在最后一层卷积结束后,进行了最后一次池化,输出了20个12*12的图像,然后通过了一个全连接层变成了1*100的向量。

这是怎么做到的呢,其实就是有20*100个12*12的卷积核卷积出来的,对于输入的每一张图,用了一个和图像一样大小的核卷积,这样整幅图就变成了一个数了,如果厚度是20就是那20个核卷积完了之后相加求和。这样就能把一张图高度浓缩成一个数了。

全连接的目的是什么呢?因为传统的网络我们的输出都是分类,也就是几个类别的概率甚至就是一个数--类别号,那么全连接层就是高度提纯的特征了,方便交给最后的分类器或者回归。

但是全连接的参数实在是太多了,你想这张图里就有20*12*12*100个参数,前面随便一层卷积,假设卷积核是7*7的,厚度是64,那也才7*7*64,所以现在的趋势是尽量避免全连接,目前主流的一个方法是全局平均值。

也就是最后那一层的feature map(最后一层卷积的输出结果),直接求平均值。有多少种分类就训练多少层,这十个数字就是对应的概率或者叫置信度。

---------------------------------------------------------------------

CNN中全连接层是什么样的?

名称:全连接。意思就是输出层的神经元和输入层的每个神经元都连接。

例子: AlexNet  网络中第一个全连接层是这样的:

layer {
  name: "fc6"
  type: "InnerProduct"
  bottom: "pool5"
  top:"fc6"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 4096
    weight_filler {
      type: "gaussian"
      std: 0.005
    }
    bias_filler {
      type: "constant"
      value: 0.1
    }
  }
}

其中  bottom: "pool5"就是这个全连接层的输入,而top:"fc6"就是这个全连接层的输出。值得注意的地方是这个bottom: "pool5"是个“二维平面“式的数据,也就是N X M的数组样式,但是top:"fc6"确是一个K X 1或者 1 X K的向量,因此在实现中,程序会将bottom: "pool5"拉成N*M X 1或者1 X M*N的向量。

这个输入向量是什么呢?对,是特征图,符号化就是X(1)、X(2)、X(3)...X(N*M),括号内是X的下标。

那么输出呢?如果这个全连接层不是最后一个全连接层那么它也是特征图,符号化就是Y(1)、Y(2)、Y(3)...Y(K),括号内是Y的下标。

那么输入和输出是怎么联系到一块呢?答案就是W权重了,也叫滤波器,也叫卷积核。

那么在全连接层里怎么没看到这个滤波器的大小呢?答案是:不需要,因为它就是全连接啊。

一般情况下,输入神经元的个数不等于输出神经元的个数,那数目不等的输入输出神经元怎么连接起来呢?还有,这个滤波器(卷积核)是什么样呢?可以看看下面例子:

其中(X1,X2,X3)就是输入神经元(特征图),而(Y1Y2)就是输出神经元(特征图),两层之间的连接就是卷积核:,想想矩阵相乘,就明白1X3的“矩阵”怎么变成1X2的矩阵了。

总的下来就是:

这个卷积核的形状是在代码中自动计算出来的。

解释一下全连接层CNN中全连接层是什么样的相关推荐

  1. CNN中全连接层是什么样的

    名称:全连接.意思就是输出层的神经元和输入层的每个神经元都连接. 例子: AlexNet  网络中第一个全连接层是这样的: layer {   name: "fc6"   type ...

  2. java 关闭oracle连接_Java应用中Oracle连接不关闭

    在一些不使用连接池的较老的Java Web应用程序中,我有一个连接泄漏. 查找泄漏很困难,因为它不会授予我访问v$session的权限 SELECT Count(*) FROM v$session; ...

  3. mysql 函数多个连接_MySQL数据库中如何连接两个或多个字符串呢?

    摘要: 下文讲述MySQL数据库中组合字符串的方法分享,如下所示: 实现思路: 使用系统函数CONCAT即可实现两个或多个字符串的组合连接 注意事项: 当组合字符串中,任意一个字符为NULL时,则返回 ...

  4. vs2015如何连接oracle,VS2015中C#连接Oracle数据库

    硬件环境:Win10 64位+ VS2015 + ODP.Net for VS2015 配置ODP.Net Oracle Developer Tools for Visual Studio 12.1. ...

  5. java连接查询where_SQL中join连接查询时条件放在on后与where后的区别

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...

  6. ice 服务java连接,java - ICE中的连接计数 - 堆栈内存溢出

    是的,您应该这样做. 每个通信器都创建两个线程池: 客户端线程池为传出连接提供服务,这主要涉及处理传出请求的回复,并包括通知AMI回调对象. 如果在双向模式下使用连接,则客户端线程池还将调度传入的回调 ...

  7. 对于全连接层的理解 全连接层的推导

    全连接层的推导 全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来.由于其全相连的特性,一般全连接层的参数也是最多的. 全连接层的前向计算 下图中连线最密集的2个地方就是全连 ...

  8. python cnn_Python · CNN(一)· 层结构

    (这里是最终成品的 GitHub 地址) (这里是本章用到的 GitHub 地址) ========== 写在前面的话 ========== 其实在 4 个月之前我写过一篇叫"Python ...

  9. mysql长连接_mysql.connector 数据库长连接

    最近python服务经常报连接不存在,后来发现原来的同事写的是缓存来存储连接对象,过期就关闭重连,可是有其他线程还在用该连接,于是就出现了连接不存在的错误,于是改进一下: 连接数据库时查看连接对象是否 ...

最新文章

  1. MATLAB实战系列(三十八)-基于K-means聚类算法的MATLAB图像分割
  2. java多线程优先级的方法_Java多线程以及线程优先级
  3. ffmpeg 常用基本命令和ffmpeg处理RTMP流媒体的常用命令
  4. qtabwidget设置tab高度_VC|富文本编辑框CRichEditCtrl的字体与段落设置
  5. linux下单点故障的软件,KeepAlived防止单点故障
  6. zipkin 自定义采样率_分组,采样和批处理– Java 8中的自定义收集器
  7. Leetcode--144. 二叉树的前序遍历(迭代递归)
  8. 深度学习在商户挂牌语义理解的实践
  9. LCD中调色板的概念
  10. java中什么是继承,和继承的接口的关系?
  11. 笔录软件在linux系统,weblogic的在redhat linux下使用笔录
  12. 70部MAYA灯光材质渲染教程合集
  13. 全网通工业无线路由器多网口工业路由器
  14. python面试题搜集
  15. 苹果 iOS/iPadOS 14.4 beta 2新功能
  16. C++实现简单的停车场管理系统
  17. 菜圈的codewars(一),codewars的注册
  18. 深入浅出LDA(1)
  19. android opencv颜色识别,opencv学习(2)-简单颜色识别并跟踪
  20. OpenGL基础(三):三角形

热门文章

  1. javascript 中使用JSON
  2. 怎样通过FineReader 的“文本”窗口检查文本
  3. linux下环境变量PATH的用法
  4. 奥林匹克公园的《老北京四重奏》
  5. 如何将xml的String字符串转化标准格式的String字符串
  6. Tomcat BIO . NIO . ARP 配置
  7. JSON与Protocol Buffers的一些比较
  8. GitHub提速方法大揭秘,10M速度使用无忧
  9. C#LeetCode刷题之#16-最接近的三数之和(3Sum Closest)
  10. mac忘记MySQL初始密码