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

news/2024/7/7 21:47:31 标签: 深度学习, 神经网络, 人工智能

前馈神经网络(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.niftyadmin.cn/n/5535497.html

相关文章

tensorboard安装失败,怎么办?

标题tensorboard未安装报错,如下图所示: 解决方法尝试: 这些方法都可以试一下,因为每个人的情况可能不同,成功的方法也不同。 1、在pycharm中Pip失败 2、 在pycharm中Conda 失败 3、在Pycharm中换清华源失败 4、直接…

99. 岛屿数量

题目描述:给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 输入描述&#xff1a…

ChatGPT-4o医学应用、论文撰写、数据分析与可视化、机器学习建模、病例自动化处理、病情分析与诊断支持

2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5,将人工智能的发展推向了一个新的高度。2023年11月7日,OpenAI首届开发者大会被称为“科技界的春晚”,吸引了全球广大…

《ClipCap》论文笔记(下)

原文出处 [2111.09734] ClipCap: CLIP Prefix for Image Captioning (arxiv.org) 原文翻译 接上篇 《ClipCap》论文笔记(上)-CSDN博客 4. Results Datasets.我们使用 COCO-captions [7,22]、nocaps [1] 和 Conceptual Captions [33] 数据集。我们根…

python调用c++ ctype list传数组与for if 列表推导式

python调用c ctype list传数组 关于ctype与python list的转换很简单,大家记住下面两条就够用了,后面是练习 list传进C数组 import numpy as np from ctypes import * mylist [101, -101, ..., 101, -101]##your list mycbytearray (c_byte * len(my…

[数据集][目标检测]刀具匕首持刀检测数据集VOC+YOLO格式8810张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8810 标注数量(xml文件个数):8810 标注数量(txt文件个数):8810 标注…

ffmpeg下载/配置环境/测试

一、下载 1、访问FFmpeg官方网站下载页面:FFmpeg Download Page; 2、选择适合Windows的版本(将鼠标移动到windows端)。通常,你会找到“Windows builds from gyan.dev”或者“BtbN GitHub Releases”等选项&#xff0…

嘤嘤不想打怪兽喵

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 嘤嘤会使用一种魔法:将血量…