前馈神经网络——最基本的神经网络架构

ops/2025/2/1 2:00:31/

前馈神经网络(Feedforward Neural Network, FNN) 是一种基本的人工神经网络类型,其结构简单,广泛应用于各种机器学习任务。它由多个层次组成,包括输入层、隐藏层和输出层。FNN 中的每一层与下一层的神经元之间是完全连接的,但不同层之间的神经元不相互连接。

FNN 以其数据流动方式来命名——前馈,意味着信息从输入层开始,经过一系列的隐藏层,最终输出结果,不存在任何循环或反馈连接。与递归神经网络(RNN)或卷积神经网络(CNN)相比,FNN 是最基础、最简单的神经网络结构。

FNN 的基本结构

  1. 输入层(Input Layer):接收外部数据,每个神经元代表一个特征。
  2. 隐藏层(Hidden Layers):通过多层神经元进行数据处理,学习特征之间的关系。每一层神经元通过权重和激活函数处理输入,并将结果传递到下一层。
  3. 输出层(Output Layer):生成最终结果,根据任务类型(分类、回归等)输出相应的预测值。

FNN 的特点

  1. 无反馈循环

    • FNN 是前馈型网络,信息从输入流向输出,没有反馈环路或递归连接。
  2. 层次结构

    • FNN 由多个层次构成,包括输入层、隐藏层和输出层。每个神经元与上一层的所有神经元相连接。
  3. 非线性激活函数

    • 每个神经元通过激活函数(如 ReLU、sigmoid、tanh)处理其输入,增加网络的非线性,使其能够学习更复杂的模式。
  4. 权重和偏置

    • 每一层的连接都有相应的权重和偏置,经过训练优化,以最小化预测误差。权重通过梯度下降算法(如 Adam、SGD)进行更新。
  5. 端到端训练

    • FNN 通过反向传播算法进行训练。输入数据通过前向传播进入输出层,计算误差后,反向传播梯度并更新参数。
  6. 适用于各种任务

    • FNN 可应用于分类、回归、特征提取、生成等多种任务,能够处理结构化数据、文本数据、时间序列等多种类型的数据。
  7. 过拟合的风险

    • 如果网络层数过多或参数过多,容易产生过拟合现象。为防止过拟合,常使用正则化技术,如 dropout、L2 正则化等。
  8. 训练过程较为直观

    • 相较于递归神经网络(RNN)和卷积神经网络(CNN),FNN 的训练过程较为直观,因为其结构简单,计算量相对较小。

FNN 的应用

  • 分类问题:通过输入特征,预测所属类别,例如图像分类、文本分类、情感分析等。
  • 回归问题:预测连续值,例如房价预测、股市趋势预测等。
  • 函数逼近:FNN 可以近似任何连续函数,因此常用于预测问题。
  • 数据降维:通过学习数据的低维表示,FNN 可用于数据压缩和特征提取。

例子:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
import matplotlib.pyplot as pltclass FeedforwardNN(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(FeedforwardNN, self).__init__()self.fc1 = nn.Linear(input_size, hidden_size)self.relu = nn.LeakyReLU(negative_slope=0.01)  # 使用 LeakyReLUself.fc2 = nn.Linear(hidden_size, hidden_size)  # 增加一个隐藏层self.fc3 = nn.Linear(hidden_size, output_size)self.dropout = nn.Dropout(p=0.5)  # 加入 Dropout 防止过拟合def forward(self, x):x = self.fc1(x)x = self.relu(x)x = self.dropout(x)  # Dropoutx = self.fc2(x)x = self.relu(x)x = self.fc3(x)return x# 重新初始化网络和优化器
input_size = 10
hidden_size = 64  # 更大的隐藏层
output_size = 2model = FeedforwardNN(input_size, hidden_size, output_size)# 使用 Adam 优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)# 使用 CrossEntropyLoss 作为损失函数
criterion = nn.CrossEntropyLoss()# 创建数据
X_train = torch.randn(100, input_size)
y_train = torch.randint(0, 2, (100,))train_dataset = TensorDataset(X_train, y_train)
train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True)# 训练模型
num_epochs = 100
for epoch in range(num_epochs):for inputs, labels in train_loader:optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')# 测试模型
X_test = X_train[:10]  # 选择前10个训练数据样本进行预测
y_test = y_train[:10]  # 选择前10个训练数据标签作为真实标签
model.eval()
with torch.no_grad():predictions = model(X_test)predicted_labels = torch.argmax(predictions, dim=1)# 可视化结果
plt.figure(figsize=(10, 6))
plt.plot(y_test.numpy(), label='True Labels', marker='o', linestyle='--', color='b')
plt.plot(predicted_labels.numpy(), label='Predicted Labels', marker='x', linestyle='-', color='r')
plt.xlabel('Sample Index')
plt.ylabel('Label')
plt.title('True vs Predicted Labels')
plt.legend()
plt.show()


