Day 38 Dataset和Dataloader类

@浙大疏锦行

先回顾一下之前的实操部分

针对信贷数据集对day33-day37的内容进行一下实操

数据准备

# 数据准备
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
# 加载信贷数据集
TARGET_COLUMN = 'Credit Default'
data = pd.read_csv('data.csv')
X = data.drop(TARGET_COLUMN, axis=1)
y = data[TARGET_COLUMN]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 打印下尺寸
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)

归一化,转化为张量

核心逻辑 :离散特征→独热编码(消除顺序)→数值特征归一化(消除量纲)→合并转张量(适配模型)。这一流程确保每种特征类型得到正确处理,为模型提供高质量输入

# 查看各列数据类型
print(X.dtypes)
# 筛选字符串类型列(分类特征)
categorical_cols = X.select_dtypes(include=['object']).columns.tolist()
print(f"分类特征列: {categorical_cols}")

from sklearn.preprocessing impo
<think>嗯,用户的问题是关于如何将PyTorchDataLoader的数据输入到模型中。我需要结合之前的对话提供的引用内容来回答。首先,用户之前询问了TrainerTrainingArguments的用法,现在转向更底层的DataLoader模型输入部分。根据引用[1],用户已经知道如何创建自定义数据集使用DataLoader,但可能对如何将DataLoader的输出连接到模型还不清楚。引用[2][3]提到DataLoader的作用是组合数据集采样器,生成可迭代的批次数据。所以,我需要解释DataLoader在训练循环中的使用步骤。用户可能需要一个分步指南,包括数据加载、模型定义、训练循环的结构,以及具体的代码示例。要确保代码正确,比如在模型前向传播时,DataLoader产生的数据如何解包。比如,在引用[1]的例子中,datalabel是从DataLoader中获取的,然后输入到模型。另外,用户可能对GPU数据传输、损失计算反向传播的步骤不太清楚,需要详细说明。还要注意引用格式,比如在解释DataLoader时引用[2][3],在示例代码部分引用[1]。还需要考虑常见问题,比如多GPU情况下的数据处理,或者自定义数据集时的注意事项。最后生成相关问题时,要围绕DataLoader的使用、数据预处理、多设备训练等展开。</think>### **如何将PyTorch DataLoader的数据输入到模型** 在PyTorch中,将`DataLoader`的输出输入到模型需要以下步骤: --- ### **1. 核心流程** #### **步骤1:定义数据加载器** ```python from torch.utils.data import DataLoader # 假设已定义数据集dataset(需继承torch.utils.data.Dataset) train_loader = DataLoader( dataset, batch_size=64, # 每批数据量 shuffle=True, # 是否打乱顺序 num_workers=4 # 多线程加载 ) ``` #### **步骤2:定义模型** ```python import torch.nn as nn class SimpleModel(nn.Module): def __init__(self): super().__init__() self.fc = nn.Linear(784, 10) # 示例:输入维度784,输出维度10 def forward(self, x): return self.fc(x) model = SimpleModel() ``` #### **步骤3:训练循环** ```python device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) # 将模型移至GPU optimizer = torch.optim.SGD(model.parameters(), lr=0.01) criterion = nn.CrossEntropyLoss() for epoch in range(10): for batch_idx, (data, labels) in enumerate(train_loader): # 将数据移至设备(GPU/CPU) data = data.to(device) labels = labels.to(device) # 前向传播 outputs = model(data) # 输入数据到模型 loss = criterion(outputs, labels) # 反向传播 optimizer.zero_grad() loss.backward() optimizer.step() ``` --- ### **2. 关键机制解析** 1. **数据加载** `DataLoader`将数据集按`batch_size`划分成多个批次,每次迭代返回一个批次的数据标签[^3]。例如,`batch_size=64`时,每个`data`的形状为$(64, \text{input\_dim})$[^2]。 2. **设备迁移** 使用`.to(device)`将数据从CPU转移到GPU,避免模型与数据不在同一设备导致的错误[^1]。 3. **前向传播** 模型通过`forward()`方法接收输入数据,返回预测结果。例如,对于分任务,输出为$(batch\_size, num\_classes)$的Tensor[^1]。 --- ### **3. 注意事项** - **数据格式对齐**:输入数据的维度需与模型定义的输入维度匹配。例如,全连接层输入应为$(batch\_size, 784)$,需在数据预处理时展平图像[^1]。 - **梯度清零**:每次反向传播前需调用`optimizer.zero_grad()`,否则梯度会累积[^1]。 - **自定义数据集**:若使用非标准数据格式,需在`Dataset`中实现`__getitem__`方法返回正确的数据格式[^3]。 --- ### **4. 示例扩展** #### **图像分任务** ```python # 假设数据为图像,形状为(3, 32, 32) data = data.view(data.size(0), -1) # 展平为(64, 3*32*32) outputs = model(data) ``` #### **多输入模型** 若模型需要多个输入(如文本+图像): ```python for batch in train_loader: text, image, labels = batch outputs = model(text, image) # 模型定义需支持多输入 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值