全连接层与卷积层的区别

传送门

一.全连接层:       

         全连接层需要把输入拉成一个列项向量,如下图所示

         比如你的输入的feature map是2X2,那么就需要把这个feature map 拉成4X1的列向量,如果你的feature map 的channels是3,也就是你的输入是3X2X2,也就是相当于有了12个像素点,你就需要把feature map 拉成12X1的列向量,这时候,再乘一个权重,这个权重要把12个像素点都包含进去,所以这个权重的矩阵形式应该是1X12,所以经过一个全连接层后的输出就是1X12X12X1=1X1,这时候需要看你的需要多少个1X1的神经元了,如果是3个的话,那么输出就是3X(1X12X12X1)=3X(1X1).这个3在权重矩阵中代表3行,即每一行与输入相乘,得到一个输出:

二.卷积层:转载:https://www.cnblogs.com/zf-blog/p/6075286.html

        卷积层就相当于一个卷积核,对于传送过来的feature map进行局部窗口滑动,无论你输入的feature map多大(不能小于卷积核的大小),都不会对卷积造成影响:

 

卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC

(1)卷积层:用它来进行特征提取,如下:

输入图像是32*32*3,3是它的深度(即R、G、B),卷积层是一个5*5*3的filter(感受野),这里注意:感受野的深度必须和输入图像的深度相同。通过一个filter与输入图像的卷积可以得到一个28*28*1的特征图,上图是用了两个filter得到了两个特征图;

三.卷积层与全连接层的区别:

      从上面可以看出,全连接层的权重矩阵是固定的,即每一次feature map的输入过来必须都得是一定的大小(即与权重矩阵正好可以相乘的大小),所以网络最开始的输入图像尺寸必须固定,才能保证传送到全连接层的feature map的大小跟全连接层的权重矩阵匹配。

     卷积层就不需要固定大小了,因为它只是对局部区域进行窗口滑动,所以用卷积层取代全连接层成为了可能,看我这一节:深度学习---之全卷积神经网络取代全连接层--用于图像分割

全连接层卷积层是深度学习中两种常见的神经网络层,它们的区别如下: 1.连接方式不同:全连接层中相邻层的所有神经元之间都有连接,而卷积层只对局部区域进行窗口滑动,只局部区域内的神经元相连。 2.参数数量不同:全连接层的参数数量很大,因为每个神经元都要上一层的所有神经元相连,而卷积层的参数数量相对较少,因为它只局部区域内的神经元相连。 3.输入数据的形状不同:全连接层的输入数据必须是一维的,而卷积层的输入数据可以是二维或三维的,例如图像数据就是三维的(高度、宽度、通道数)。 4.应用场景不同:全连接层通常用于分类任务,而卷积层通常用于图像处理任务,例如图像分类、目标检测图像分割等。 下面是一个卷积层全连接层的代码示例: ```python # 卷积层示例 import torch.nn as nn class ConvNet(nn.Module): def __init__(self): super(ConvNet, self).__init__() self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1) self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.conv2 = nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1) self.fc = nn.Linear(32 * 8 * 8, 10) def forward(self, x): x = self.conv1(x) x = nn.functional.relu(x) x = self.pool(x) x = self.conv2(x) x = nn.functional.relu(x) x = self.pool(x) x = x.view(-1, 32 * 8 * 8) x = self.fc(x) return x # 全连接层示例 class FCNet(nn.Module): def __init__(self): super(FCNet, self).__init__() self.fc1 = nn.Linear(784, 256) self.fc2 = nn.Linear(256, 128) self.fc3 = nn.Linear(128, 10) def forward(self, x): x = x.view(-1, 784) x = nn.functional.relu(self.fc1(x)) x = nn.functional.relu(self.fc2(x)) x = self.fc3(x) return x ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值