【算法基础】基于pytorch的BP神经网络算法代码+数据集

2023-11-02

实现功能:

1、数据回归:基于多输入单输出数据集
2、代码最后使用matplotlib绘制了 [训练次数-loss值] 折线图进行训练结果展示

注:

1、代码亲测可成功运行;
2、以下代码通过cuda调用GPU训练,如果cuda报错则需检查GPU训练环境配置,例如pytorch是否为GPU版本、cuda版本是否适配当前显卡驱动版本等。
3、数据集:
链接:https://pan.baidu.com/s/1VC83_A0V0-N4kZhiAXEs6w?pwd=0000
提取码:0000
本文重点在于介绍算法,该数据集质量不算优质。
算法拟合能力没有问题,但基于此数据集可能存在非凸优化问题,结果有概率呈现局部最优状态,导致收敛效果差,所以读者下一阶段可以尝试学习一些能有效规避局部最优问题的算法。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import torch
from sklearn import preprocessing


features = pd.read_excel('number_list.xlsx')  # 设置文件夹地址
labels_train = np.array(features['输出'])  # 制作标签,用于比对训练结果
fea_train = features.drop(columns=['输出'])  # 在特征数据集中去掉label
# df.drop(label, axis=0)
# label:要删除的列或者行,如果要删除多个,传入列表
# axis:轴的方向,0为行,1为列,默认为0
fea_train = np.array(fea_train)  # 转换为ndarray格式

# 数据标准化操作:(x-均值μ) / 标准差σ ,使数据关于原点对称,提升训练效率
input_features = preprocessing.StandardScaler().fit_transform(fea_train)  # fit:求出均值和标准差 transform:求解

# 设定神经网络的输入参数、隐藏层神经元、输出参数的个数
input_size = input_features.shape[1]  # 设定输入特征个数为7
# np.shape[1]
# 0为行,1为列,默认为0
# 在此表格中因为每行为各样本的值,每列为不同的特征分类,所以此处0表示样本数,1表示特征数
hidden_size = 64  # 设定隐藏层包含64个神经元
output_size = 1  # 设定输出特征个数为1
batch_size = 2  # 每一批迭代的特征数量

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")  # 选择使用GPU训练

my_nn = torch.nn.Sequential(
    torch.nn.Linear(input_size, hidden_size).to(device),  # 输入层 → 第一层
    torch.nn.Sigmoid().to(device),
    torch.nn.Linear(hidden_size, hidden_size).to(device),  # 第一层 → 第二层
    torch.nn.Sigmoid().to(device),
    torch.nn.Linear(hidden_size, hidden_size).to(device),  # 第二层 → 第三层
    torch.nn.Sigmoid().to(device),
    torch.nn.Linear(hidden_size, hidden_size).to(device),  # 第三层 → 第四层
    torch.nn.Sigmoid().to(device),
    torch.nn.Linear(hidden_size, output_size).to(device)  # 第四层 → 输出层
).to(device)
cost = torch.nn.MSELoss(reduction='mean').to(device)
optimizer = torch.optim.Adam(my_nn.parameters(), lr=0.01)

# 训练网络
losses = []
for i in range(300):
    batch_loss = []
    # 采用MINI-Batch的方法进行训练
    for start in range(0, len(input_features), batch_size):
        end = start + batch_size if start + batch_size < len(input_features) else len(input_features)
        x = torch.tensor(input_features[start:end], dtype=torch.float, requires_grad=True).to(device)
        y = torch.tensor(labels_train[start:end], dtype=torch.float, requires_grad=True).to(device)
        prediction = my_nn(x).to(device)
        loss = cost(prediction, y).to(device)
        optimizer.zero_grad()
        loss.backward(retain_graph=True)
        optimizer.step()
        batch_loss.append(loss.data.cpu().numpy())

    if i % 10 == 0:
        losses.append(np.mean(batch_loss))
        print(losses)
        print(i, np.mean(batch_loss))

# 保存模型
torch.save(my_nn, 'BP.pt')

# 绘制图像
dev_x = [i * 10 for i in range(20)]
plt.xlabel('step count')
plt.ylabel('loss')
plt.xlim((0, 200))
plt.ylim((0, 1000))
plt.plot(dev_x, losses)
plt.show()

运行结果
调用训练好的模型:
因为之前模型使用GPU训练,所以调用时也要使用GPU,即:需要配置device

import torch

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
new = torch.load('BP.pt', map_location=lambda storage, loc: storage.cuda(0))

inp1 = [273, 82, 114, 210, 9, 904, 680]
input1 = torch.tensor(inp1, dtype=torch.float).to(device)
out1 = new(input1)
print(out1)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【算法基础】基于pytorch的BP神经网络算法代码+数据集 的相关文章

