深度学习系列-python实现-初步学习构建神经网络

深度学习系列-python实现-初步学习构建神经网络

  • 前言
    • 1.在Keras中加载MNIST数据集
    • 2.构建简单的神经网络模型
    • 3.训练模型
    • 4.模型的预测和评估
    • 5.总结

前言

在数字时代,数据已经成为了一种无处不在的资源。从商业分析到科学研究,从人工智能到机器学习,数据驱动的决策和预测已经成为了各行各业不可或缺的一部分。而在这一切的背后,神经网络和深度学习技术发挥着至关重要的作用。

深度学习神经网络,是模拟人脑神经元连接和工作方式的一种计算模型。它们通过训练大量数据来学习和优化自身,从而能够处理复杂的模式和进行精确的预测。近年来,随着计算能力的提升和大数据的普及,深度学习已经在语音识别、图像识别、自然语言处理等领域取得了显著的突破。

Python,作为一种简洁、易读且功能强大的编程语言,已经成为深度学习领域的首选工具。它有着丰富的库和框架支持,如TensorFlow、PyTorch等,这些工具为神经网络的构建、训练和部署提供了极大的便利。

本系列博客旨在通过Python实现深度学习神经网络,帮助初学者从零开始,逐步掌握神经网络的基本原理和构建方法,通过实际的代码实现和案例分析来加深理解。

在本系列博客中,将遵循以下原则:

  • 理论与实践相结合:不仅会讲解神经网络的理论知识,还会通过Python代码来实现这些模型,让读者能够在实践中加深理解。
  • 循序渐进:将从简单的模型开始,逐步引入更复杂的模型和技术,让读者能够逐步掌握深度学习的核心知识和技能。
  • 注重实用性:将通过真实的案例和数据集来演示神经网络的应用,让读者能够了解如何在实际问题中使用神经网络。

无论你是对深度学习感兴趣的初学者,还是希望提升自己在神经网络方面的技能的开发者,本系列博客都将为你提供有价值的参考和学习资源。

这里先做简单的例子让大家熟悉模型训练的步骤。

1.在Keras中加载MNIST数据集

深度学习模型的训练离不开数据的准备,特别是训练数据和测试数据的准备。以下是一个关于如何准备深度学习训练数据和测试数据的详细步骤:

一、数据收集

首先,需要收集与任务相关的数据。数据可以来源于各种渠道,如网络爬虫、公开数据集、自有数据库等。在收集数据时,需要确保数据的多样性和丰富性,以便模型能够学习到更多的特征和模式。

二、数据清洗与预处理

收集到的原始数据往往需要进行清洗和预处理,以提高数据的质量和可用性。这包括去除重复数据、处理缺失值、异常值、噪声等。同时,可能还需要对数据进行标准化、归一化等操作,以便于模型的训练。

三、数据标注

对于监督学习任务,需要对数据进行标注。标注是指为数据添加标签,以便模型能够学习到输入与输出之间的关系。标注的方式可以根据任务类型来选择,如分类任务可以使用类别标签,回归任务可以使用数值标签等。

四、划分训练集和测试集

将清洗和标注后的数据划分为训练集和测试集。训练集用于训练模型,使模型能够学习到数据的特征和规律;测试集用于评估模型的性能,即模型在未见过的数据上的表现。通常,训练集的比例会大于测试集,例如80%的数据用于训练,20%的数据用于测试。

五、数据增强

在某些情况下,为了增加模型的泛化能力,可以使用数据增强技术来扩充训练集。数据增强通过对原始数据进行变换(如旋转、裁剪、缩放等)来生成新的训练样本,从而增加模型的鲁棒性。

六、创建数据加载器

为了方便在训练过程中加载数据,可以创建数据加载器(DataLoader)。数据加载器可以自动将数据划分为批次(batch),并在训练过程中按批次加载数据。这有助于减少内存占用,提高训练效率。

通过以上步骤,可以准备好深度学习所需的训练数据和测试数据。在实际应用中,还需要根据具体的任务和数据特点进行相应的调整和优化。同时,随着技术的不断发展,新的数据处理和增强技术也会不断涌现,为深度学习的应用提供更多可能性。

本次实验中,在Keras中加载MNIST数据集,是一个相对简单的过程,因为Keras内置了MNIST数据集的加载功能。MNIST是一个大型的手写数字数据库,常用于训练和测试图像处理系统。以下是如何在Keras中加载MNIST数据集的步骤:

首先,需要确保你已经安装了TensorFlow和Keras。可以使用pip来安装它们:pip install tensorflow

from tensorflow.keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
#准备训练数据和测试数据
#每个图像都是一个28x28的NumPy数组,像素值介于0和255之间。
#标签是一个整数数组,表示每个图像中的数字(0到9)。
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype("float32") / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype("float32") / 255

2.构建简单的神经网络模型

