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

目录
相关文章
|
3天前
|
机器学习/深度学习 数据采集 运维
机器学习在网络流量预测中的应用:运维人员的智慧水晶球?
机器学习在网络流量预测中的应用:运维人员的智慧水晶球?
35 18
|
7天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
51 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
25天前
|
安全 Linux 网络安全
利用Python脚本自动备份网络设备配置
通过本文的介绍,我们了解了如何利用Python脚本自动备份网络设备配置。该脚本使用 `paramiko`库通过SSH连接到设备,获取并保存配置文件。通过定时任务调度,可以实现定期自动备份,确保网络设备配置的安全和可用。希望这些内容能够帮助你在实际工作中实现网络设备的自动化备份。
51 14
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
135 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
1月前
|
机器学习/深度学习 边缘计算 运维
机器学习在网络安全中的防护:智能化的安全屏障
机器学习在网络安全中的防护:智能化的安全屏障
150 15
|
2月前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
2月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
356 55
|
2月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
220 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
115 3
|
3月前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
91 6

热门文章

最新文章

推荐镜像

更多