pytorch如何生成小批量数据并传入神经网络?

2023-12-05

pytorch如何生成小批量数据并传入神经网络?

本文将为大家介绍如何将Excel表格、CSV文件、以及随机生成的数据转换为能够输入到PyTorch神经网络中的小批量数据。

我们将分别介绍这三种情况,并提供详细的Python代码示例,以帮助读者深入理解数据预处理的过程。

第一部分:Excel表格数据的预处理

1.1 加载Excel数据

我们首先需要安装pandas库,这个库是Python中用于处理表格数据的标准库。我们可以使用pandas库中的read_excel函数来读取Excel文件中的数据。下面是一个简单的代码示例:

import pandas as pd

# 读取Excel文件
df = pd.read_excel('data.xlsx')

# 显示前5行数据
print(df.head())

1.2 数据清洗

在读取Excel数据之后,我们需要对数据进行清洗。数据清洗是指将数据中的无效值、缺失值、重复值等无用数据删除或填充,使数据更加规范、准确。

1.2.1 删除无用数据

我们可以使用pandas库中的drop函数来删除无用数据。下面是一个代码示例:

# 删除“ID”列
df.drop(['ID'], axis=1, inplace=True)

# 删除含有缺失值的行
df.dropna(inplace=True)

# 删除重复的行
df.drop_duplicates(inplace=True)

# 重新设置索引
df.reset_index(drop=True, inplace=True)

1.2.2 填充缺失值

如果数据中存在缺失值,我们可以使用pandas库中的fillna函数来填充缺失值。下面是一个代码示例:

# 将缺失值填充为0
df.fillna(0, inplace=True)

1.2.3 数据类型转换

在对数据进行清洗之后,我们需要对数据类型进行转换。在机器学习中,通常需要将数据转换为浮点数或整数类型。

# 将“年龄”列转换为整数类型
df['Age'] = df['Age'].astype(int)

# 将“收入”列转换为浮点数类型
df['Income'] = df['Income'].astype(float)

1.3 将数据转换为张量

在数据清洗之后,我们需要将数据转换为张量,以便于将其输入到神经网络中。我们可以使用torch库中的Tensor函数来创建张量。下面是一个代码示例:

import torch

# 将数据转换为张量
data = torch.Tensor(df.values)

1.4 创建数据集和数据加载器

最后,我们需要将数据集分为训练集和测试集,并创建相应的数据加载器。我们可以使用torch.utils.data中的Dataset和DataLoader类来实现这一过程

1.4.1 创建数据集

在创建数据集时,我们需要定义__len__和__getitem__函数。其中__len__函数返回数据集的大小,__getitem__函数根据给定的索引返回数据集中的数据。下面是一个代码示例:

from torch.utils.data import Dataset

class ExcelDataset(Dataset):
    def __init__(self, data):
        self.data = data

    def __len__(self):
        return len(self.data)

    def __getitem__(self, index):
        x = self.data[index, :-1] # 输入数据
        y = self.data[index, -1] # 输出数据
        return x, y

1.4.2 创建数据加载器

在创建数据加载器时,我们需要指定批量大小和是否对数据进行随机打乱。下面是一个代码示例:

from torch.utils.data import DataLoader

# 创建训练集和测试集
train_data = data[:800, :]
test_data = data[800:, :]

# 创建训练集和测试集的数据集
train_dataset = ExcelDataset(train_data)
test_dataset = ExcelDataset(test_data)

# 创建训练集和测试集的数据加载器
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

第二部分:CSV文件数据的预处理

2.1 加载CSV数据

与加载Excel数据类似,我们可以使用pandas库中的read_csv函数来读取CSV文件中的数据。下面是一个简单的代码示例:

import pandas as pd

# 读取CSV文件
df = pd.read_csv('data.csv')

# 显示前5行数据
print(df.head())

2.2 数据清洗

在读取CSV数据之后,我们需要对数据进行清洗。数据清洗的过程与Excel数据清洗的过程类似,我们不再赘述。

2.3 将数据转换为张量

