【BP神经网络】实战

embedded/2025/3/17 4:22:27/

1.参考Python实战:BP神经网络_bp神经网络实战python-CSDN博客

2.实践

(1)运行环境

anocanda Powershell Prompt(anocanda3)

(2)创建虚拟环境,解决安装包的版本问题

*打开终端(Terminal)或命令提示符(Command Prompt):

    在Windows上,可以通过搜索“cmd”来打开命令提示符。

*创建新的虚拟环境:
使用conda命令来创建虚拟环境。下面是一个基本的例子,其中myenv是你的环境名称,而python=3.8指定了你希望在这个环境中使用的Python版本。

conda create --name myenv python=3.8

*激活虚拟环境:
创建完成后,你需要通过以下命令激活这个环境:

    对于Windows用户:

conda activate myenv

*安装所需要的包

(3)运行代码:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号 '-' 显示为方块的问题
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.model_selection import train_test_split# 定义学生成绩数据集,这里为方便演示,手动创建示例数据
data = np.array([[80, 75],[85, 80],[70, 65],[90, 88],[75, 70],[88, 82],[65, 60],[92, 90]
])
final_scores = np.array([82, 88, 72, 92, 76, 86, 68, 95])# 划分训练集和测试集,按照8:2的比例划分,设置随机种子以保证每次划分结果可重复
X_train, X_test, y_train, y_test = train_test_split(data, final_scores, test_size=0.2, random_state=42)# 构建BP神经网络模型
model = Sequential()
# 输入层,有2个神经元,对应2个输入特征(作业成绩和小测验成绩),激活函数为ReLU
model.add(Dense(16, input_dim=2, activation='relu'))
# 隐藏层,16个神经元,激活函数为ReLU
model.add(Dense(16, activation='relu'))
# 输出层,1个神经元,对应期末考试成绩,激活函数为线性(因为是回归任务)
model.add(Dense(1, activation='linear'))# 编译模型,指定优化器、损失函数和评估指标
model.compile(optimizer='adam',loss='mean_squared_error',metrics=['mae'])  # 平均绝对误差(MAE)作为评估指标# 训练模型,指定训练轮数、批量大小等参数
epochs = 100
batch_size = 2
history = model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size,validation_data=(X_test, y_test), verbose=0)# 获取训练过程中的损失和验证损失历史数据
loss_history = history.history['loss']
val_loss_history = history.history['val_loss']# 可视化训练损失和验证损失曲线
plt.figure(figsize=(10, 6))
plt.plot(range(1, epochs + 1), loss_history, label='训练损失')
plt.plot(range(1, epochs + 1), val_loss_history, label='验证损失')
plt.xlabel('轮数')
plt.ylabel('损失值')
plt.title('BP神经网络训练损失曲线')
plt.legend()
plt.show()# 使用训练好的模型对测试集进行预测
y_pred = model.predict(X_test).flatten()  # 将二维数组展平为一维数组# 可视化预测结果与实际结果(简单示例,以测试集为例)
plt.figure(figsize=(10, 6))
plt.scatter(range(len(y_test)), y_test, label='实际成绩', color='blue')
plt.scatter(range(len(y_pred)), y_pred, label='预测成绩', color='red')
plt.xlabel('样本索引')
plt.ylabel('期末考试成绩')
plt.title('BP神经网络预测学生成绩结果')
plt.legend()
plt.show()# 调试信息
print("y_test shape:", y_test.shape)
print("y_pred shape:", y_pred.shape)
print("y_test type:", type(y_test))
print("y_pred type:", type(y_pred))

(4)结果截图:


http://www.ppmy.cn/embedded/173242.html

相关文章

【小沐学Web3D】three.js 加载三维模型(React)

文章目录 1、简介1.1 three.js1.2 react.js 2、three.js React结语 1、简介 1.1 three.js Three.js 是一款 webGL(3D绘图标准)引擎,可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API ,为我们提供了高级的…

Javascript基础语法详解

面向对象的语言.脚本语言,不需要编译,浏览器解释即可运行 .用于控制网页的行为.浏览器的source可以打断点调试, console输入代码可以执行 use strict指令: 在“严格模式”下运行js代码, 防止意外创建全局变量等, 提高代码安全性和执行效率. 使用: 全局严格模式:…

Qt 信号与槽机制

1. 信号 和 槽 Qt 信号与槽机制 是一种用于对象间通信的低耦合设计模式,核心思想是:当某个信号触发,自动调用预先关联的处理函数(槽函数)。 在 Qt 中,如果一个类需要使用信号与槽机制,则该类必…

Redis 数据结构及使用场景介绍

Redis 是一种高性能的键值存储数据库,支持多种数据结构,每种数据结构都有其独特的特点和使用场景。以下是 Redis 的主要数据结构及其深入解析和实际使用场景介绍: 1.String(字符串) 特点 • 最基本的数据结构&#…

3.1 Spring Boot性能优化:从线程池调优到JVM参数配置

markdown # Spring Boot性能优化:从线程池调优到JVM参数配置![性能优化](https://img-blog.csdnimg.cn/direct/0a3e3d2e4d4b4f7f9c3d4a5b0e8d4e4c.png)## 引言 在微服务架构中,Spring Boot作为主流开发框架,其性能直接影响系统的吞吐量和响应…

ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值

note 问题背景:序列推荐(SR)任务旨在预测用户可能的下一个交互项目。近年来,大型语言模型(LLMs)在SR系统中表现出色,但它们巨大的规模使得在实际平台中应用变得低效和不切实际。 研究动机&…

Linux 中的管道:进程间数据传输的利器

个人主页:chian-ocean 文章专栏-Linux 前言 **进程间通信(Inter-Process Communication, IPC)**是指在操作系统中,不同进程之间交换数据或信息的方式。由于每个进程都有自己的地址空间,直接访问另一个进程的数据是不…

Linux操作系统6- 线程2(线程的创建,终止,等待与退出)

上篇文章:Linux操作系统6- 线程1(线程基础,调用接口,线程优缺点)-CSDN博客 本篇Gitee仓库:myLerningCode/l28 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 进程:承担…