文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

终于把神经网络算法搞懂了!

2024-11-29 18:27

关注

神经网络算法作为深度学习的基础模型之一,已经在图像识别、自然语言处理、时间序列预测等多个领域取得了显著的成功。

神经网络算法的基本结构

神经网络算法由输入层、隐藏层和输出层组成,每个层包含若干神经元。

神经元的工作原理

每个神经元接收来自上一层的输入值,这些输入值与神经元的权重相乘并累加得到一个加权和。然后,这个加权和通过一个非线性激活函数进行处理,得到该神经元的输出。

神经元的计算过程可以用以下公式表示:

其中, 是输入, 是对应的权重, 是偏置项, 是加权和。

加权和经过激活函数  后,得到神经元的输出:

激活函数

激活函数用于引入了非线性,从而让神经网络能够处理复杂的非线性关系。

常见的激活函数包括

神经网络的工作过程

神经网络的工作过程可以概括为以下几个关键步骤:前向传播、损失计算、反向传播和权重更新。

通过这些步骤,神经网络从输入数据中学习,并调整权重以提高预测的准确性。

接下来,我们逐步详细解释每一个过程。

前向传播

前向传播是神经网络的预测过程,即从输入数据开始,一层一层地传递计算,最终得到输出结果。

具体步骤

损失函数

损失函数用于衡量神经网络输出(预测值)与实际目标值之间的差异。不同任务通常使用不同的损失函数。

损失函数的输出是一个标量,它代表整个网络对当前数据集的预测误差。

反向传播

反向传播用于计算损失函数对网络中各个参数(权重和偏置)的梯度。

这个过程利用了链式法则,将误差从输出层逐层传播回去,从而更新每一层的参数。

反向传播步骤

  1. 输出层误差
    首先计算输出层的误差,即损失函数对输出层激活值的偏导数其中, 表示输出层的误差, 是激活函数的导数。
  2. 隐藏层误差
    对于隐藏层的神经元,误差由上一层传播过来,通过链式法则计算。
    对于第 l 层,误差为:这里, 是第  层的误差, 是第  层的权重转置矩阵, 是激活函数的导数。
  3. 梯度计算
    反向传播中,我们计算每一层的权重和偏置的梯度

权重更新

通过反向传播计算得到每一层权重和偏置的梯度后,使用优化算法来更新参数。

其更新公式如下

其中, 是学习率,控制每次更新的步长。

案例分享

下面是一个使用神经网络对鸢尾花数据集进行分类的示例代码。

import numpy as np
import tensorflow as tf
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam

# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target.reshape(-1, 1)
encoder = OneHotEncoder()
y_onehot = encoder.fit_transform(y).toarray()
X_train, X_test, y_train, y_test = train_test_split(X, y_onehot, test_size=0.2, random_state=42)

# 构建神经网络模型
model = Sequential([
    Dense(10, input_shape=(4,), activatinotallow='relu'),  # 输入层,4个输入特征,10个神经元
    Dense(10, activatinotallow='relu'),                    # 隐藏层,10个神经元
    Dense(3, activatinotallow='softmax')                   # 输出层,3个输出类别
])


model.compile(optimizer=Adam(learning_rate=0.01), loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=100, batch_size=10, verbose=1)
# 评估模型
loss, accuracy = model.evaluate(X_test, y_test, verbose=0)
print(f'Test Loss: {loss:.3f}, Test Accuracy: {accuracy:.3f}')


来源:程序学员长内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