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

在这里插入图片描述

一、概述

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

基础激活函数是神经网络中使用较早、较为简单的激活函数,主要包括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
### Spring Boot Actuator Web Server 配置错误解决方案 当处理与 Spring Boot Actuator 的 Web Server 自动配置相关的错误时,通常涉及以下几个方面: #### 1. **自动配置类的作用** Spring Boot 提供了一组用于自动配置的类来支持不同的模板引擎和功能模块。这些类包括但不限于 `WebMvcAutoConfiguration`、`ThymeleafAutoConfiguration` 和其他特定于视图技术的自动配置类[^1]。如果某些依赖未正确加载或存在冲突,则可能导致条件评估失败。 对于 Web Server 的自动配置,Spring Boot 使用了基于条件的机制 (`@ConditionalOn...`) 来决定哪些组件应该被启用。例如,在启动过程中可能会触发类似于以下的日志消息: ```plaintext ConditionEvaluationReport: Negative matches: - VelocityAutoConfiguration did not match due to missing velocity dependency. Positive matches: - WebMvcAutoConfiguration matched because a specific bean was found. ``` 这表明某些自动配置可能由于缺少必要的依赖项而未能生效。 --- #### 2. **常见错误及其原因分析** ##### (a) 缺少必要依赖 如果项目中缺失某些关键库(如嵌入式服务器 Tomcat 或 Jetty),则会引发异常。例如,Tomcat 是默认使用的 Servlet 容器,但如果移除了其依赖却没有替换为其他容器,则会导致无法初始化 Web Server。 解决方法是在项目的构建文件中显式声明所需的依赖关系。以下是 Maven 中的一个例子: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 如果不希望使用 Tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> ``` ##### (b) 不兼容版本 确保所使用的 Spring Boot 版本与其子模块保持一致。不同版本之间可能存在 API 变更或者行为差异,从而影响自动配置逻辑。 验证当前正在运行的应用程序是否符合官方推荐的最佳实践,并升级到最新稳定版以获得更好的支持。 ##### (c) 错误的属性设置 Actuator 功能通过应用属性文件中的参数控制其行为模式。假如设置了不当选项(比如禁用了整个 MVC 层面的支持却仍尝试访问 RESTful 接口),同样会造成矛盾情况发生。 检查 `application.properties` 或者 YAML 文件里是否存在类似下面这样的条目干扰正常流程执行: ```properties management.endpoints.web.exposure.include=health,info server.port=8080 ``` 上述片段展示了如何暴露健康状态检查端点以及指定监听端口号;调整它们之前需仔细权衡需求后再做修改以免引入不必要的复杂度。 --- #### 3. **调试技巧** 为了更好地定位问题所在位置,可以开启详细的日志记录以便观察内部决策过程。具体做法如下所示: ```java logging.level.org.springframework.boot.autoconfigure=DEBUG ``` 此命令会让框架打印更多关于各个阶段进展的信息出来帮助开发者快速找到症结所在之处。 另外还可以利用内置工具——Endpoint `/conditions` 查看实际匹配状况报告详情。只需发送 HTTP 请求至对应 URL 即可获取结构化数据形式呈现的结果集。 ```bash curl http://localhost:8080/actuator/conditions ``` --- #### 4. **总结建议** 综上所述,针对 spring boot actuate autoconfigure web server error 进行排查时应重点关注三个方面:一是确认基础环境搭建无误即所需外部资源均已妥善准备完毕;二是审查代码实现部分是否有违背既定规则的地方;三是借助辅助手段收集充分证据支撑最终结论得出合理解释并采取相应措施加以修正完善整体架构设计思路方向更加清晰明确高效实用性强易于维护扩展性强等特点优势明显值得推广普及开来让更多人受益匪浅收获满满成就感爆棚! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值