16.3 简单神经网络的实现

news2024/9/22 9:46:28

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏:
工💗重💗hao💗:野老杂谈
⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.
⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。
⭐️ 全流程数据技术实战指南:全面讲解从数据采集到数据可视化的整个过程,掌握构建现代化数据平台和数据仓库的核心技术和方法。
⭐️ 构建全面的数据指标体系:通过深入的理论解析、详细的实操步骤和丰富的案例分析,为读者提供系统化的指导,帮助他们构建和应用数据指标体系,提升数据驱动的决策水平。
⭐️《遇见Python:初识、了解与热恋》 :涵盖了Python学习的基础知识、进阶技巧和实际应用案例,帮助读者从零开始逐步掌握Python的各个方面,并最终能够进行项目开发和解决实际问题。

摘要

神经网络是深度学习的核心,而简单神经网络是学习复杂模型的起点。本文通过一个简单的神经网络实现故事,带你从头到尾理解神经网络的基础概念和实现过程。我们将用轻松幽默的语言介绍神经网络的构建、训练和应用,同时通过代码示例和图表帮助你更好地理解每个步骤。准备好了吗?让我们一起开始这场神奇的旅程吧!

关键词:神经网络、Python、深度学习、TensorFlow、Keras


引言:神经网络的魔法

欢迎进入神经网络的奇妙世界!你有没有过这样的经历?在你最无聊的时刻,你的脑袋里突然冒出一个想法,比如:“为什么我的猫能分辨出我和其他人的脸?是不是它有某种神秘的技能?” 其实,猫的技能归结为一种叫做“神经网络”的魔法。今天,我们就来揭开这个神秘面纱,学习如何用 Python 实现一个简单的神经网络。

想象一下,你在一家巧克力工厂工作。你有一个任务:将各种口味的巧克力分到不同的箱子里。神经网络就像一个超级聪明的工人,帮助你自动完成这个任务。不过,不同的是,它不需要休息,不会偷吃巧克力,还能在几秒钟内处理大量数据!

神经网络的基础:像挖掘机一样工作

神经网络的工作方式可以用挖掘机的比喻来理解。挖掘机有不同的部分,每一部分都有自己的任务。神经网络也类似,由输入层、隐藏层和输出层组成,每一层都有自己的任务。

神经网络的构成部分

  1. 输入层:就像挖掘机的铲斗,用来接收原料。在神经网络中,输入层接收数据(如图片的像素值或文字的词向量)。

  2. 隐藏层:这是挖掘机的机械臂,负责处理和转换数据。神经网络的隐藏层通过复杂的数学运算处理输入数据,将其转换成更有用的形式。

  3. 输出层:就像挖掘机将挖出的土壤运送到指定的地方。输出层将处理过的数据输出,告诉你分类结果或预测值。

简单神经网络的工作原理

神经网络通过训练来学习如何将输入数据映射到正确的输出。在训练过程中,我们给神经网络提供大量的样本数据,并告诉它正确的输出。神经网络通过不断调整其内部的参数(即权重)来提高预测的准确性。

想象一下,如果你要教一个孩子识别水果,你会给他看许多不同种类的水果,并告诉他每种水果的名字。随着时间的推移,孩子会逐渐学会如何根据水果的颜色、形状等特征来判断水果的种类。神经网络的训练过程就像这个过程,它通过不断的学习和调整来变得越来越聪明。

实现一个简单的神经网络:Python 代码大揭秘

准备工作:安装所需的库

在开始之前,我们需要安装一些 Python 库来帮助我们实现神经网络。你可以使用以下命令来安装这些库:

pip install numpy tensorflow keras matplotlib

编写代码:从零开始构建神经网络

让我们用 Python 来实现一个简单的神经网络。我们将使用 TensorFlow 和 Keras 这两个库来构建和训练我们的模型。以下是我们将要实现的步骤:

  1. 加载数据:我们使用经典的手写数字数据集 MNIST。
  2. 构建模型:定义神经网络的结构。
  3. 编译模型:设置训练的参数。
  4. 训练模型:用数据训练模型。
  5. 评估模型:测试模型的表现。
