使用mnist数据集和LeakyReLU高级激活函数训练神经网络示例代码

news2024/11/24 0:52:53

在这里插入图片描述

一、概述

神经网络中的激活函数是用于增加网络的非线性特性的函数,没有激活函数,神经网络将仅仅是一个线性模型,无法解决复杂的非线性问题。激活函数的选择对神经网络的性能有很大的影响。

基础激活函数是神经网络中使用较早、较为简单的激活函数,主要包括Sigmoid、Tanh、ReLU、ELU、SELU等,具体请参考老猿在CSDN博文《神经网络激活函数列表大全及keras中的激活函数定义 https://blog.csdn.net/LaoYuanPython/article/details/142731106 》的介绍。

随着深度学习的发展,为了解决基础激活函数的一些问题(如梯度消失、梯度爆炸、计算复杂度等),研究者们提出了一些高级激活函数,如Leaky ReLU、Parametric ReLU (PReLU)等。高级激活函数是在基础激活函数的基础上发展起来的,继承了基础激活函数的某些特性,同时引入了新的机制来改进性能,通常是为了解决基础激活函数在实际应用中遇到的问题。

高级激活函数通常比基础激活函数更复杂,可能包含更多的参数或计算步骤,通常旨在解决基础激活函数的某些限制,如梯度消失或激活函数的非单调性。基础激活函数适用于大多数情况,但高级激活函数可能在特定任务或网络结构中表现更好。
关于高级激活函数请参考老猿博文《神经网络高级激活函数大全及keras中的函数定义 https://blog.csdn.net/LaoYuanPython/article/details/142742719》

选择哪种激活函数通常取决于具体任务的需求、数据的特性以及实验的结果。在实践中,可能需要尝试不同的激活函数来找到最适合特定问题的激活函数。

二、keras.datasets.mnist介绍

keras.datasets.mnist 是 Keras 库中的一个数据集模块,它提供了对 MNIST 数据集的访问。MNIST 数据集是一个广泛使用的手写数字识别数据集,它包含了60,000个训练样本和10,000个测试样本,每个样本都是一个28x28像素的灰度图像,以及对应的标签(0到9的数字)。

以下是 keras.datasets.mnist 的一些基本用法:

  1. 加载数据集:使用 load_data() 函数可以加载 MNIST 数据集。这个函数会返回两个元组,分别代表训练集和测试集,每个元组包含图像数据和标签;
  2. 数据预处理:加载的数据通常需要进行预处理,比如归一化,以提高模型的性能;
  3. 构建模型:使用 Keras 构建一个神经网络模型来训练和测试数据;
  4. 训练模型:使用训练数据训练模型;
  5. 评估模型:使用测试数据评估模型的性能。
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, LeakyReLU
from keras.optimizers import Adam

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

# 将像素值归一化到0-1范围内
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255

# 将图像展平为784个特征的一维数组
x_train = x_train.reshape((x_train.shape[0], -1))
x_test = x_test.reshape((x_test.shape[0], -1))

# 将标签转换为one-hot编码
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)

# 创建一个顺序模型
model = Sequential()

# 添加一个全连接层
model.add(Dense(512, input_shape=(784,)))
model.add(LeakyReLU(alpha=0.01))  # 添加LeakyReLU激活函数

# 继续构建模型
model.add(Dense(256))
model.add(LeakyReLU(alpha=0.01))  # 再次添加LeakyReLU激活函数
model.add(Dense(128))
model.add(LeakyReLU(alpha=0.01))  # 添加LeakyReLU激活函数
model.add(Dense(10, activation='softmax'))  # 输出层使用softmax激活函数

# 编译模型
model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])

# 模型总结
model.summary()

# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=128, validation_data=(x_test, y_test))

# 评估模型
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

执行后的输出:

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense (Dense)               (None, 512)               401920    
                                                                 
 leaky_re_lu (LeakyReLU)     (None, 512)               0         
                                                                 
 dense_1 (Dense)             (None, 256)               131328    
                                                                 
 leaky_re_lu_1 (LeakyReLU)   (None, 256)               0         
                                                                 
 dense_2 (Dense)             (None, 128)               32896     
                                                                 
 leaky_re_lu_2 (LeakyReLU)   (None, 128)               0         
                                                                 
 dense_3 (Dense)             (None, 10)                1290      
                                                                 
