当前位置: 首页 > news >正文

【PyTorch】PyTorch中torch.nn模块的全连接层

PyTorch深度学习总结

第十一章 PyTorch中torch.nn模块的全连接层


文章目录

  • PyTorch深度学习总结
  • 前言
  • 一、全连接层的定义和原理
  • 二、在PyTorch中使用全连接层
  • 三、全连接层的参数
  • 四、全连接层在神经网络中的应用
  • 五、 全连接层的优缺点


前言

上文介绍torch.nn模块中的激活函数,本文将进一步介绍torch.nn模块中的全连接层。以下是关于PyTorch全连接层的详细介绍:


一、全连接层的定义和原理

全连接层Fully Connected Layer),也称为线性层,是神经网络中最基本的层之一。在全连接层中,每个输入神经元都与输出神经元相连,这种连接方式意味着输出层的每个神经元的值都是输入层所有神经元值的加权和,再加上一个偏置项。其数学表达式为y=Wx+by = Wx + by=Wx+b,其中 xxx是输入向量,WWW是权重矩阵,bbb 是偏置向量,yyy是输出向量。

例如,假设有一个输入层有3个神经元,输出层有2个神经元的全连接层。那么权重矩阵WWW 的形状就是 2×32\times32×3,偏置向量bbb的形状是 2×12\times12×1。输入向量 xxx的形状是 3×13\times13×1,通过矩阵乘法 WxWxWx 得到一个 2×12\times12×1 的向量,再加上偏置向量bbb,就得到了最终的输出向量yyy


二、在PyTorch中使用全连接层

在PyTorch中,全连接层可以通过 torch.nn.Linear 类来实现。以下是一个简单的示例代码:

import torch
import torch.nn as nn# 定义输入特征的维度
input_size = 10
# 定义输出特征的维度
output_size = 5# 创建一个全连接层
fc_layer = nn.Linear(input_size, output_size)# 生成一个随机输入张量
input_tensor = torch.randn(1, input_size)# 前向传播
output = fc_layer(input_tensor)print("输入张量的形状:", input_tensor.shape)
print("输出张量的形状:", output.shape)

在上述代码中,首先定义了输入特征的维度 input_size 和输出特征的维度 output_size,然后使用 nn.Linear 类创建了一个全连接层 fc_layer。接着生成了一个随机输入张量 input_tensor,并将其传入全连接层进行前向传播,最后打印出输入张量和输出张量的形状。


三、全连接层的参数

全连接层的主要参数是权重矩阵 (W) 和偏置向量 (b)。在PyTorch中,可以通过 fc_layer.weightfc_layer.bias 来访问这些参数。以下是一个示例:

import torch
import torch.nn as nninput_size = 10
output_size = 5
fc_layer = nn.Linear(input_size, output_size)# 访问权重矩阵
weight = fc_layer.weight
# 访问偏置向量
bias = fc_layer.biasprint("权重矩阵的形状:", weight.shape)
print("偏置向量的形状:", bias.shape)

在这个示例中,我们创建了一个全连接层,并分别访问了其权重矩阵和偏置向量,然后打印出它们的形状。

四、全连接层在神经网络中的应用

全连接层在神经网络中有着广泛的应用,特别是在多层感知机(Multilayer Perceptron, MLP)中。多层感知机是一种由多个全连接层组成的神经网络,通常用于分类和回归任务。以下是一个简单的多层感知机的示例代码:

import torch
import torch.nn as nn# 定义一个简单的多层感知机
class MLP(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(MLP, self).__init__()# 第一个全连接层self.fc1 = nn.Linear(input_size, hidden_size)# 激活函数self.relu = nn.ReLU()# 第二个全连接层self.fc2 = nn.Linear(hidden_size, output_size)def forward(self, x):# 第一个全连接层的输出out = self.fc1(x)# 应用激活函数out = self.relu(out)# 第二个全连接层的输出out = self.fc2(out)return out# 定义输入特征的维度
input_size = 10
# 定义隐藏层的维度
hidden_size = 20
# 定义输出特征的维度
output_size = 5# 创建多层感知机实例
mlp = MLP(input_size, hidden_size, output_size)# 生成一个随机输入张量
input_tensor = torch.randn(1, input_size)# 前向传播
output = mlp(input_tensor)print("输入张量的形状:", input_tensor.shape)
print("输出张量的形状:", output.shape)

在这个示例中,我们定义了一个简单的多层感知机类 MLP,它包含两个全连接层和一个激活函数 ReLU。通过 forward 方法实现了前向传播过程,最后将一个随机输入张量传入多层感知机进行前向传播,并打印出输入张量和输出张量的形状。

五、 全连接层的优缺点

  • 优点
    - 表达能力强:全连接层可以学习输入和输出之间的复杂非线性关系,能够处理各种类型的任务。
    - 易于实现:在PyTorch等深度学习框架中,全连接层的实现非常简单,只需要使用 nn.Linear 类即可。
  • 缺点
    - 参数数量多:全连接层的参数数量与输入和输出的维度成正比,当输入和输出的维度较大时,参数数量会急剧增加,容易导致过拟合。
    - 计算量大:由于全连接层需要进行大量的矩阵乘法运算,因此计算量较大,训练时间较长。
http://www.dtcms.com/a/271497.html

相关文章:

  • C++每日刷题 day2025.7.09
  • 备受期待的 MMORPG 游戏《侍魂R》移动端现已上线 Sui
  • RK3588 buildroot 解决软件包无法下载
  • 用户查询优惠券之缓存击穿
  • RAC-CELL(小区)处理
  • Ubuntu连接不上网络问题(Network is unreachable)
  • 国产航顺HK32F030M: 串口调试debug,重定向c库函数printf到串口,重定向后可使用printf函数
  • 记一次接口优化历程 CountDownLatch
  • C语言模块化编程思维以及直流电机控制(第四天)
  • 深度学习——损失函数
  • 【使用Flask基于PaddleOCR3.0开发一个接口 调用时报错RuntimeError: std::exception】
  • JVM调优实战指南:让Java程序性能飞升的奥秘
  • PanTS: The Pancreatic Tumor Segmentation Dataset
  • 使用anaconda创建基础环境
  • 数据分析框架和方法
  • 数据分析-名词
  • pip 安装加速指南:配置国内镜像源(中国科技大学、清华、阿里云等)
  • Java武林:虚拟机之道 第七章:秘籍解析 - JVM调优参数
  • 经验分享-没有xcode也可以上传App Store Connect
  • S7-1500——(一)从入门到精通1、基于TIA 博途解析PLC程序结构(一)
  • c语言中的数组II
  • 景观桥 涵洞 城门等遮挡物对汽车安全性的影响数学建模和计算方法,需要收集那些数据
  • 周立功汽车软件ZXDoc深度解析:新能源汽车开发新基建的破局之道
  • java 语法类新特性总结
  • 【王树森推荐系统】排序05:排序模型的特征
  • 计蒜客T3473丑数、Leetcode2401最长优雅子数组、Leetcode167两数之和、Leetcode581最短无序连续子数组
  • 深度帖:浏览器的事件循环与JS异步
  • 【教程】基于GNN的药物相互作用网络中的链接预测
  • 数据一致性解决方案总结
  • Linux驱动04 --- 网络编程TCP客户端