1. 加载数据

MNIST 数据集包含了 28x28 像素的手写数字图片。我们将使用这些数据来训练和测试我们的神经网络。

import tensorflow as tf
from tensorflow.keras.datasets import mnist

# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 数据预处理:归一化
x_train = x_train / 255.0
x_test = x_test / 255.0
2. 构建模型

我们将创建一个具有两个隐藏层的神经网络。每个隐藏层包含 128 个神经元,使用 ReLU 激活函数。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense

# 定义模型
model = Sequential([
    Flatten(input_shape=(28, 28)),  # 将 28x28 的图像展平为 784 维的向量
    Dense(128, activation='relu'),  # 第一个隐藏层
    Dense(128, activation='relu'),  # 第二个隐藏层
    Dense(10, activation='softmax')  # 输出层,有 10 个神经元,对应 10 个数字类别
])
3. 编译模型

我们需要指定模型的优化器、损失函数和评估指标。

model.compile(optimizer='adam', 
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
4. 训练模型

我们用训练数据来训练模型。

history = model.fit(x_train, y_train, 
                    epochs=5, 
                    batch_size=32, 
                    validation_split=0.2)
5. 评估模型

我们用测试数据来评估模型的表现。

test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f'Test accuracy: {test_accuracy:.4f}')

可视化训练过程

我们可以使用 matplotlib 来可视化训练过程中的损失和准确率。

import matplotlib.pyplot as plt

# 绘制训练过程中的损失和准确率
plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0, 1])
plt.legend(loc='lower right')
plt.show()

让我们来解释一下这些步骤

数据预处理

在加载数据后,我们对数据进行了归一化处理,将像素值缩放到 0 到 1 之间。这是因为神经网络的性能在处理标准化的数据时通常更好。

模型构建

我们的神经网络包含三个层:一个展平层和两个密集层。展平层将二维图像数据转换为一维向量,然后通过两个隐藏层进行处理,最后输出层使用 softmax 激活函数进行分类。

模型编译

编译模型时,我们选择了 Adam 优化器,它是一种常用的优化算法,能够自动调整学习率。损失函数使用了 sparse_categorical_crossentropy,这是多分类问题的标准选择。我们还指定了准确率作为评估指标。

模型训练

在训练过程中,我们指定了训练的轮数(epochs)和每批次的样本数(batch_size)。验证分割(validation_split)用于在训练时评估模型的表现。

模型评估

通过评估测试数据,我们可以查看模型在未见过的数据上的表现,确保它不会仅仅在训练数据上表现良好。

可视化训练过程

通过绘制训练过程中的准确率图,我们可以直观地看到模型的学习过程。这有助于我们了解模型是否收敛,是否出现过拟合等问题。

实际应用:让神经网络为你服务

你可能会想,“这些神经网络对我有什么用?”其实,神经网络在许多实际应用中都发挥着重要作用。例如:

  • 图像识别:自动识别照片中的物体,如人脸识别、车牌识别。
  • 语音识别:将语音转化为文本,如 Siri 或 Google Assistant。
  • 推荐系统:根据用户的历史行为推荐电影或商品。

神经网络的应用范围广泛,几乎涵盖了所有需要智能判断的领域。掌握了神经网络的基本原理,你将能够在这些领域中大展身手!

结论:继续探索神经网络的无限可能

恭喜你!你已经完成了神经网络的初步学习。如果你能记住,神经网络就像一个超级聪明的工人,通过不断的学习和调整,帮助你完成复杂的任务。虽然我们只触及了神经网络的皮毛,但希望这篇文章能激发你对深度学习的兴趣,让你对神经网络有一个清晰的认识。

