当前位置: 首页 > news >正文

【BP神经网络】实战

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)结果截图:

相关文章:

  • PHP语言的区块链扩展性
  • 大模型后训练+微调
  • MAC地址IP地址如何转换?
  • LuaJIT 学习(5)—— string.buffer 库
  • 梧桐:开发者的命令行效率应用
  • 打开的idea项目maven不生效
  • C++20 的 `std::remove_cvref`:简化类型处理的利器
  • Python扑克牌小游戏
  • Redis哨兵:从看门狗到导盲犬的进化史
  • C#中运算符重载‌你会用吗?
  • Day16:最小的k个数
  • [CISSP] [3] 人员安全与社会工程
  • 栈刷题+总结
  • 全概公式和贝叶斯公式
  • 机器学习中的 K-均值聚类算法及其优缺点。
  • 如何在AVL树中高效插入并保持平衡:一步步掌握旋转与平衡因子 —— 旋转篇
  • 【.Net 9下使用Tensorflow.net---通过LSTM实现中文情感分析】
  • PentestGPT 下载
  • RHCE(RHCSA复习:npm、dnf、源码安装实验)
  • python编写一个脚本删除txt文件中所有### ** 和 ---
  • 事关心脏健康安全,经导管植入式人工心脏瓣膜国家标准发布
  • 上海能源科技发展有限公司原董事长李海瑜一审获刑13年
  • 白玉兰奖征片综述丨综艺市场破局焕新,多元赛道重塑价值坐标
  • 美国“贸易战”前线的本土受害者:安静的洛杉矶港和准备关门的小公司
  • 李公明 | 一周画记:印巴交火会否升级为第四次印巴战争?
  • 新城市志|上海再攻坚,营商环境没有最好只有更好