[深度学习] 前馈神经网络

前馈神经网络(Feedforward Neural Network, FFNN)是人工神经网络中最基本的类型,也是许多复杂神经网络的基础。它包括一个输入层、一个或多个隐藏层和一个输出层。以下是详细介绍:

1. 结构

1. 输入层(Input Layer)
  • 包含与输入数据特征数相同的神经元。
  • 直接接收输入数据,每个神经元对应一个输入特征。
2. 隐藏层(Hidden Layers)
  • 包含一个或多个隐藏层,每层包含若干神经元。
  • 每个神经元与前一层的所有神经元相连接。
2.1. 全连接层(Dense Layer)

定义:每个神经元与前一层的所有神经元连接。

作用

  • 进行线性变换:在这里插入图片描述
    ,其中 W(l) 是权重矩阵, a(l−1) 是前一层的激活值, b(l)是偏置。
  • 通过激活函数进行非线性变换:在这里插入图片描述
    常见激活函数
  • ReLU(Rectified Linear Unit)
  • Sigmoid
  • Tanh

示例代码

tf.keras.layers.Dense(64, activation='relu')
2.2. 激活函数层(Activation Layer)

定义:非线性函数,应用于每个神经元的输出。

作用

  • 引入非线性,使网络能够学习复杂的模式。

常见激活函数

  • ReLU:在这里插入图片描述
  • Sigmoid:在这里插入图片描述
  • Tanh:在这里插入图片描述
    示例代码
tf.keras.layers.Activation('relu')
2.3. Dropout层

定义:在训练过程中随机丢弃一定比例的神经元。

作用

  • 防止过拟合,增强模型的泛化能力。

参数

  • rate:丢弃概率(0到1之间)。

示例代码

tf.keras.layers.Dropout(0.5)
2.4. 批量归一化层(Batch Normalization Layer)

定义:在每个批次中标准化激活值。

作用

  • 加速训练,稳定学习过程。
  • 防止过拟合,增强模型的鲁棒性。

示例代码

tf.keras.layers.BatchNormalization()
2.5. 高斯噪声层(Gaussian Noise Layer)

定义:在训练过程中向输入添加高斯噪声。

作用

  • 增强模型的鲁棒性,防止过拟合。

参数

  • stddev:噪声的标准差。

示例代码

tf.keras.layers.GaussianNoise(0.1)
2.6. 高斯丢弃层(Gaussian Dropout Layer)

定义:在训练过程中以高斯分布的比例随机丢弃神经元。

作用

  • 类似于Dropout层,但使用高斯分布的比例来丢弃神经元。

参数

  • rate:丢弃概率。

示例代码

tf.keras.layers.GaussianDropout(0.5)
3. 输出层(Output Layer)
  • 包含与输出要求相匹配的神经元数量。
  • 输出神经元的数量取决于具体的任务,如回归任务可能只有一个输出神经元,分类任务根据类别数设置相应的神经元数。
  • 使用适合任务的激活函数,如Sigmoid用于二分类,Softmax用于多分类,线性激活函数用于回归。

2. 工作原理

  1. 前向传播(Forward Propagation)

    • 输入数据通过网络层层传播,每层神经元计算加权和(加上偏置项),并通过激活函数进行非线性变换。
    • 公式:在这里插入图片描述
      ,其中z(l)是第l层的线性组合,W(l)是权重矩阵,a(l−1)是前一层的输出,b(l)是偏置项。
    • 激活函数:在这里插入图片描述
  2. 损失函数(Loss Function)

    • 定义模型预测值与真实值之间的差异。
    • 常用的损失函数包括均方误差(MSE)用于回归,交叉熵损失(Cross-Entropy Loss)用于分类。
    • 公式:对于二分类问题,交叉熵损失函数为 在这里插入图片描述
  3. 反向传播(Backward Propagation)

    • 通过梯度下降优化算法来更新权重和偏置,以最小化损失函数。
    • 计算损失函数相对于每个参数的梯度,并反向传播这些梯度,通过链式法则逐层更新权重和偏置。
    • 公式:权重更新 在这里插入图片描述
      ,偏置更新 在这里插入图片描述
      ,其中 η 是学习率。

3. 特点和应用

  • 特点

    • 前馈神经网络是有向无环网络(DAG),数据从输入层通过隐藏层一直流向输出层,不存在反馈循环。
    • 容易实现和理解,是深度学习模型的基础。
    • 通常通过增加隐藏层数量和神经元数量来提高模型的表达能力。
  • 应用

    • 适用于各种监督学习任务,包括回归、二分类和多分类任务。
    • 用于预测、分类、模式识别等领域。
    • 可以与其他技术结合,如卷积神经网络(CNN)和循环神经网络(RNN)等,用于处理图像、文本、时序数据等复杂任务。

示例代码