随机推荐

  • 解决图片太大溢出问题、CSS 限制图片最大宽度、图片按比例自动缩放

    在网上找了很久 这里保存一下 方便以后使用 实现思路很简单 改造js代码 既然图片很大 那么我们先用最经典的限制width的方法限制大图的宽度 但是小图怎么办 小图我们用onload的方法再缩小 就这么搞定了 完美代码如下 对应的JS代码
  • 【chatgpt谈前端三大主流框架】React、Vue和Angular的优缺点及如何选择

    文章目录 React 优点 缺点 Vue 优点 缺点 Angular 优点 缺点 总结 脑筋急转弯小程序抢先体验 创作者 全栈弄潮儿 个人主页 全栈弄潮儿的个人主页 个人社区 欢迎你的加入 全栈弄潮儿的个人社区 专栏地址 vue2从入门到精
  • JavaWeb Maven 所需jar包

    JavaWeb Maven 所需jar包
  • esp32cam 服务端远程视频方案

    esp32cam 服务端远程视频方案 现有功能更完善的服务端视频方案 开源地址 https gitcode net qq 26700087 lightcam 功能更全的esp32监控 部署起来会麻烦一些 但功能更加完善 说明 本方案为esp
  • FPGA的基础结构

    深入理解 FPGA 的基础结构 知乎 zhihu com 原理和结构 FPGA的构成要素 逻辑要素 逻辑块 Logic Block LB 用于实现逻辑电路 可编程逻辑的逻辑块的实现方式有乘积项 查找表 数据选择器 Multiplexer M
  • 搭建三节点的kubernetes(K8S)集群

    Kubernates安装配置文档 先决条件 1 需要的yaml文件所在的github地址如下 https github com luckylucky421 kubernetes1 17 3 tree master 2 下文里初始化k8s集群
  • Jupyter notebook快速入门教程

    本篇将给大家介绍一款超级好用的工具 Jupyter notebook 为什么要介绍这款工具呢 如果你想使用Python学习数据分析或数据挖掘 那么它应该是你第一个应该知道并会使用的工具 它很容易上手 用起来非常方便 是个对新手非常友好的工具
  • Matlab快速创建矩阵的方法(创建特殊矩阵)

    在matlab的使用过程中经常会需要用到矩阵 有时想要创建一些数据比较多的矩阵 对矩阵的内容要求可能并不高或者要创建一些特殊矩阵 下面将提供一些matlab内部提供的一些快速创建矩阵的方法 1 创建单位矩阵 eye n 创建n n的单位矩阵
  • GitHub托管HTML页面,让其他人轻松访问自己的页面

    如何通过GitHub来托管自己写的HTML页面 能够轻松让其他人访问你的页面 还可以通过GitHub让多人参与进来你的项目 以下是详细步骤 1 创建账户 登陆https github com 注册成功 1 https guides gith
  • SpringBoot2.0学习笔记:(九) Spring Boot中集成Mybatis与Druid

    一 项目的搭建 Druid对Spring boot做了很好的适配 所有的工作都只需要在配置文件中完成 具体的Druid在Spring Boot中的配置可以看 GitHub文档 首先看一下项目引入的jar包
  • flink学习46:flinkSQL自定义函数

    标量函数 实例 表值函数 聚合函数
  • 点击登录按钮弹出登录模态框

  • 拯救者y7000笔记本VMware虚拟机打开蓝屏问题

    VMware虚拟机安装后开启虚拟机蓝屏检查步骤 一 必须确定你的CPU开启了虚拟化才行 要先开启虚拟化再去控制面板里设置 查看是否开启虚拟化方法 在win10系统最下方任务栏空白处 右键鼠标打开任务管理器 也可以点击快捷键Ctrl Alt
  • go语言实现邮件发送

    go语言实现邮件发送 安装相关的包 go get github com jordan wright email 代码篇 package main import fmt github com jordan wright email log n
  • Zotero软件与ChatGPT连用模版

    Zotero软件与ChatGPT连用模版 整体流程 其他配置 全文 AskPDF position 10 color 0EA293 trigger 本文 这篇文章 论文 You are a helpful assistant Context
  • 缓存一致性问题解决方案

    通常情况下 我们使用缓存的主要目的是为了提升查询的性能 大多数情况下 是这样使用缓存的 当数据库有数据更新时 在很长的一段时间内 决定于缓存的过期时间 用户请求从缓存中获取到的都可能是旧值 而非数据库的最新值 那么 该如何更新缓存呢 目前有
  • Python实现电商订单的数据分析

    一 数据信息 数据集 阿里云天池 数据来源 说明 本数据集共有104557条数据 共计11个字段 字段 id 序号 orderID 订单id userID 用户id goodsID 商品id orderAmount 订单总额 payment
  • 【Python刷题】P1

    Python刷题P1 第一题 第二题 第一题 1 给定一个非空的字符串 s 检查是否可以通过由它的一个子串重复多次构成 示例 1 输入 s abab 输出 true 解释 可由子串 ab 重复两次构成 示例 2 输入 s aba 输出 fa
  • C语言程序设计(谭浩强第五版)——例题

    C语言程序设计 谭浩强第五版 例题 第1章 程序设计和C语言 第2章 算法 程序的灵魂 第3章 最简单的C程序设计 顺序程序设计 第4章 选择结构程序设计 第5章 循环结构程序设计 第6章 利用数组处理批量数据 第7章 用函数实现模块化程序
  • 【算法基础】基于pytorch的BP神经网络算法代码+数据集

    实现功能 1 数据回归 基于多输入单输出数据集 2 代码最后使用matplotlib绘制了 训练次数 loss值 折线图进行训练结果展示 注 1 代码亲测可成功运行 2 以下代码通过cuda调用GPU训练 如果cuda报错则需检查GPU训练