在数据清洗之后,我们需要将数据转换为张量。与Excel数据转换类似,我们可以使用torch库中的Tensor函数来创建张量。下面是一个代码示例:

import torch

# 将数据转换为张量
data = torch.Tensor(df.values)

2.4 创建数据集和数据加载器

在创建数据集和数据加载器时,与Excel数据相似,我们同样需要定义__len__和__getitem__函数,并使用torch.utils.data中的Dataset和DataLoader类来创建数据集和数据加载器。下面是一个代码示例:

from torch.utils.data import Dataset, DataLoader

class CSVDataset(Dataset):
    def __init__(self, data):
        self.data = data

    def __len__(self):
        return len(self.data)

    def __getitem__(self, index):
        x = self.data[index, :-1] # 输入数据
        y = self.data[index, -1] # 输出数据
        return x, y

# 创建训练集和测试集
train_data = data[:800, :]
test_data = data[800:, :]

# 创建训练集和测试集的数据集
train_dataset = CSVDataset(train_data)
test_dataset = CSVDataset(test_data)

# 创建训练集和测试集的数据加载器
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)



第三部分:随机生成数据的预处理

3.1 生成随机数据

# 在生成随机数据时,我们可以使用`numpy`库中的`random`函数来生成一定数量的随机数据。下面是一个代码示例:
import numpy as np
# 生成1000个随机数据
data = np.random.rand(1000, 5)
# 显示前5行数据
print(data[:5])

3.2 将数据转换为张量

在生成随机数据之后,我们同样需要将数据转换为张量。与Excel数据和CSV数据转换类似,我们可以使用torch库中的Tensor函数来创建张量。下面是一个代码示例:

import torch

# 将数据转换为张量
data = torch.Tensor(data)

3.3 创建数据集和数据加载器

在创建数据集和数据加载器时,与Excel数据和CSV数据相似,我们同样需要定义__len__和__getitem__函数,并使用torch.utils.data中的Dataset和DataLoader类来创建数据集和数据加载器。下面是一个代码示例:

from torch.utils.data import Dataset, DataLoader

class RandomDataset(Dataset):
    def __init__(self, data):
        self.data = data

    def __len__(self):
        return len(self.data)

    def __getitem__(self, index):
        x = self.data[index, :-1] # 输入数据
        y = self.data[index, -1] # 输出数据
        return x, y

# 创建训练集和测试集
train_data = data[:800, :]
test_data = data[800:, :]

# 创建训练集和测试集的数据集
train_dataset = RandomDataset(train_data)
test_dataset = RandomDataset(test_data)

# 创建训练集和测试集的数据加载器
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

第四部分:神经网络模型的构建和训练

4.1 定义神经网络模型

在定义神经网络模型时,我们可以使用torch.nn中的模块来构建神经网络。下面是一个简单的多层感知机模型的代码示例:

import torch.nn as nn

class MLP(nn.Module):
    def __init__(self):
        super(MLP, self).__init__()
        self.fc1 = nn.Linear(4, 10)
        self.fc2 = nn.Linear(10, 2)

    def forward(self, x):
        x = nn.functional.relu(self.fc1(x))
        x = self.fc2(x)
        return x

4.2 定义损失函数和优化

在定义损失函数和优化器时,我们可以使用torch.nn和torch.optim中的函数来定义。下面是一个代码示例:

import torch.nn as nn
import torch.optim as optim

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001)

4.3 训练模型

在训练模型时,我们需要遍历整个数据集并更新模型的权重。下面是一个代码示例:

# 定义训练函数
def train(model, train_loader, criterion, optimizer, epoch):
    model.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 10 == 0:
            print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx * len(data), len(train_loader.dataset),
                100. * batch_idx / len(train_loader), loss.item()))

