基于Pytorch实现自建数据库的深度神经网络模型案例
引言
本文将详细介绍如何使用自建数据库实现简单的深层神经网络模型。
首先载入相关库:
import torch
import torch.nn as nn
from torch.utils.data import DataLoader,Dataset
import numpy as np
import torch.optim as optim
import xlrd
import matplotlib as mpl
import matplotlib.pyplot as plt #导入画图库
from sklearn import preprocessing
设定自己的数据库:
class Mydataset(Dataset):def __init__(self,filepath):datalist=[]data = xlrd.open_workbook(filepath, encoding_override='utf-8')table = data.sheets()[0] # 选定表sheet1 或sheet2 0表示sheet1 1表示sheet2nrows = table.nrows # 获取行号ncols = table.ncols # 获取列号'''def __init__(self,filepath):xy = np.loadtxt(filepath,delimiter=' ',dtype=np.float)self.x_data = torch.from_numpy(data_scaler.fit_transform(datalist[:,:-1]))self.y_data = torch.from_numpy(xy[:,[-1]])'''for i in range(0, nrows): # 第0行为表头alldata = table.row_values(i) # 循环输出excel表中每一行,即所有数据datalist.append(alldata) # 创建datalist = np.array(datalist,dtype=np.float32) #将获取的数据全部转换成数组浮点数self.len = datalist.shape[0]self.x_data = torch.from_numpy(data_scaler.fit_transform(datalist[:,:-1])) #将特征输入归一化self.y_data = torch.from_numpy(datalist[:,[-1]])print("数据已录入")def __getitem__(self, index):return self.x_data[index],self.y_data[index]def __len__(self):return self.len
看完不会你揍我!!Pytorch利用文本数据建立自己的数据集- Dataset Dataloader详解 附案例_阿进olipe的博客-CSDN博客
Dataloader加载数据:
#1、使用Dataset 建立自己的数据库
Mydata=Mydataset(Work_inpath)
'''
print(Mydata.x_data)
print(Mydata.y_data)
'''
#2、使用DataLoader 构建训练加载
train_loader=DataLoader(dataset=Mydata,batch_size=20,shuffle=True,num_workers=0)
神经网络通道的建立:
class Model(nn.Module):def __init__(self, n_chansl=4):super().__init__()self.n_chansl = n_chanslself.fc1 = nn.Linear(n_chansl, 16)self.fc2 = nn.Linear(16, 8)self.fc3 = nn.Linear(8,3)self.fc4 = nn.Linear(3, 1)def forward(self,x):out = x.view(-1,self.n_chansl)out = torch.relu(self.fc1(out))out = torch.relu(self.fc2(out))out = torch.relu(self.fc3(out))out = torch.relu(self.fc4(out))return out
其中
def __init__(self, n_chansl=4):
表示建立神经网络初始层,输入特征为4 。
def forward(self,x):
表示建立向前传递规则。
定义训练规则:
def trainingmodel(n_epoch):for epoch in range(n_epoch+1):for data in train_loader: #enumerate(train_loader)函数表示遍历train_loader中的所有函数'1、准备数据'inputs, label = data'2、向前传播'y_pred = model(inputs)loss = criterion(y_pred,label)print(epoch,loss.item())epoch_list.append(epoch)loss_list.append(loss)'3、向后传播损失函数'optimizer.zero_grad()loss.backward()'4、更新权重参数'optimizer.step() #优化器向前def trainingmodel(n_epoch):for epoch in range(n_epoch+1):for data in train_loader: #enumerate(train_loader)函数表示遍历train_loader中的所有函数'1、准备数据'inputs, label = data'2、向前传播'y_pred = model(inputs)loss = criterion(y_pred,label)print(epoch,loss.item())epoch_list.append(epoch)loss_list.append(loss)'3、向后传播损失函数'optimizer.zero_grad()loss.backward()'4、更新权重参数'optimizer.step() #优化器向前
MSE损失值绘图:
#以下两行用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
mpl.rcParams['legend.fontsize'] = 30 #线段标签 字体大小#定义画布大小
fig = plt.figure(figsize=(20,20),dpi=72) #创造一个画布
plt.xlabel('训练步数',size=20,labelpad=20)
plt.ylabel('损失值',size=20,labelpad=20)
plt.plot(epoch_list,new_loss_list,label='MSE损失值',color='blue',linestyle='-',marker='o') #画点plt.scatter()
plt.legend()
plt.show()
效果展示:
完整代码:
import torch
import torch.nn as nn
from torch.utils.data import DataLoader,Dataset
import numpy as np
import torch.optim as optim
import xlrd
import matplotlib as mpl
import matplotlib.pyplot as plt #导入画图库
from sklearn import preprocessingdevice=(torch.device('cuda') if torch.cuda.is_available()else torch.device('cpu'))
Work_inpath = r'C:\Users\Administrator\Desktop\2.xlsx'
new_loss_list = []
data_scaler = preprocessing.MinMaxScaler(feature_range = (0,1))class Mydataset(Dataset):def __init__(self,filepath):datalist=[]data = xlrd.open_workbook(filepath, encoding_override='utf-8')table = data.sheets()[0] # 选定表sheet1 或sheet2 0表示sheet1 1表示sheet2nrows = table.nrows # 获取行号ncols = table.ncols # 获取列号'''def __init__(self,filepath):xy = np.loadtxt(filepath,delimiter=' ',dtype=np.float)self.x_data = torch.from_numpy(data_scaler.fit_transform(datalist[:,:-1]))self.y_data = torch.from_numpy(xy[:,[-1]])'''for i in range(0, nrows): # 第0行为表头alldata = table.row_values(i) # 循环输出excel表中每一行,即所有数据datalist.append(alldata) # 创建datalist = np.array(datalist,dtype=np.float32) #将获取的数据全部转换成数组浮点数self.len = datalist.shape[0]self.x_data = torch.from_numpy(data_scaler.fit_transform(datalist[:,:-1])) #将特征输入归一化self.y_data = torch.from_numpy((datalist[:,[-1]]))print('数据录入成功')def __getitem__(self, index):return self.x_data[index],self.y_data[index]def __len__(self):return self.len#1、使用Dataset 建立自己的数据库
Mydata=Mydataset(Work_inpath)
'''
print(Mydata.x_data)
print(Mydata.y_data)
'''
#2、使用DataLoader 构建训练加载
train_loader=DataLoader(dataset=Mydata,batch_size=20,shuffle=True,num_workers=0)class Model(nn.Module):def __init__(self, n_chansl=4):super().__init__()self.n_chansl = n_chanslself.fc1 = nn.Linear(n_chansl, 16)self.fc2 = nn.Linear(16, 8)self.fc3 = nn.Linear(8,3)self.fc4 = nn.Linear(3, 1)def forward(self,x):out = x.view(-1,self.n_chansl)out = torch.relu(self.fc1(out))out = torch.relu(self.fc2(out))out = torch.relu(self.fc3(out))out = torch.relu(self.fc4(out))return outmodel = Model()
criterion = torch.nn.MSELoss() #定义损失函数
optimizer = torch.optim.SGD(model.parameters(),lr=0.001)epoch_list = []
loss_list = []
def trainingmodel(n_epoch):for epoch in range(n_epoch+1):for data in train_loader: #enumerate(train_loader)函数表示遍历train_loader中的所有函数'1、准备数据'inputs, label = data'2、向前传播'y_pred = model(inputs)loss = criterion(y_pred,label)print(epoch,loss.item())epoch_list.append(epoch)loss_list.append(loss)'3、向后传播损失函数'optimizer.zero_grad()loss.backward()'4、更新权重参数'optimizer.step() #优化器向前
train_model=trainingmodel(10000)
print(epoch_list)
for i in loss_list:new_loss_list.append(float(i))
print(new_loss_list)#以下两行用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
mpl.rcParams['legend.fontsize'] = 30 #线段标签 字体大小#定义画布大小
fig = plt.figure(figsize=(20,20),dpi=72) #创造一个画布
plt.xlabel('训练步数',size=20,labelpad=20)
plt.ylabel('损失值',size=20,labelpad=20)
plt.plot(epoch_list,new_loss_list,label='MSE损失值',color='blue',linestyle='-',marker='o') #画点plt.scatter()
plt.legend()
plt.show()
创作不易,可不可以请您动动宝贵的手指给我顶个赞呢??
非常感谢,祝您有个愉快的一天!!
基于Pytorch实现自建数据库的深度神经网络模型案例相关推荐
- 【火炉炼AI】深度学习003-构建并训练深度神经网络模型
[火炉炼AI]深度学习003-构建并训练深度神经网络模型 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotl ...
- 深度神经网络模型压缩与加速研究综述
深度神经网络模型压缩与加速研究综述 文章目录 深度神经网络模型压缩与加速研究综述 前言 介绍 PARAMETER PRUNING AND SHARING A. quantization and bin ...
- 用于异常检测的深度神经网络模型融合
用于异常检测的深度神经网络模型融合 在当今的数字时代,网络安全至关重要,因为全球数十亿台计算机通过网络连接.近年来,网络攻击的数量大幅增加.因此,网络威胁检测旨在通过观察一段时间内的流量数据来检测这些 ...
- Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别
Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 # -*- codin ...
- 深度神经网络模型剪枝
深度神经网络模型剪枝 神经网络剪枝 Neural Network Pruning 下面是我对剪枝的一点点理解,如有理解不到位,请大家指正 ▶剪枝只是将模型中权重比较小,对输出影响不大的神经元参数置0, ...
- Rich Caruana:压缩深度神经网络模型让你兼得可解释性与准确性!
来源: 微软研究院AI头条 本文共1757字,建议阅读5分钟. 本文讲述了在机器学习的世界里,准确性和可解释性总是不可兼得:复杂的模型准确但令人费解,简单的模型容易理解也容易出错. [ 导读 ]微软研 ...
- 深度神经网络模型压缩方法总结
新的卷积计算方法 这种是直接提出新的卷积计算方式,从而减少参数,达到压缩模型的效果,例如SqueezedNet,mobileNet 1. SqueezeNet: AlexNet-level accur ...
- 六、25个深度神经网络模型
文章目录 1. 引言 1. 引言 在深度学习十分火热的今天,不时会涌现出各种新型的人工神经网络,想要实时了解这些新型神经网络的架构还真是不容易.光是知道各式各样的神经网络模型缩写(如:DCIGN.Bi ...
- 深度神经网络模型有哪些,深度神经网络预测模型
神经网络.深度学习.机器学习是什么?有什么区别和联系? 深度学习是由深层神经网络+机器学习造出来的词.深度最早出现在deepbeliefnetwork(深度(层)置信网络).其出现使得沉寂多年的神经网 ...
- 当前深度神经网络模型压缩和加速都有哪些方法?
在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...
最新文章
- Android视图状态及重绘流程分析,带你一步步深入了解View(三)
- SSL与HTTPS,HTTP有什么联系
- 微商相册一直显示服务器偷懒,【小程序】微商个人相册多端小程序源码以及安装...
- 给定一个由n个数字组成的数组,请检查是否存在重复项
- 浅谈OpenGL、OpenGL ES
- 异常处理汇总-服务器系列
- 数据库事务隔离级别转
- JWT(JSON Web Token)的基本原理
- Linux内核启动:setup_arch
- Oracle 备份与恢复学习笔记(14)
- OpenGL 坐标变换(2)
- 论文阅读-目标检测(2019)-CenterNet:目标检测转化为关键点检测及其属性回归
- 数字图像处理(19): 边缘检测算子(Roberts算子、Prewitt算子、Sobel算子 和 Laplacian算子)
- 【3dmax千千问】初学3dmax插件神器第20课:3dmax渲染教程|效果图大师和疯狂模渲大师怎么使用3dmax软件自带的渲染器去设计并渲染三维效果图场景的3dmax模型?
- 出现这种情况是什么原因呢?
- 2022 互联网中秋月饼大赏,腾讯送火腿,字节寓意圆满,你最钟爱哪款呢?(文末有抽奖)...
- 详细讲解BM字符串搜索算法
- 报错已加载插件:fastestmirror, langpacksLoading mirror speeds from cached hostfileThere are no enabled repos
- 线性代数:通过向量组个数和维数判别向量组线性相关性
- Visio画UML类图