继续学习和探索,你会发现神经网络的更多奇妙之处。就像学习任何技能一样,熟练掌握神经网络需要时间和实践。多做实验,多阅读相关资料,你一定能在这个领域取得令人瞩目的成就!

在这里插入图片描述

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

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

相关文章

java或者sh脚本实现 实现 mysql 数据库定时导出并导入(适合linux和windows)

定时导出指定数据库的指定表导出到指定数据库 一、Java实现 1、contronller Slf4j Controller public class BackupController {AutowiredBackupService backupService;// 备份 // ResponseBody // PostMapping("/backup/backupByfile")Scheduled(cron&quo…

CANopen 控制多台设备的支持能力与定制方案评估

1. CANopen 支持的设备数量 CAN 总线的物理限制:CANopen 基于 CAN 总线协议,其设备数量受到 CAN 总线物理层的限制。标准 CAN 总线通常支持最多 127 个节点,但实际应用中,考虑到总线负载、波特率、线缆长度、网络拓扑等因素&#…

(Java)集合框架

1.集合的简介 集合Collection,也是一个数据容器,类似于数组,但是和数组是不一样的。集合是一个可变的容器,可以随时向集合中添加元素,也可以随时从集合中删除元素。另外,集合还提供了若干个用来操作集合中…

[upload]-[GXYCTF2019]BabyUpload1-笔记

尝试上传.htaccess和图片和一句话木马提示 php文件提示 响应头可以看到 构造一句话图片木马如下&#xff1a; <script languagephp>eval($_POST[cmd]);</script> 上传成功 必须增加文件夹下jpg后缀解析php .htaccess如下 <FilesMatch "jpg">Set…

windows关闭英语美式键盘

命令窗口 在Windows 中&#xff0c;如果你可通过批处理文件&#xff08;.bat&#xff09;关闭或移除美式键盘布局&#xff0c;可以使用以下步骤创建一个简单的批处理脚本&#xff1a; 打开windows命令窗口 执行命令 reg add "HKCU\Keyboard Layout\Toggle" /v &quo…

多模态感知:打造温室作物的全方位“健康档案“

&#xff08; 于景鑫 国家农业信息化工程技术研究中心&#xff09;现代农业的发展&#xff0c;离不开现代科技的支撑。在温室种植领域&#xff0c;由于环境复杂多变、管理要素繁多&#xff0c;传统人工经验难以应对日益精细化、智能化的生产需求。多模态感知技术的出现&#xf…

由于Offer报文引起的事件订阅失败

今天在工作中碰到一个车机上someip事件订阅的问题&#xff0c;Android端订阅了S32G发布的定位相关的someip服务(0x0001)中的某个事件&#xff08;卫星状态&#xff09;&#xff0c;然后这个事件是基于TCP通信的&#xff0c;设置了通信端口50001。 然后Android端上层应用反馈说收…

机器学习课程学习周报七

机器学习课程学习周报七 文章目录 机器学习课程学习周报七摘要Abstract一、机器学习部分1.1 Transformer模型概述1.2 Transformer编码器1.3 Transformer解码器1.3.1 自回归解码器1.3.2 非自回归解码器 1.4 编码器-解码器注意力1.5 Transformer的训练过程 总结 摘要 本周的学习…

How to debug a appliction on local Linux or WSL?

由于K8S权限控制&#xff0c;当部署在上面的应用程式出现问题后&#xff0c;无法还原用户出问题的场景。所以需要把程式部署到本地的Linux或WSL。 1.Upload application publish files to your Linux or WSL. 2.Add a Dockerfile FROM harbor.xxx.com/dotnet/aspnet:6.0 MAIN…

SQL注入之二次,加解密,DNS注入

加解密注入 在注入的时候&#xff0c;对变量做了加密操作&#xff0c;比如说?id1正常显示&#xff0c;但是代码对1进行了加密&#xff0c;这个时候想用?id1 and 11去判断&#xff0c;就得把1 and 11整体按照网站的方式加密&#xff0c;再去注入 二次注入 无法通过手动注入…

idea和jdk的安装教程

1.JDK的安装 下载 进入官网&#xff0c;找到你需要的JDK版本 Java Downloads | Oracle 中国 我这里是windows的jdk17&#xff0c;选择以下 安装 点击下一步&#xff0c;安装完成 配置环境变量 打开查看高级系统设置 在系统变量中添加两个配置 一个变量名是 JAVA_HOME …

人工智能与机器学习原理精解【12】

文章目录 分级聚类理论分级聚类的详细说明1. 定义2. 算法3. 计算4. 例子5. 例题 皮尔逊相关系数 julia实现 参考文献 分级聚类 理论 分级聚类的详细说明 1. 定义 分级聚类&#xff08;Hierarchical Clustering&#xff09;&#xff0c;又称为层次聚类&#xff0c;是一种通过…

Java虚拟机:虚拟机介绍

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 033 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

haproxy 原理+实战

haproxy 1 haproxy简介1.1 定义1.2 原理讲解1.3 HAProxy的优点&#xff1a; 2. haproxy的基本部署2.1 实验环境2.1.2 haproxy主机配置2.1.3 webserver1配置2.1.4 webserver2配置 3. haproxy的全局配置4. haproxy代理参数5. haporxy的热处理6.haproxy的算法6.1 静态算法6.1.1sta…

物联网HMI/网关搭载ARM+CODESYS实现软PLC+HMI一体化

物联网HMI/网关搭载CODESYS实现软PLCHMI一体化 硬件&#xff1a;ARM平台&#xff0c;支持STM32/全志T3/RK3568/树莓派等平台 软件&#xff1a;CODESYS V3.5、JMobile Studio CODESYS是一款功能强大的PLC软件编程工具&#xff0c;它支持IEC61131-3标准IL、ST、FBD、LD、CFC、…

数据结构之《二叉树》(下)

在二叉树(中)了解了堆的相关概念后还实现了堆&#xff0c;并且还实现了堆排序&#xff0c;以及解决了TOP-K问题。接下来在本篇中将继续学习二叉树中的链式结构&#xff0c;会学习二叉树中的前、中、后三种遍历并实现链式结构的二叉树&#xff0c;接下来就开始本篇的学习吧&…

LabVIEW开发多语言程序的实现

在全球化的背景下&#xff0c;软件开发中的多语言支持变得愈发重要。LabVIEW作为一种广泛应用于工程和科学领域的图形化编程语言&#xff0c;同样支持多语言应用的开发。实现一个多语言LabVIEW程序不仅能增强用户体验&#xff0c;还可以扩大应用的覆盖范围。本文将介绍在LabVIE…

算法复习(上)

数组复习 数组复习基本就是熟练使用数组&#xff0c;经常配合指针使用以及思维的使用 443. 压缩字符串 - 力扣&#xff08;LeetCode&#xff09; 使用双指针分别标志我们在字符串中读和写的位置&#xff0c;当读指针 read 位于字符串的末尾&#xff0c;或读指针 read 指向的…

Python3 第八十一课 -- urllib

目录 一. 前言 二. urllib.request 三. urllib.error 四. urllib.parse 五. urllib.robotparser 一. 前言 Python urllib 库用于操作网页 URL&#xff0c;并对网页的内容进行抓取处理。 本文主要介绍 Python3 的 urllib。 urllib 包 包含以下几个模块&#xff1a; url…

C# 利用自定义特性,动态拼接sql,查询数据库,动态新增datagridview 列

之前在给一个工厂客户开发一套“售后包装防错系统”的时候&#xff0c;由于业务比较复杂&#xff0c; 每个表的字段基本都保持在10-20个字段区间&#xff0c;如下截图&#xff08;可向右滑动滚动条&#xff09; 正常的做法&#xff0c;肯定是一顿卡卡操作&#xff0c;新建列&…