在这个示例中,创建了一个Sequential模型,这是一个线性堆叠层的模型。添加了一个具有128个神经元和ReLU激活函数的Dense(全连接)层作为隐藏层。添加了一个softmax激活函数的Dense层作为输出层,它有10个神经元,对应10个不同的数字类别。

在编译模型时,使用了rmsprop优化器和SparseCategoricalCrossentropy损失函数,还指定了监控指标:准确率。

from tensorflow import keras
from tensorflow.keras import layers
#Sequential通过堆叠许多层,构建出深度神经网络。
model = keras.Sequential([#添加了一个具有512个神经元和ReLU激活函数的Dense(全连接)层作为隐藏层。layers.Dense(512, activation="relu"),#添加了一个Dense层作为输出层,它有10个神经元,对应10个不同的数字类别,使用softmax激活函数。layers.Dense(10, activation="softmax")
])
#编译模型
model.compile(optimizer="rmsprop",#定义优化器loss="sparse_categorical_crossentropy",#定义损失函数metrics=["accuracy"]) #准确率指标 

3.训练模型

在Keras中训练模型涉及使用模型的fit方法,该方法将迭代训练数据集多次(即“epochs”),并在每次迭代中使用指定数量的样本(即“batch_size”)来更新模型的权重。以下是如何使用Keras的fit方法来训练一个简单的神经网络模型的步骤:

model.fit(train_images, train_labels, epochs=5, batch_size=128)

在这里插入图片描述
在上面的代码中,model.fit方法接收以下参数:

  • train_images 和 train_labels:训练数据和对应的标签。
  • epochs:整数,指定整个数据集将被遍历的次数。每个epoch表示模型已经看到了整个数据集一次。
  • batch_size:整数,指定用于梯度下降的每个批次中的样本数。

fit方法返回一个History对象,该对象包含训练过程中的损失和评估指标的值。通过访问history.history字典,你可以获取每个epoch的损失和指标值。

在训练过程中,Keras会显示每个epoch结束时的损失和准确率。如果你设置了validation_data,它还会显示验证集上的损失和准确率。这些信息可以帮助你监控模型的训练过程,并决定是否需要调整模型的参数或结构。

4.模型的预测和评估

一旦你训练好了一个神经网络模型,你可以使用它来对新的数据进行预测,并评估它在测试集上的性能。以下是如何使用Keras中的模型进行预测和评估的步骤。

应用模型进行预测:

test_digits = test_images[0:10]
predictions = model.predict(test_digits)
predictions[0]

在这里插入图片描述

# 将预测结果转换为类别标签  
predictions[0].argmax() #7

模型评估

test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"test_acc: {test_acc}")

在这里插入图片描述
在上面的代码中,model.predict方法用于对测试集数据进行预测。它返回的是一个NumPy数组,其中包含了模型对每个样本的预测结果。这些预测结果是模型的输出层(logits)的原始值,因此需要使用np.argmax函数来找到每个样本预测概率最高的类别索引,从而得到最终的类别标签。

model.evaluate方法用于评估模型在测试集上的性能。它返回测试损失和准确率。损失是一个衡量模型预测与真实标签之间差距的指标,而准确率则是正确分类的样本比例。

请注意,预测和评估通常是在模型训练完成后进行的,确保你使用的是训练好的模型权重。如果你在训练过程中使用了回调函数来保存最佳模型,你可能需要加载这个最佳模型来进行预测和评估。

5.总结

在这个过程中,学习了神经网络的基本概念和原理,还通过实际的代码实现和案例分析,加深了对这些知识的理解。学会了如何准备数据、设计网络结构、选择优化算法、以及评估模型的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

固态硬盘一年不通电数据就没了吗?丢失了怎么办

随着数字化时代的到来,数据的安全性和持久性变得尤为重要。作为现代电子设备中常见的存储设备,固态硬盘(SSD)以其高效、快速的特点受到广大用户的青睐。然而,有关固态硬盘长时间不通电后数据会丢失的担忧也时常困扰着用…

报错:AttributeError: module ‘numpy‘ has no attribute ‘unit8‘解决

错误问题: 解决方法: 哥们姐们仔细一点吧这个unit8是打错了,无非就是uint8写成了unit8 应该是【uint8】,以后敲代码仔细点哦

从零开始学数据分析之数据分析概述

当今世界对信息技术的依赖程度在不断加深,每天都会有大量的数据产生,我们经常会感到数据越来越多,但是要从中发现有价值的信息却越来越难。 这里所说的信息,可以理解为对数据集处理之后的结果,是从数据集中提炼出的可用…

【Leetcode】top 100 二分查找

35 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 基础写法!!!牢记…

清华学霸引爆“长文本”大战,大模型的应用前景清晰了吗?