下面是一个更复杂的前馈神经网络示例代码,包含多种不同类型的隐藏层,包括密集层(Dense Layer)、批量归一化层(Batch Normalization)、Dropout层、和高斯噪声层(Gaussian Noise Layer)。

示例代码
import tensorflow as tf
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.preprocessing import StandardScaler

# 生成示例数据
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 构建模型
model = tf.keras.Sequential([
    tf.keras.layers.Dense(128, activation='relu', input_shape=(X_train.shape[1],)),
    tf.keras.layers.BatchNormalization(),  # 批量归一化层
    tf.keras.layers.Dropout(0.5),  # Dropout层
    
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dropout(0.5),
    
    tf.keras.layers.Dense(32, activation='relu'),
    tf.keras.layers.GaussianNoise(0.1),  # 高斯噪声层
    tf.keras.layers.BatchNormalization(),
    
    tf.keras.layers.Dense(16, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    
    tf.keras.layers.Dense(1, activation='sigmoid')  # 输出层,适用于二分类任务
])

# 编译模型
model.compile(optimizer='adam',
              loss='binary_crossentropy',  # 二分类交叉熵损失
              metrics=['accuracy'])

# 训练模型
history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)

# 评估模型
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print(f'Test Accuracy: {test_accuracy}')

# 用于预测的新数据
new_data = np.random.rand(1, 20)  # 示例数据
new_data = scaler.transform(new_data)
prediction = model.predict(new_data)
print(f'Prediction: {prediction}')

代码解释

  1. 数据生成

    • 使用make_classification函数生成一个二分类的数据集,其中有1000个样本,每个样本有20个特征。
    • 将数据集分为训练集和测试集。
  2. 数据标准化
    使用StandardScaler对数据进行标准化处理,使每个特征的均值为0,方差为1。

  3. 模型构建

    • 第一层:全连接层(Dense)有128个神经元,激活函数为ReLU。

    • 第二层:批量归一化层(BatchNormalization),有助于加速训练和稳定性。

    • 第三层:Dropout层,丢弃率为0.5,防止过拟合。

    • 第四层:全连接层,有64个神经元,激活函数为ReLU。

    • 第五层:批量归一化层。

    • 第六层:Dropout层,丢弃率为0.5。

    • 第七层:全连接层,有32个神经元,激活函数为ReLU。

    • 第八层:高斯噪声层(GaussianNoise),添加标准差为0.1的高斯噪声,增加模型鲁棒性。

    • 第九层:批量归一化层。

    • 第十层:全连接层,有16个神经元,激活函数为ReLU。

    • 第十一层:批量归一化层。

    • 输出层:全连接层,有1个神经元,激活函数为Sigmoid,适用于二分类任务。

  4. 模型编译与训练

    • 使用Adam优化器,二分类交叉熵损失函数,准确率作为评估指标。
    • 训练模型,设置训练轮数为50,每批次训练样本数为32,20%的数据用于验证。
  5. 模型评估与预测

    • 评估测试集上的模型表现,打印测试准确率。
    • 对新数据进行预测,展示预测结果。

这个示例代码展示了如何在前馈神经网络中使用不同类型的隐藏层,以增强模型的表达能力和稳定性。可以根据需要进一步调整模型结构和参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/753380.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

入门网络安全工程师要学习哪些内容

大家都知道网络安全行业很火,这个行业因为国家政策趋势正在大力发展,大有可为!但很多人对网络安全工程师还是不了解,不知道网络安全工程师需要学什么?知了堂小编总结出以下要点。 网络安全工程师是一个概称,学习的东西很多&…

Flexsim物流仿真入门-利用网络节点控制行走路线

在布局优化过程中,往往叉车,操作人员的搬运,是会按照一定的行走路线进行的,这就需要我们进行节点的设计,以此来实现特定路径的行走。 在构建过程中,这里将会以案例的形式进行讲解说明。 1)构建…

【Linux】进程间通信_3

文章目录 七、进程间通信1. 进程间通信分类命名管道 未完待续 七、进程间通信 1. 进程间通信分类 命名管道 管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用FIFO文件…

操作系统之《死锁与银行家算法》【知识点+详细解题过程】

知识点: 1、什么是死锁?(别名"三角恋",我喜欢你你喜欢他他喜欢我,明明都单身但是就是‘占有’不了) 一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法…

vue-cli的搭建过程

一、创建一个vue2的项目 二、创建成功后删除这三个文件 三、新建一个App.vue文件 四、在文件中添加这一段话 五、打开命令框输入指令下载router路由 六、新建一个router目录,新建index.js文件 七、导入你的路由,进行配置 打开命令行工具,进入…

【Python Tips】创建自己的函数包并安装进Anaconda,像引入标准包一样直接import导入