http://www.ppmy.cn/ops/154629.html

相关文章

【S32K3 RTD LLD篇7】K344中心对齐PWM中心点触发ADC BCTU采样

【S32K3 RTD LLD篇7】K344中心对齐PWM中心点触发ADC BCTU采样 一,文档简介二,中心对齐PWM中心点触发ADC原理2.1 如何生成中心对齐的PWM2.2 如何生成PWM中心点触发标志 三, 软件配置与实现3.1 Demo CT 模块配置3.1.1 引脚配置3.1.2 时钟配置3.…

图片导入到ppt之后再打印就糊掉了如何解决?

最近在做一个 p o s t e r poster poster的工作是用 P P T PPT PPT做的,结果从 v i s i o visio visio导入到 P P T PPT PPT中还是高清的,打印就糊掉了,注意如果是导出的话图片还是矢量的,但是由于有纸张的要求,所以必…

机器人介绍

以下是关于机器人的介绍: 定义 机器人是一种能够自动执行任务的机器系统,它集成了机电、机构学、材料学及仿生学等多个学科技术,可以接受人类指挥,运行预先编排的程序,或根据人工智能技术制定的原则纲领行动&#xf…

C语言------数组从入门到精通

1.一维数组 目标:通过思维导图了解学习一维数组的核心知识点: 1.1定义 使用 类型名 数组名[数组长度]; 定义数组。 // 示例: int arr[5]; 1.2一维数组初始化 数组的初始化可以分为静态初始化和动态初始化两种方式。 它们的主要区别在于初始化的时机和内存分配的方…

使用 Docker Compose 一键启动 Redis、MySQL 和 RabbitMQ

目录 一、Docker Compose 简介 二、服务配置详解 1. Redis 配置 2. MySQL 配置 3. RabbitMQ 配置 三、数据持久化与时间同步 四、部署与管理 五、总结 目录挂载与卷映射的区别 现代软件开发中,微服务架构因其灵活性和可扩展性而备受青睐。为了支持微服务的…

TCP/IP 协议:互联网通信的基石

TCP/IP 协议:互联网通信的基石 引言 TCP/IP协议,全称为传输控制协议/互联网协议,是互联网上应用最为广泛的通信协议。它定义了数据如何在网络上传输,是构建现代互联网的基础。本文将深入探讨TCP/IP协议的原理、结构、应用以及其在互联网通信中的重要性。 TCP/IP 协议概述…

穿心莲内酯(andrographolide)生物合成CYP72-文献精读106

Two CYP72 enzymes function as Ent-labdane hydroxylases in the biosynthesis of andrographolide in Andrographis paniculata 两种CYP72酶在穿心莲(Andrographis paniculata)中作为Ent-labdane羟化酶,在穿心莲内酯(andrograp…

A7. Jenkins Pipeline自动化构建过程,可灵活配置多项目、多模块服务实战

服务容器化构建的环境配置构建前需要解决什么下面我们带着问题分析构建的过程:1. 如何解决jenkins执行环境与shell脚本执行环境不一致问题?2. 构建之前动态修改项目的环境变量3. 在通过容器打包时避免不了会产生比较多的不可用的镜像资源,这些资源要是不及时删除掉时会导致服…