文 | 智能相对论 作者 | 沈浪 Long-LLM(长文本大模型)时代似乎来得有些突然,而引爆这场热潮的,竟是一家由清华学霸牵头的本土AI初创企业。 前不久,月之暗面(Moonshot AI)公司宣布旗下对话式 …

linux 环境安装配置

安装java17 1.下载安装包 wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 2.解压到自定义目录/usr/local/java mkdir /usr/local/java tar zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/java 3.配置环境变量 echo export PATH$PATH:/…

金三银四面试题(十):Java基础问题(1)

这部分面试题多用于面试的热身运动,对很多找实习和准备毕业找工作的小伙伴至关重要。 访问修饰符 在 Java 中,提供了四种访问权限控制: public private protected 以及什么都不写(default) 修饰符当前类同包子包其他…

SSM学习——Spring AOP与AspectJ

Spring AOP与AspectJ 概念 AOP的全称为Aspect-Oriented Programming,即面向切面编程。 想象你是汉堡店的厨师,每一份汉堡都有好几层,这每一层都可以视作一个切面。现在有一位顾客想要品尝到不同风味肉馅的汉堡,如果按照传统的方…

【java】关于String、StringBuffer和StringBuilder的那些事

在之前的文章中我们曾简单介绍过String这个引用类型变量,其实它还有许多特性,还有StringBuffer和StringBuilder这两个方法在字符串操作中也有非常重要的地位,接下来就由小编带大家梳理一下吧👊 目录 一、String 1、构造方法 2、…

独立开发者用微信小程序赚钱

微信小程序能实现赚钱,赚多赚少的问题。 本人就上线了一款小程序 ,集结者assemble ,现在上了广告了,收益不是很多,但胜在持续,税后收入,也还在持续推广中。 开发小程序赚大钱得找到变现模式&a…

0基础学习Mybatis系列数据库操作框架——目录结构

大纲 配置的修改代码的修改Main.java文件所在包下新增org.example.model包新增org.example.mapper包 单元测试 在《0基础学习Mybatis系列数据库操作框架——最小Demo》一文中,我们用最简单的方法组织出一个Mybatis应用项目。为了后续构建更符合日常开发环境的项目&a…

归并排序和分治

归并排序 归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 分而治之 可以看到这种结构…

书生浦语全链条开源开放体系

开放了高质量语料数据 预训练 微调 评测 评测框架 部署 智能体 例如把openlab对于计算机视觉的封装

LeetCode-894. 所有可能的真二叉树【树 递归 记忆化搜索 动态规划 二叉树】

LeetCode-894. 所有可能的真二叉树【树 递归 记忆化搜索 动态规划 二叉树】 题目描述:解题思路一:分治,递归解题思路二:动态规划。关键思路是如果构造节点数目为 n 的真二叉树,此时可以从节点数目序列为 [(1,n−2),(3,…

Linux网络编程二(TCP图解三次握手及四次挥手、TCP滑动窗口、MSS、TCP状态转换、多进程/多线程服务器实现)

文章目录 1、TCP三次握手(1) 第一次握手(2) 第二次握手(3) 第三次握手 2、TCP四次挥手(1) 一次挥手(2) 二次挥手(3) 三次挥手(4) 四次挥手 3、TCP滑动窗口4、TCP状态时序图5、多进程并发服务器6、多线程并发服务器 1、TCP三次握手 TCP三次握手(TCP three-way handshake)是TCP协…

选择SD-WAN带宽时需要考虑什么?

部署SD-WAN之前,企业需要考虑关系到带宽大小的一系列因素,以确保其网络能够满足业务需求并保持高效运行。以下是一些在确定SD-WAN带宽时需要考虑的关键因素: 企业规模和用户数量: 企业规模和用户数量是决定带宽需求的重要因素之一…

Vue的前世今生与安装配置

vue的前世今生 Vue.js是一个流行的前端JavaScript框架,用于构建用户界面与单页应用程序(SPA)。它的诞生和发展可以概括为以下几个重要阶段: 初创阶段:Vue由中国人尤雨溪(Evan You)创建于2014年…

人工智能聊天机器人都有哪些?分享3款神奇的软件!

在数字化浪潮中,人工智能聊天机器人以其独特的魅力和实用性,逐渐成为我们生活中不可或缺的一部分。它们能够与用户进行智能互动,提供多元化的服务,让我们的生活更加便捷和高效。那么,市场上究竟有哪些领先的人工智能聊…

智能停车场物联网远程监控解决方案

智能停车场物联网远程监控解决方案 智能停车场物联网远程监控解决方案是一种集成了现代物联网技术、大数据分析以及云计算等先进技术手段,对停车场进行全面智能化管理的综合系统。它通过实时感知、精准采集和高效传输各类停车数据,实现对停车场运营状态…

springcloud基本使用二(远程调用)

创建两个springboot maven子项目 子项目名称分别为order-server和user-server 配置user-server子项目: 所需依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependenc…