【机器学习实战】10分钟学会Python怎么用NN神经网络进行分类(十一)

简介: 【机器学习实战】10分钟学会Python怎么用NN神经网络进行分类(十一)

[toc]

1 前言

神经网络(Neural network,NN)机器学习是一种基于人工神经网络的机器学习方法,它模拟了人类神经系统的工作原理。神经网络是由多个人工神经元组成的网络结构,每个神经元都接收输入信号、进行计算并生成输出信号。

1.1 神经网络的介绍

首先了解一下神经元的概念:

神经元(Neuron)是神经网络的基本单元,模拟了生物神经系统中的神经元的功能。每个神经元接收来自其他神经元的输入信号,并通过计算生成输出信号。神经元具有权重(weights)偏置(bias),它们用于调节输入信号的影响力。

层(Layer)是神经网络中神经元的组织方式。神经网络通常由多个层次组成,包括输入层、隐藏层和输出层。输入层接收外部输入数据,隐藏层在输入层和输出层之间进行信息处理,输出层产生最终的输出结果。隐藏层可以有多层,每一层都由多个神经元组成。

神经网络(Neural Network)是由多个神经元和层次组成的网络结构。神经网络中的神经元通过连接(connections)相互关联,并进行信息传递和处理。每个神经元的输出作为其他神经元的输入,并通过权重和激活函数进行计算。神经网络通过调整权重来学习输入和输出之间的复杂关系。神经网络的层之间存在前向连接和反向连接。在前向传播过程中,输入信号从输入层开始向前传播,经过隐藏层的处理,最终到达输出层。在反向传播过程中,通过比较网络输出与目标输出的差异,计算梯度并反向传播,以更新神经网络中的权重,从而使得网络的输出更接近目标输出。

优点:

  • 学习能力强:神经网络能够通过训练学习复杂的非线性关系,具有很强的模式识别和特征提取能力。它可以从大量数据中自动学习并发现隐藏在数据中的规律。
  • 适应性好:神经网络对于输入数据的变化和噪声具有一定的容忍度,能够适应不同类型的数据和问题。它可以处理多种数据类型,如图像、文本、声音等,并且在不同领域具有广泛的应用。
  • 并行处理能力:神经网络中的神经元和层次之间可以进行并行计算,充分利用多核处理器和图形处理器等硬件设备的并行处理能力,提高计算效率和速度。
  • 泛化能力强:经过训练的神经网络具有较强的泛化能力,即可以对未见过的数据进行准确预测和分类。它能够从训练数据中学习到一般规律,并将这些规律应用于新的数据。

缺点:

  • 数据需求量大:神经网络通常需要大量的训练数据来达到较好的性能。对于某些领域和任务,获取大规模的标注数据可能是困难和昂贵的。
  • 训练时间长:训练神经网络需要较长的时间,特别是在深层网络和大规模数据集的情况下。对于复杂的网络结构和大规模的数据,训练过程可能需要数小时甚至数天。
  • 参数调节困难:神经网络中的参数数量较多,调节和优化这些参数需要一定的经验和技巧。不合适的参数选择可能导致网络性能下降或过拟合现象的发生。
  • 解释性差:由于神经网络的复杂性和黑盒特性,它们往往难以提供可解释的结果。神经网络往往被视为一种黑盒模型,难以解释其决策过程和内部工作原理。

1.2 神经网络的应用

区别于基础机器学习算法,神经网络算法可以泛化到深度学习,因此可应用的领域有很多:

  1. 计算机视觉:神经网络在图像识别、目标检测、人脸识别、图像生成和图像分割等计算机视觉任务中被广泛应用。例如,卷积神经网络(CNN)在图像分类任务中取得了重大突破,如使用深度学习进行图像分类的应用。
  2. 自然语言处理:神经网络在文本分类、情感分析、机器翻译、语音识别和自然语言生成等自然语言处理任务中具有重要作用。递归神经网络(RNN)变压器网络(Transformer)是常用的神经网络架构。
  3. 语音和音频处理:神经网络在语音识别、语音合成、音频分类和音乐生成等领域发挥着关键作用。循环神经网络(RNN)卷积神经网络(CNN)在语音和音频处理中得到广泛应用。
  4. 强化学习:神经网络在强化学习中用于构建智能体(Agent),使其能够通过与环境的交互学习最优策略。深度强化学习算法如深度Q网络(DQN)和策略梯度方法在游戏玩法、机器人控制和自动驾驶等领域取得了显著进展。
  5. 推荐系统:神经网络可用于构建个性化推荐系统,根据用户的历史行为和兴趣进行推荐。深度学习模型如卷积神经网络(CNN)和循环神经网络(RNN)在推荐系统中被广泛应用。
  6. 医疗和生物学:神经网络在医学图像分析、疾病诊断、药物研发和基因组学等医疗和生物学领域具有重要应用。深度学习模型被用于解析医学图像,如肿瘤检测和病变分析。
  7. 金融和投资:神经网络可应用于金融市场预测、风险管理、信用评估和交易策略优化等领域。例如,用于股票价格预测和高频交易的神经网络模型。
  8. 艺术和创作:神经网络在艺术和创意领域有创造性的应用。例如,生成对抗网络(GAN)可用于生成艺术作品、图像合成和风格转换等任务。

