人工神经网络ANN
- 1、引言
- 2、人工神经网络(ANN)
- 2.1 定义
- 2.1.1 定义
- 2.1.2 应用场景
- 2.2 核心原理
- 2.3 实现方式
- 2.4 算法公式
- 2.5 代码示例
- 3、总结
1、引言
小屌丝:鱼哥,看新闻没?
小鱼:新闻天天看,啥事大惊小怪的。
小屌丝:就是,YL总统的事情
小鱼:…你关心的可真够远的啊。
小屌丝:这很震惊的啊
小鱼:你啊, 先关心关心你的深度学习领域知识吧。
小屌丝:额… 这…
小鱼:ANN 了解吗?
小屌丝:不了解
小鱼:KNN了解吗?
小屌丝:不了解
小鱼:你看,这都不了解, 还不赶紧学习学习。
小屌丝:哦,好哦。
小屌丝:不对,这总感觉哪里怪怪的。
小鱼:没有,你赶紧学习吧
小屌丝:这… 啥情况
2、人工神经网络(ANN)
2.1 定义
2.1.1 定义
人工神经网络是由大量的节点(或称为“神经元”)组成的网络结构,这些节点之间通过“突触”相互连接。
每个神经元可以接收输入,对输入进行加权和,然后通过一个非线性激活函数生成输出。
通过这种方式,ANN能够捕捉和表示复杂的输入输出关系。
2.1.2 应用场景
ANN应用广泛,包括但不限于以下几个领域:
- 图像识别和处理:如人脸识别、物体检测。
- 语音识别:如智能助手的语音命令解析。
- 自然语言处理:如机器翻译、情感分析。
- 预测模型:如股票市场预测、天气预报。
- 游戏和仿真:如自动驾驶汽车的模拟训练。
2.2 核心原理
ANN的核心原理基于“学习”,即通过调整网络中的突触权重来最小化模型输出和实际输出之间的误差。
这一过程通常通过一个叫做反向传播(Backpropagation)的算法来完成,配合梯度下降(Gradient Descent)或其变体进行权重的优化更新
2.3 实现方式
实现ANN通常需要以下几个步骤:
- 初始化网络:设计网络结构(输入层、隐藏层、输出层的节点数)并随机初始化权重。
- 前向传播:输入数据在网络中前向传递,每个节点计算其输出。
- 计算损失:根据网络输出和实际值计算损失函数。
- 反向传播:根据损失函数计算每个权重的梯度,并更新权重。
- 重复2-4步骤:直到满足终止条件(如迭代次数、误差阈值等)。
2.4 算法公式
一个基本的ANN模型,其输出
(
y
)
(y)
(y)可以表示为:
[
y
=
f
(
∑
i
=
1
n
w
i
⋅
x
i
+
b
)
]
[y = f(\sum_{i=1}^{n} w_i \cdot x_i + b)]
[y=f(i=1∑nwi⋅xi+b)]
其中,
(
w
i
)
(w_i)
(wi)是权重,
(
x
i
)
(x_i)
(xi)是输入,
(
b
)
(b)
(b)是偏置项,
(
f
)
(f)
(f)是激活函数。
2.5 代码示例
# -*- coding:utf-8 -*-
# @Time : 2024-04-05
# @Author : Carl_DJ
# 导入必要的库
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
# 生成模拟数据
# 二分类问题
x_train = np.random.random((1000, 20)) # 训练数据:1000个样本,每个样本20个特征
y_train = np.random.randint(2, size=(1000, 1)) # 训练标签:1000个样本的标签(0或1)
y_train = to_categorical(y_train) # 将标签转换为分类编码
# 定义模型
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=20)) # 第一层密集连接层,有64个神经元,激活函数为ReLU
model.add(Dense(64, activation='relu')) # 第二层密集连接层,有64个神经元,激活函数为ReLU
model.add(Dense(2, activation='softmax')) # 输出层,有2个神经元对应两个类别,使用softmax激活函数
# 编译模型
model.compile(optimizer='adam', # 优化器使用Adam
loss='categorical_crossentropy', # 损失函数使用分类交叉熵
metrics=['accuracy']) # 评估模型性能的指标使用准确率
# 训练模型
model.fit(x_train, y_train, epochs=10, batch_size=32) # 训练模型,迭代10次,每批次32个样本
# 模型总结
model.summary()
解析
-
导入库:首先,我们导入了必要的库,包括numpy用于数据操作,keras中的Sequential模型构建ANN,以及Dense用于构建密集连接层。
-
生成模拟数据:为了简化,这里我们生成了一些随机数据作为训练数据和标签。实际应用中,这些数据将来自于真实的数据集。
-
定义模型:使用Sequential模型顺序堆叠各层。模型的第一层需要指定input_dim,即输入数据的维度。接下来添加了两个密集连接层,每层都使用ReLU激活函数。最后,输出层的神经元数量应与分类任务的类别数量相匹配,在本例中为2,使用softmax函数进行激活以进行分类。
-
编译模型:在编译模型时,我们指定优化器(adam)、损失函数(categorical_crossentropy)和评价指标(accuracy)。
-
训练模型:使用fit方法训练模型,指定训练数据、标签、训练的轮次(epochs)和每批次的样本数(batch_size)。
-
模型结果统计最后,summary方法提供了模型的架构概览,包括每层的名称、类型、输出形状和参数数量。
3、总结
人工神经网络作为深度学习的基石,其灵活性和强大的表达能力使其成为解决复杂非线性问题的有力工具。
通过不断优化和改进,ANN在各个领域的应用将更加广泛,性能也将更加出色。
不过,也需要注意的是,ANN模型的训练需要大量的数据和计算资源,并且模型的解释性相对较差,这些都是目前深度学习领域面临的挑战。
我是小鱼:
- CSDN 博客专家;
- 阿里云 专家博主;
- 51CTO博客专家;
- 企业认证金牌面试官;
- 多个名企认证&特邀讲师等;
- 名企签约职场面试培训、职场规划师;
- 多个国内主流技术社区的认证专家博主;
- 多款主流产品(阿里云等)评测一等奖获得者;
关注小鱼,学习【机器学习】&【深度学习】领域的知识。