=================================================================
Total params: 567,434
Trainable params: 567,434
Non-trainable params: 0
_________________________________________________________________
Epoch 1/5
469/469 [==============================] - 9s 17ms/step - loss: 0.2330 - accuracy: 0.9321 - val_loss: 0.1017 - val_accuracy: 0.9694
Epoch 2/5
469/469 [==============================] - 7s 16ms/step - loss: 0.0851 - accuracy: 0.9743 - val_loss: 0.0896 - val_accuracy: 0.9710
Epoch 3/5
469/469 [==============================] - 7s 16ms/step - loss: 0.0554 - accuracy: 0.9822 - val_loss: 0.1009 - val_accuracy: 0.9680
Epoch 4/5
469/469 [==============================] - 7s 16ms/step - loss: 0.0406 - accuracy: 0.9871 - val_loss: 0.0709 - val_accuracy: 0.9791
Epoch 5/5
469/469 [==============================] - 8s 16ms/step - loss: 0.0290 - accuracy: 0.9906 - val_loss: 0.0797 - val_accuracy: 0.9789
Test loss: 0.0796799287199974
Test accuracy: 0.9789000153541565

三、小结

本文介绍了使用mnist数据集和LeakyReLU高级激活函数训练神经网络示例代码,这个示例代码使用全连接层,激活函数在隐藏层使用的是LeakyReLU,输出层使用的是softmax。这个神经网络是比较简单的神经网络,根据训练后的测试情况,其识别精度接近98%。

更多人工智能知识学习请关注专栏《零基础机器学习入门》后续的文章。

更多人工智能知识学习过程中可能遇到的疑难问题及解决办法请关注专栏《机器学习疑难问题集》后续的文章。

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

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

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

相关文章

AOA定位技术在智慧停车场中的应用

‌AOA定位技术是一种基于信号到达角度的定位方法,通过测量无线信号到达接收器的入射角度来实现精确定位。‌ AOA定位技术的核心原理是利用接收器内的多个天线阵列来测量信号的相位差,从而计算出信号的到达角度,最终确定位置‌。 在智慧停…

SpringBoot在高校学科竞赛平台中的应用与优化

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

数据结构之旅(顺序表)

前言: Hello,各位小伙伴们我们在过去的60天里学完了C语言基本语法,由于小编在准备数学竞赛,最近没有给大家更新,并且没有及时回复大家的私信,小编在这里和大家说一声对不起!,小编这几天会及时给大家更新初阶数据结构的内容,然后我们来学习今天的内容吧! 一. 顺序表的概念和结…

鸿蒙开发案例:通过三杯猜球学习显示动画

【引言】 “三杯猜球”是一个经典的益智游戏,通常由一名表演者和多名参与者共同完成。表演者会将一个小球放在一个杯子下面,然后将三个杯子快速地交换位置,参与者则需要猜出最终哪个杯子下面有小球。本文将介绍如何使用HarmonyOS NEXT技术&a…

加速AI+医疗普惠:AI如何让乳腺癌筛查走进大山?

人工智能与超声技术的结合正在医疗领域引发一场新变革。 近日,贵州省铜仁市石阡县妇幼保健院与广州尚医网信息技术有限公司(以下简称“尚医云”)联合组织了一场“AI点亮女性健康未来”免费乳腺癌筛查活动,目前已为当地1,500名适龄…

物联网:一种有能力重塑世界的技术

物联网(IoT)近年来对我们的日常生活产生了如此积极的影响,以至于即使是不懂技术的人也开始相信它所带来的便利以及敏锐的洞察力。 物联网是一场数字技术革命,其意义甚至比工业革命更为重大。物联网是仍处于起步阶段的第四次工业革…

