【机器学习实战】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通常包含多个卷积层和池化层,用于提取图像中的局部特征,并在更高层次上进行抽象和表示。这样的网络结构能够处理更复杂和多样化的图像数据集,并获得更准确的分类结果。

目录
相关文章
|
26天前
|
机器学习/深度学习 PyTorch TensorFlow
【机器学习】基于tensorflow实现你的第一个DNN网络
【机器学习】基于tensorflow实现你的第一个DNN网络
44 0
|
1月前
|
算法 前端开发 数据挖掘
【类脑智能】脑网络通信模型分类及量化指标(附思维导图)
本文概述了脑网络通信模型的分类、算法原理及量化指标,介绍了扩散过程、路由协议和参数模型三种通信模型,并详细讨论了它们的性能指标、优缺点以及在脑网络研究中的应用,同时提供了思维导图以帮助理解这些概念。
24 3
【类脑智能】脑网络通信模型分类及量化指标(附思维导图)
|
9天前
|
机器学习/深度学习 安全 算法
利用机器学习优化网络安全防御策略
【8月更文挑战第30天】在信息技术迅猛发展的今天,网络安全问题日益突显,传统的安全防御手段逐渐显得力不从心。本文提出一种基于机器学习的网络安全防御策略优化方法。首先,通过分析现有网络攻击模式和特征,构建适用于网络安全的机器学习模型;然后,利用该模型对网络流量进行实时监控和异常检测,从而有效识别潜在的安全威胁;最后,根据检测结果自动调整防御策略,以提升整体网络的安全性能。本研究的创新点在于将机器学习技术与网络安全防御相结合,实现了智能化、自动化的安全防御体系。
|
22天前
|
机器学习/深度学习 自然语言处理 自动驾驶
【机器学习】神经网络的无限可能:从基础到前沿
在当今人工智能的浪潮中,神经网络作为其核心驱动力之一,正以前所未有的速度改变着我们的世界。从图像识别到自然语言处理,从自动驾驶到医疗诊断,神经网络的应用无处不在。本文旨在深入探讨神经网络的各个方面,从基础概念到最新进展,带领读者一窥其背后的奥秘与魅力。
38 3
|
1月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
31 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
1月前
|
机器学习/深度学习
【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
长短时记忆网络(LSTM)的基本概念、解决梯度消失问题的机制,以及介绍了包括梯度裁剪、改变激活函数、残差结构和Batch Normalization在内的其他方法来解决梯度消失或梯度爆炸问题。
39 2
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【8月更文挑战第3天】踏入人工智能领域,神经网络是开启智慧之门的钥匙。它不仅是一种技术,更是模仿人脑学习与推理的思维方式。从理解神经元间的连接到构建神经网络的基本概念,再到使用Python与TensorFlow搭建手写数字识别模型,每一步都揭示着机器学习的奥秘。随着深入学习,我们将探索更高级的主题,比如深度神经网络、卷积神经网络和循环神经网络,以及如何优化模型性能。掌握背后的数学原理,将帮助我们设计更高效准确的模型。在这个旅程中,Python将是我们的得力助手,引领我们探索AI世界的无限可能。
32 2
|
25天前
|
机器学习/深度学习 编解码 Android开发
MATLAB Mobile - 使用预训练网络对手机拍摄的图像进行分类
MATLAB Mobile - 使用预训练网络对手机拍摄的图像进行分类
29 0
|
26天前
|
人工智能 物联网 异构计算
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
81 0
|
1月前
|
机器学习/深度学习 数据可视化 算法框架/工具
【深度学习】Generative Adversarial Networks ,GAN生成对抗网络分类
文章概述了生成对抗网络(GANs)的不同变体,并对几种经典GAN模型进行了简介,包括它们的结构特点和应用场景。此外,文章还提供了一个GitHub项目链接,该项目汇总了使用Keras实现的各种GAN模型的代码。
48 0