全连接层那些事(Fully Connected Layer)

简介: 全连接层那些事(Fully Connected Layer)

什么是全连接层

       全连接层(Fully Connected Layer),也称为密集连接层(Dense Layer),是深度学习神经网络中的一种基本层类型。全连接层的每个神经元都与前一层的所有神经元相连接,每个连接都有一个权重用于调节信息传递的强度,并且每个神经元还有一个偏置项。


哪里会用到全连接层

       全连接层通常出现在卷积神经网络(CNN)或多层感知器(MLP)等网络结构的末尾。它负责将前面层中提取到的特征映射转换为最终的输出。在分类任务中,全连接层的输出通常与类别数量相对应,用于输出每个类别的概率分布或类别得分。

全连接层的作用包括:

  • 特征整合: 将前面层提取到的特征整合到最终的表示中,以便进行分类、回归或其他任务。
  • 非线性映射: 全连接层通常会在特征整合后应用非线性激活函数,如ReLU、sigmoid或tanh,以增加网络的表达能力。
  • 参数调节: 全连接层的权重和偏置项是可以学习的参数,通过反向传播算法进行优化,以使网络能够更好地拟合训练数据。
  • 输出预测: 在分类任务中,全连接层的输出用于预测输入属于各个类别的概率分布,或者直接输出类别得分。

      全连接层的引入使得神经网络能够对前面层提取到的特征进行更复杂的整合和转换,从而提高了模型的表达能力和性能。

示例代码

import numpy as np
 
class FullyConnectedLayer:
    def __init__(self, input_size, output_size):
        self.input_size = input_size
        self.output_size = output_size
        # 随机初始化权重和偏置
        self.weights = np.random.randn(input_size, output_size)
        self.biases = np.random.randn(output_size)
 
    def forward(self, input_data):
        # 计算全连接层的前向传播
        return np.dot(input_data, self.weights) + self.biases
 
# 测试全连接层
if __name__ == "__main__":
    # 创建输入数据
    input_data = np.random.randn(2, 3)  # 输入大小为2,样本数为3
 
    # 创建全连接层对象,输入大小为3,输出大小为4
    fc_layer = FullyConnectedLayer(input_size=3, output_size=4)
 
    # 进行前向传播
    output_data = fc_layer.forward(input_data)
 
    # 输出全连接层的输出
    print("全连接层的输出:")
    print(output_data)

Dropout 层的作用

       Dropout 层可以在全连接层中起到正则化的作用,从而优化全连接层的性能。全连接层的参数量较大,容易产生过拟合现象,而 Dropout 层通过随机失活部分神经元的输出,减少神经元之间的相关性,降低模型对于某些特定神经元的依赖性,提高模型的泛化能力,减少过拟合风险。如图所示,是在全连接层网络中加入了 Dropout 层之后的效果。

示例代码:

 

import numpy as np
 
class DropoutLayer:
    def __init__(self, dropout_rate):
        self.dropout_rate = dropout_rate
        self.mask = None
 
    def forward(self, input_data, training=True):
        if training:
            # 训练模式下,生成 dropout 掩码
            self.mask = (np.random.rand(*input_data.shape) >= self.dropout_rate) / (1.0 - self.dropout_rate)
            # 应用 dropout 掩码
            output_data = input_data * self.mask
        else:
            # 测试模式下,不应用 dropout,直接返回输入数据
            output_data = input_data
        return output_data
 
# 测试 Dropout 层
if __name__ == "__main__":
    # 创建输入数据
    input_data = np.random.randn(2, 3)  # 输入大小为2,样本数为3
 
    # 创建 Dropout 层对象,设置 dropout 比率为0.2
    dropout_layer = DropoutLayer(dropout_rate=0.2)
 
    # 进行前向传播,训练模式
    output_data_train = dropout_layer.forward(input_data, training=True)
 
    # 进行前向传播,测试模式
    output_data_test = dropout_layer.forward(input_data, training=False)
 
    # 输出结果
    print("训练模式下的输出:")
    print(output_data_train)
    print("\n测试模式下的输出:")
    print(output_data_test)