重学SpringBoot3-安装Spring Boot CLI

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-安装Spring Boot CLI 1. 什么是 Spring Boot CLI?2. Spring Boot CLI 的安装2.1. 通过 SDKMAN! 安装2.2. 通过 Homebrew 安装(适…

React Query 和 React Context

React Query最佳特性之一是你可以在组件树中的任何位置使用查询&#xff1a;你的 <ProductTable> 组件可以在其需要的地方自带数据获取&#xff1a; function ProductTable() {const productQuery useProductQuery()if (productQuery.data) {return <table>...<…

AI跟踪报道第60期-新加坡内哥谈技术-本周AI新闻: Tesla展示Robotaxi和AI在企业级运用的推进

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

前端开发笔记-- 黑马程序员4

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 css 三角写法用户界面鼠标样式取消表单轮廓vertical-align文本溢出 html5 新标签多媒体标签视频标签![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d85d…

Linux升级openssl版本

Linux升级openssl版本 服务器编译依赖库检查 # yum -y install gcc gcc-c make libtool zlib zlib-devel版本检测 # openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 # ssh -V OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013下载openssl 地址&#xff1a;https://www.o…

Android中的内容提供者

目录 1.创建内容提供者 1--手动创建一个Android应用程序 2--创建自定义的内容提供者 2.访问其他应用程序 1. 解析URI 2. 查询数据 3. 遍历查询结果 3)案例:读取手机通信录 1.声明权限 2.activity_main.xml文件内容 3.my_phone_list.xml文件内容 4.定义PhoneInfo实体 5.定义MyPh…

西门子S7-200 SMART选型指南之高级功能

介绍了S7-200 SMART控制器的高级功能。用户可以了解到控制器所支持的通信功能、运动控制功能、PID功能和高速计数器能力。这使用户能够评估控制器是否满足其应用的功能要求。 S7-200 SMART 功能 S7-200smart传承了S7-200 系列CPU经典编程理念&#xff0c;可以实现基本编程及高…

CISSP官方模拟测试题

源于CISSP官方习题集最新第4版第9章&#xff08;ISC2 CISSP Certified Information Systems Security Professional Official Practice Tests Fourth Edition, Chapter 9: Practice Test 1&#xff09;。 中英文对照&#xff0c;限时150分钟考试&#xff0c;顺序作答不能回退&…

【大数据技术基础 | 实验二】Linux基础:常用基本命令和文件操作

文章目录 一、实验目的二、实验要求三、实验环境四、常用基本命令1、验证cd和pwd命令2、验证ls命令3、验证mkdir命令4、验证cp、mv和rm命令 五、Linux文件操作1、验证touch命令2、验证cat命令3、验证more命令 六、实验心得 一、实验目的 学会linux常用命令(cd,ls,pwd,mkdir,rm…

STM32 SPI通信 F407外设控制器 W25Q64

SPI介绍 SPI&#xff1a;串行外部设备接口 --- 通信接口 特点&#xff1a;高速同步串行全双工 --- 40MHz 场景&#xff1a;存储器 OLED 无线通信 传感器 硬件连线&#xff1a; …

docker安装elasticsearch(es)+kibana

目录 docker安装elasticsearch 一.准备工作 1.打开docker目录 2.创建elasticsearch目录 3.打开elasticsearch目录 4.拉取elasticsearch镜像 5.检查镜像 二.挂载目录 1.创建数据挂载目录 2.创建配置挂载目录 3.创建插件挂载目录 4.权限授权 三.编辑配置 1.打开con…

优先算法1--双指针

“一念既出&#xff0c;万山无阻。”加油陌生人&#xff01; 目录 1.双指针--移动零 2.双指针-复写零 ok&#xff0c;首先在学习之前&#xff0c;为了方便大家后面的学习&#xff0c;我们这里需要补充一个知识点&#xff0c;我这里所谓的指针&#xff0c;不是之前学习的带有…

RISC-V笔记——语法依赖

1. 前言 Memory consistency model定义了使用Shared memory(共享内存)执行多线程(Multithread)程序所允许的行为规范。RISC-V使用的内存模型是RVWMO(RISC-V Weak Memory Ordering)&#xff0c;该模型旨在为架构师提供更高的灵活性&#xff0c;以构建高性能可拓展的设计&#x…

51单片机的土壤湿度检测控制系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块土壤湿度传感器继电器按键、蜂鸣器、LED等模块构成。适用于智能浇花浇水系统、花卉灌溉系统等相似项目。 可实现功能: 1、LCD1602实时显示土壤湿度 2、土壤湿度传感器&#xff08;滑动变阻器模拟&#xff09;采集…