# 定义测试函数
def test(model, test_loader, criterion):
    model.eval()
    test_loss = 0
    correct = 0
    with torch.no_grad():
        for data, target in test_loader:
            output = model(data)
            test_loss += criterion(output, target).item()
            pred = output.argmax(dim=1, keepdim=True)
            correct += pred.eq(target.view_as(pred)).sum().item()

    test_loss /= len(test_loader.dataset)
    print('Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)'.format(
        test_loss, correct, len(test_loader.dataset),
        100. * correct / len(test_loader.dataset)))

# 训练模型
for epoch in range(1, 11):
    train(model, train_loader, criterion, optimizer, epoch)
    test(model, test_loader, criterion)

第五部分:完整代码示例

import pandas as pd
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
import torch.nn as nn
import torch.optim as optim

# 第一部分:Excel数据的预处理

# 读取Excel文件
dataframe = pd.read_excel('data.xlsx')
data = dataframe.to_numpy()

# 将数据转换为张量
data = torch.Tensor(data)

# 创建数据集和数据加载器
class ExcelDataset(Dataset):
    def __init__(self, data):
        self.data = data

    def __len__(self):
        return len(self.data)

    def __getitem__(self, index):
        x = self.data[index, :-1] # 输入数据
        y = self.data[index, -1] # 输出数据
        return x, y

train_data = data[:800, :]
test_data = data[800:, :]

train_dataset = ExcelDataset(train_data)
test_dataset = ExcelDataset(test_data)

train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

# 第二部分:CSV数据的预处理

# 读取CSV文件
dataframe = pd.read_csv('data.csv', header=None)
data = dataframe.to_numpy()

# 将数据转换为张量
data = torch
Tensor(data)

# 创建数据集和数据加载器
class CSVDataset(Dataset):
	def init(self, data):
		self.data = data
    def __len__(self):
    	return len(self.data)

    def __getitem__(self, index):
        x = self.data[index, :-1] # 输入数据
        y = self.data[index, -1] # 输出数据
        return x, y

train_data = data[:800, :]
test_data = data[800:, :]

train_dataset = CSVDataset(train_data)
test_dataset = CSVDataset(test_data)

train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

第三部分:随机生成数据的预处理

# 
# 随机生成数据
data = np.random.rand(1000, 5)
data = np.concatenate((data, np.random.randint(0, 2, size=(1000, 1))), axis=1)

# 将数据转换为张量
data = torch.Tensor(data)

# 创建数据集和数据加载器
class RandomDataset(Dataset):
	def init(self, data):
		self.data = data
    def __len__(self):
    	return len(self.data)

    def __getitem__(self, index):
        x = self.data[index, :-1] # 输入数据
        y = self.data[index, -1] # 输出数据
        return x, y

train_data = data[:800, :]
test_data = data[800:, :]

train_dataset = RandomDataset(train_data)
test_dataset = RandomDataset(test_data)

train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

第四部分:定义模型、损失函数和优化器

# 
# 定义模型
class Net(nn.Module):
	def init(self):
		super(Net, self).init()
		self.fc1 = nn.Linear(5, 10)
		self.fc2 = nn.Linear(10, 2)
    def forward(self, x):
    	x = torch.relu(self.fc1(x))
    	x = self.fc2(x)
    	return x
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001)

第五部分:训练模型

# 
# 定义训练函数
def train(model, train_loader, criterion, optimizer, epoch):
	model.train()
	for batch_idx, (data, target) in enumerate(train_loader):
	optimizer.zero_grad()
	output = model(data)
	loss = criterion(output, target)
	loss.backward()
	optimizer.step()
	if batch_idx % 10 == 0:
		print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
			epoch, batch_idx * len(data), len(train_loader.dataset),
				100. * batch_idx / len(train_loader), loss.item()))

# 定义测试函数
def test(model, test_loader, criterion):
	model.eval()
	test_loss = 0
	correct = 0
	with torch.no_grad():
	for data, target in test_loader:
		output = model(data)
		test_loss += criterion(output, target).item()
		pred = output.argmax(dim=1, keepdim=True)
		correct += pred.eq(target.view_as(pred)).sum().item()
        test_loss

第六部分:训练和测试模型

# 
# 训练模型