相关文章
|
5月前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】MSFN(Multi-Scale Feed-Forward Network):多尺度前馈网络
**HCANet: 高光谱图像去噪新方法**\n混合卷积与注意力网络(Hybrid Convolutional and Attention Network)是针对HSI去噪的创新模型,结合CNN和Transformer,强化全局与局部特征。它使用卷积注意力融合模块捕获长距离依赖和局部光谱相关性,多尺度前馈网络提升多尺度信息聚合。代码可在[GitHub](https://github.com/summitgao/HCANet)获取。
|
计算机视觉
Dynamic ReLU:根据输入动态确定的ReLU
这是我最近才看到的一篇论文,它提出了动态ReLU (Dynamic ReLU, DY-ReLU),可以将全局上下文编码为超函数,并相应地调整分段线性激活函数。与传统的ReLU相比,DY-ReLU的额外计算成本可以忽略不计,但表示能力明显增强,并且实现简单,所以可以非常简单的对我们现有的模型进行修改。
145 0
beamManagement(四)connected mode UL training
上行方向beam训练也有针对PUSCH 和PUCCH的两种机制,先看PUSCH。UE完成初始接入后,上行方向上主要通过Sounding RS(SRS)进行波束训练,SRS配置参数中,usage 设为 beamManagement时,表示用于波束管理的SRS。用于波束管理的SRS resourceset个数,每个resourceset中SRS resource个数和UE能力有关,在38306中定义。
|
算法 调度 索引
beamManagement(三)connected mode DL Beam training
在进入连接态后,DL 可以使用CSI-RS/SSB进行波束训练,上行使用Sounding RS进行波束训练。先看下行波束训练过程,DL 参考信号的RRC层配置结构如下。
|
机器学习/深度学习
fully connected 是什么意思?
Fully connected 是指神经网络中的一种连接方式,也称为全连接层。在全连接层中,所有的神经元都与上一层的所有神经元相连,每个连接都有一个对应的权重。这种连接方式可以使得神经网络学习到更为复杂的特征和模式。在全连接层中,每个神经元都会接收上一层的所有神经元的输出,然后将它们加权求和,再通过一个激活函数输出。全连接层通常用于输出层之前的隐藏层。
458 0
|
机器学习/深度学习 异构计算
【7】nn.module使用与数据增强
【7】nn.module使用与数据增强
183 0
【7】nn.module使用与数据增强
|
数据挖掘 Shell TensorFlow
HW2: Numpy for Multi-Layer Neural Network
HW2: Numpy for Multi-Layer Neural Network
HW2: Numpy for Multi-Layer Neural Network
|
机器学习/深度学习 资源调度 分布式计算
CBAM:Convolutional Block Attention Module--通道+空间混合注意力
提出了**卷积块注意模块(CBAM)**,这是一种用于前馈卷积神经网络的简单而有效的注意模块。==给定一个中间特征图,我们的模块沿两个单独的维度(通道和空间)顺序推断注意力图,然后将注意力图乘以输入特征图以进行自适应特征细化。==因为 CBAM 是一个轻量级的通用模块,它可以无缝集成到任何 CNN 架构中,开销可以忽略不计,并且可以与基础 CNN 一起进行端到端训练。
2019 0
CBAM:Convolutional Block Attention Module--通道+空间混合注意力
图解 FC 层和 CONV 层的 Forward 和 Backward 的区别【读书笔记】
图解 FC 层和 CONV 层的 Forward 和 Backward 的区别【读书笔记】
228 0
图解 FC 层和 CONV 层的 Forward 和 Backward 的区别【读书笔记】
使用nn.Sequential()对象和nn.ModuleList建立模型
使用nn.Sequential()对象和nn.ModuleList建立模型
452 0