深度学习(Deep Learning)是一种基于神经网络的机器学习方法,强调多层次的网络结构。深度学习通过增加网络的深度(层数)来提高网络的表达能力,使其能够学习到更复杂的特征和模式。

深度学习利用多层神经网络进行特征提取和抽象表示,层与层之间的信息传递和计算通过前向传播进行。训练过程中,深度学习使用反向传播算法(Backpropagation)来计算梯度并调整网络中的权重,以最小化预测结果与目标结果之间的差异。

特别注意,深度学习是神经网络的一个重要分支,但并不是唯一的方法。还存在其他类型的神经网络,如卷积神经网络(CNN)用于图像处理,循环神经网络(RNN)用于序列数据处理等。因此,深度学习是神经网络的一种重要实现方式,具有更深的网络结构和更强的表达能力,可以更好地处理复杂的任务和数据。

2. Tensorflow实战演示

2.1 导入函数

import tensorflow as tf
import matplotlib.pyplot as plt

2.2 导入数据

MNIST数据集,由 60,000 张训练图像和 10,000 张测试图像以及表示图像中存在的数字的标签组成。每个图像由 28×28 个灰度像素表示,这里直接调用API即可。

mnist = tf.keras.datasets.mnist
(train_images, train_labels) , (test_images, test_labels) = mnist.load_data()
# 查看整体情况
print("train_images shape: ", train_images.shape)
print("train_labels shape: ", train_labels.shape)
print("test_images shape: ", test_images.shape)
print("test_labels shape: ", test_labels.shape)
# 展示前9个图像
fig = plt.figure(figsize=(10,10))
nrows=3
ncols=3
for i in range(9):
  fig.add_subplot(nrows, ncols, i+1)
  plt.imshow(train_images[i])
  plt.title("Digit: {}".format(train_labels[i]))
  plt.axis(False)
plt.show()

2.3 数据预处理

因为里面有数字,防止模型将数字当作数值处理,我们的目的是识别数字而非有大小之分的数值因此标记独一标签

# 归一化
train_images = train_images / 255
test_images = test_images / 255
print("First Label before conversion:")
print(train_labels[0])
# 转换成One-hot标签
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)
print("First Label after conversion:")
print(train_labels[0])

2.4 建立神经网络

先了解下概念:

  • 设置图层:

展平层:我们的输入图像是 2D 数组。展平层通过逐行解堆叠将 2D 数组(28 x 28 像素)转换为 1D 数组(像素)。该层只是更改数据形状,不会学习任何参数/权重。28*28=784;隐藏层:我们唯一的隐藏层由一个完全连接的节点(或神经元)密集层组成,每个节点(或神经元)都有激活功能。512relu输出层:神经网络的输出层由一个具有 10 个输出神经元的密集层组成,每个神经元输出 10 个概率,每个概率为 0 – 9,表示图像是相应数字的概率。输出层被赋予激活函数,以将输入激活转换为概率。softmax

  • 编译模型:

损失函数:这告诉我们的模型如何找到实际标签和模型预测的标签之间的误差。该指标衡量我们的模型在训练期间的准确性。我们希望模型最小化此函数值。我们将为我们的模型使用损失函数。categorical_crossentropy优化:这告诉我们的模型如何通过查看数据和损失函数值来更新模型的权重/参数。我们将为我们的模型使用优化器adam指标(可选):它包含用于监视训练和测试步骤的指标列表。我们将使用准确性或模型正确分类的图像数量。