for epoch in range(1, 11):
	train(model, train_loader, criterion, optimizer, epoch)

# 测试模型
test_loss = test(model, test_loader, criterion)
test_accuracy = 100. * correct / len(test_loader.dataset)
print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
test_loss, correct, len(test_loader.dataset), test_accuracy))

# 第七部分:保存和加载模型
# 保存模型
torch.save(model.state_dict(), 'model.pth')

# 加载模型
model.load_state_dict(torch.load('model.pth'))	

第六部分:结论

在本文中,我们介绍了如何将Excel的数据、CSV文件数据和随机生成的数据转换为能够放入神经网络的小批量数据。

我们使用了PyTorch中的数据集和数据加载器来处理数据,并定义了一个简单的神经网络模型,使用交叉熵损失和随机梯度下降优化器来训练模型。我们还展示了如何保存和加载模型,以便在以后使用。希望本文对初学者有所帮助。

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

pytorch如何生成小批量数据并传入神经网络? 的相关文章

随机推荐

  • 【MyBatisPlus】MyBatisPlus之id生成策略的方法

    MyBatisPlus之id生成策略的方法 在使用MyBatisPlus框架进行开发时 我们通常需要为实体类设计主键的生成策略 MyBatisPlus提供了多种主键生成策略 本文将介绍这些策略的用法 雪花算法策略 雪花算法是Twitter公
  • Qt designer中使用QSplitter创建推拉窗口,类似 Cobalt Strike 中主界面上下推拉的窗口

    参考链接 Qt designer中使用QSplitter创建推拉窗口 qt designer splitter CSDN博客 Qt Designer中如何添加QSplitter qtdesigner splitter CSDN博客 QSpl
  • 陶瓷材料硬度怎么测量?-科学指南针

    硬度是衡量材料力学性能的一 项重要指标 它是指物体抵抗外力进入其中的能力 即由于其他物体给与的外力与物体的形变尺寸之间的关系 陶瓷材料作为无机非金属材料的一个重要 类 取得了很大的发展 结构陶瓷以其高机械强度 高硬度 耐腐蚀性等忧点被广泛用
  • 基于java中SSM框架实现图书管理系统的设计演示【附项目源码+论文说明】

    基于java中SSM框架实现图书管理系统的设计演示 摘要 随着科学技术的飞速发展 社会的方方面面 各行各业都在努力与现代的先进技术接轨 通过科技手段来提高自身的优势 羽毛球馆场地管理当然也不能排除在外 基于web的图书管理系统是以实际运用为
  • SQL语句大全—解决方案

    1 用order by select top 30 recid from A order by ricid 如果该字段不是自增长 就会出现问题 2 在那个子查询中也加条件 select top 30 recid from A where r
  • 陶瓷材料检测项目及标准-科学指南针

    陶瓷原材料是用纯天然或生成化学物质历经成型和高溫煅烧做成的一类无机非金属原材料 它具备高溶点 高韧性 高耐磨性能 耐空气氧化等优势 可作为构造原材料 刀具材质 因为陶瓷还具备一些独特的性能 又可做为新型功能材料 各检测组织针对陶瓷检测的新项
  • 8年测试老鸟从业心得:软件测试员最核心的竞争力究竟是什么?

    无论从事哪一个行业 核心竞争力都是绕不开的一个话题 提高核心竞争力是我们一生中的重要课题 它保障了我们不会被替代 即在竞争中别人都争不过你 只有你才做得到的某种能力 对于测试员而言 究竟何为这个岗位的核心竞争力 对于初入职场的我而言 着实困
  • 测试管理岗位的技能提升及管理应用有哪些?

    是否需要选择管理岗 建议 如果个人有机会成为管理岗 那就抓紧了 原因很简单 我认为市场的行业发展是这个样子的 专业化的技术人员一定是市场缺失的人才 但是相比较而言 管理者会更加被公司需要 同时 管理岗会让你在这个行业持续更长时间 薪资也相对
  • Docker 一些设置

    一 时间设置 如果容器已经运行了 docker exec it 容器名或id bash mkdir p usr share zoneinfo Asia exit docker cp usr share zoneinfo Asia Shang
  • APP测试设计要点

    app的安装与升级 升级中用户数据 设置 状态的保留 特别注意新版本已去掉的状态或设置 是否可以隔开版本覆盖安装 是否可以覆盖安装更低版本 卸载安装 安装目录清理 SD卡存储数据不被清理 在没有更新或网络时 需要给予用户正确的信息表达 如果
  • 你会使用图片格式转换工具免费方法吗?教你转换格式吧

    前两天在网上看见一个聊天记录 是一个博主小A发的和老板的对话 小A 老板 这是你让我制作的我们产品的动图 你看看可以吗 发送了一张GIF 老板 不错不错 这次做的很好看 下周一我们开会的时候要用到这个图片 你记得把它打印出来 到时候给我一份
  • 高效整理文件的技巧和方法

    在日常生活和工作中 我们经常需要处理大量的文件 包括文档 图片 视频等 如果不能有效地整理这些文件 不仅会浪费大量的时间和精力 还可能导致重要文件的丢失或难以找到 因此 掌握一些整理文件的技巧方法是非常必要的 本文将介绍一些高效整理文件的技
  • 《VirtualLab Fusion物理光学实验教程》好书分享

    目录 第一章 物理光学概念介绍 6 1 1 几何光学和光线追迹 6 1 2 物理光学和光场追迹 6 1 3 电场 磁场以及坡印廷矢量 8 1 4 振幅 相位及实部和虚部 9 1 5 振幅 相位与偏振 10 1 6菲涅尔公式 11 1 7 全
  • Nginx配置文件全解析【深度剖析细节】

    简介 Nginx就是一个高性能的Web服务器和反向代理服务器 它可以处理大量的并发连接 支持高速缓存 负载均衡 SSL TLS终止 HTTP 2协议等功能 本篇主要讲述nginx的核心配置以及配置分析和优化 能够应用到你企业生产中为目的 基
  • 被确诊为“不适合保研”了……

    写在前面 伴随着 读研热 同辈压力 内卷 焦虑也成为了我们这一代人中的热词 作为同年级里的佼佼者 大多数保研er们无时无刻都不紧绷着心里的那根弦 可能在那些为了大创辗转反侧 为了绩点不停刷夜 为了论文焦头烂额的时候 保研er也许会犹豫 自己
  • MQ - 消息系统

    消息系统 1 消息系统的演变 在大型系统中 会需要和很多子系统做交互 也需要消息传递 在诸如此类系统中 你会找到源系统 消息发送方 和 目的系统 消息接收方 为了在这样的消息系统中传输数据 你需要有合适的数据管道 如下 这种数据的交互看起来
  • Mover Creator 用户界面

    1 开始 对话框 首次打开 Mover Creator 时 出现的第一个页面是 开始 对话框 如下所示 从这里开始 用户可以选择开始设计飞机 武器或发动机 在上述每种情况下 用户都可以创建新模型或编辑现有模型 1 1 新建模型 如果用户选择
  • 卷积神经网络中用1*1 卷积有什么作用或者好处呢?

    一 来源 1312 4400 Network In Network 如果1 1卷积核接在普通的卷积层后面 配合激活函数 即可实现network in network的结构 二 应用 GoogleNet中的Inception ResNet中的
  • 粗糙表面上的反射

    建模任务 当设计光学元件或组件时 由于制造工艺引入的偏差 最终元件的功能和理想模型并不一样 为了在本示例中模拟此效果 我们使用随机函数来创建粗糙曲面 此外 还研究了由表面不平度引起的散射效应 任务描述 粗糙表面 表面后的光场
  • pytorch如何生成小批量数据并传入神经网络?

    pytorch如何生成小批量数据并传入神经网络 第一部分 Excel表格数据的预处理 1 1 加载Excel数据 1 2 数据清洗 1 2 1 删除无用数据 1 2 2 填充缺失值 1 2 3 数据类型转换