目录 一、引言 二、方法步骤 步骤一:创建包目录结构 步骤二:配置__init__.py文件 步骤三:文件夹外配置setup.py文件 步骤四:终端Pip安装 三、结尾 一、引言 在编写项目代码的时候,有些自定义功能的函数是可以复用的。…

Java面向对象特性

Java继承: 继承的概念: 在Java中,继承(inheritance)是面向对象编程的一个重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承&#xff0c…

MySQL高级-SQL优化- order by 优化(尽量使用覆盖索引、注意联合索引创建的规则、增大排序缓冲区大小)

文章目录 0、order by优化原则1、Using filesort2、Using index3、连接数据库4、查看索引5、删除索引6、按照年龄进行排序7、执行计划 order by age8、执行计划 order by age,phone9、创建联合索引 (age,phone)10、再次执行计划 order by age11、再次执行计划 order by age,pho…

SpringMVC处理器映射器HandlerMapping详解

目录 一、前言 二、initHandlerMappings 三、处理器映射器架构 策略接口 请求链 模版类 四、RequestMappingHandlerMapping的初始化 HandlerMethod映射器模版类的初始化 AbstractHandlerMethodMapping.MappingRegistry:内部类注册中心 五、Reques…

从菌群代谢到健康影响——认识肠道丙酸和丁酸

谷禾健康 短链脂肪酸这一词经常出现在谷禾的文章和报告中,那你真的了解短链脂肪酸吗?短链脂肪酸(SCFA)主要是肠道微生物群在结肠内通过发酵碳水化合物(包括膳食和内源性碳水化合物,主要是抗性淀粉和膳食纤维)和一些微生物可利用的蛋白质而产生…

一个人 三个月 干了二十万

相信很多人是被这个标题吸引进来的,但我并不是标题党,我也很讨厌标题党,这篇文章也不在乎流量,更多的是想记录下。 出来创业三个多月了,给大家汇报一下这段时间的业绩吧。一个人,三个多月,干了…

线性图标绘制指南:从基础到精通

图标在生活中随处可见。相比文字来说,图标可以让人在更短的时间内认知并了解信息,并且大大提升信息的视觉美观性,增加设计的艺术感染力。在用户界面中使用图标,是一种用户熟知的设计模式。而线性图标是通过提炼图形轮廓&#xff0…

TIOBE 6月榜单出炉!编程语言地位大洗牌,谁才是王?

C历史上首次超越C!!! TIOBE 公布了 2024 年 6 月编程语言的排行榜:https://www.tiobe.com/tiobe-index/ 排行榜 以下列出的语言代表了第51至第100名。由于它们之间的差异相对较小,编程语言仅以字母顺序列出。 ABC, A…

ubuntu16.04上搭建qt开发环境

安装qt 下载qt在linux下的安装包qt-opensource-linux-x64-5.8.0.run;将安装包拷贝到ubuntu16.04上;执行如下命令进行安装,注意:安装前先断开虚拟机的网络,这样就避免了注册账户的操作 基本上一路按“next”键&#xf…

使用青否数字人直播软件有哪些优势?

使用青否数字人主播主要具有以下优势: 1、降低直播门槛 在垂直程度较高、专业度更强的行业,面对相关品牌们“专业主播难培养”的问题。数字人主播的学习技能和灵活优势尽显。通过数字人直播可以借助知识库配置与AI能力,快速获得技术性知识&am…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 螺旋矩阵填数(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

c语言--指针

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理c语言中指针的相关知识点。 指针概念 指针存储的就是数据的地址。 直观理解: 李华家是北洋路130号1单元101 用变量处理数据: 我们去李华家拿数据。 用指针处理数据: 我们去北洋路130号1单元101拿数据…

石墨舟氮气柜的特点和使用要求介绍

石墨舟是一种在半导体、太阳能光伏等高科技产业中广泛使用的专用工具,主要由高纯度石墨材料制成。它的形状通常像一只船,因此得名“石墨舟”。石墨舟主要用于承载硅片或其他基板材料通过各种高温处理过程,是制造半导体器件和太阳能电池片的关…

二叉树的方法

目录 一、二叉树的定义 ​编辑 二、二叉树的创建 三、二叉树的遍历 1、前序遍历 2、中序遍历 3、后序遍历 4、层序遍历 四、二叉树遍历方法的使用 五、二叉树的操作 1、节点的个数 2、叶子节点的个数 3、第k层节点的个数 4、二叉树的高度 5、检查值为value的元素…

「2024抢先看」6款免费的ai变声器,助你开麦就变声

你是否也曾想模仿电视剧中的明星说话,或者想像泰勒一样有着独特的嗓音呢?通过免费版ai变声器,你可以轻松实现实时变声,将你的声音转换为专业且动听的声音,让身边的朋友对你刮目相看。在本文中,小编将分享20…