### 设置图层
model = tf.keras.Sequential([
  # 展平层
  tf.keras.layers.Flatten(),
  # 隐藏层
  tf.keras.layers.Dense(units=512, activation='relu'),
  # 输出层
  tf.keras.layers.Dense(units=10, activation='softmax')
])
### 编译模型
model.compile(
  loss = 'categorical_crossentropy',
  optimizer = 'adam',
  metrics = ['accuracy']
)

2.5 训练模型

训练数据:在这种情况下,我们将使用由将馈送到神经网络的图像组成。train_images
训练标签:在这里,我们将使用由代表训练图像输出的标签组成。train_labels
Epochs:Epochs是我们的模型将迭代所有训练示例的次数。例如,如果我们指定 10 个 epoch,那么我们的模型将在所有 60,000 张训练图像上运行 10 次。

history = model.fit(
  x = train_images,
  y = train_labels,
  epochs = 10
)

可以看到准确率还是特别高的

2.6 评估模型

可视化损失性和准确性

# loss
plt.plot(history.history['loss'])
plt.xlabel('epochs')
plt.legend(['loss'])
plt.show()
# accuracy
plt.plot(history.history['accuracy'], color='orange')
plt.xlabel('epochs')
plt.legend(['accuracy'])
plt.show()

:::: column
::: column-left

:::
::: column-right

:::
::::

# 测试准确率
test_loss, test_accuracy = model.evaluate(
  x = test_images, 
  y = test_labels
)
print("Test Loss: %.4f"%test_loss)
print("Test Accuracy: %.4f"%test_accuracy)

2.7 预测

# 可修改索引
index=12
# 图像
plt.imshow(test_images[index])
# 准确性
print("Probabilities predicted for image at index", index)
print(predicted_probabilities[index])
print()
# 预测类别
print("Probabilities class for image at index", index)
print(predicted_classes[index])

3. 讨论

通读看个两三遍顺利掌握神经网络入门,有同学会说这个不是挺简单的吗用肉眼也能看出,好像意义不大,神经网络最大的特点就是可以深!MINIST这个手写数字图像数据集确实是简单,图像相对较为规整和清晰,数字通常位于图像中心且无明显的噪声。因此,即使是相对简单的网络结构,也可以在这个数据集上表现出很好的准确性。然而,对于更复杂、多样化和嘈杂的图像数据集,简单的网络结构可能无法捕捉到更细微的特征和模式,因此需要更复杂的神经网络模型来提高预测的准确性。

这个简单的神经网络仅包含一个隐藏层和一个输出层,对于更复杂的问题和数据集,通常需要更深层和更复杂的网络结构才能获得更准确的预测结果。



识别包含多个物体的复杂场景或区分具有相似外观的物体。在这种情况下,简单的神经网络可能无法有效地捕捉到图像中的复杂特征和模式。通过使用更深层和更复杂的神经网络,例如深度卷积神经网络(CNN),可以获得更好的性能。深度CNN通常包含多个卷积层和池化层,用于提取图像中的局部特征,并在更高层次上进行抽象和表示。这样的网络结构能够处理更复杂和多样化的图像数据集,并获得更准确的分类结果。

目录
相关文章
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
92 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
1月前
|
网络协议
计算机网络的分类
【10月更文挑战第11天】 计算机网络可按覆盖范围(局域网、城域网、广域网)、传输技术(有线、无线)、拓扑结构(星型、总线型、环型、网状型)、使用者(公用、专用)、交换方式(电路交换、分组交换)和服务类型(面向连接、无连接)等多种方式进行分类,每种分类方式揭示了网络的不同特性和应用场景。
|
10天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
29 3
|
22天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
65 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
30天前
|
机器学习/深度学习 Serverless 索引
分类网络中one-hot的作用
在分类任务中,使用神经网络时,通常需要将类别标签转换为一种合适的输入格式。这时候,one-hot编码(one-hot encoding)是一种常见且有效的方法。one-hot编码将类别标签表示为向量形式,其中只有一个元素为1,其他元素为0。
35 3
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
55 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
1月前
|
存储 分布式计算 负载均衡
|
1月前
|
安全 区块链 数据库
|
1月前
|
机器学习/深度学习 算法 数据可视化
机器学习的核心功能:分类、回归、聚类与降维
机器学习领域的基本功能类型通常按照学习模式、预测目标和算法适用性来分类。这些类型包括监督学习、无监督学习、半监督学习和强化学习。
26 0