pytorch中如何基于训练集前1000个实例创建TabularDataset
训练集前1000实例创建TabularDataset的实现方案
完全可以实现该需求,不需要额外修改原有数据存储结构,有两种适配你现有代码逻辑的落地方式,同时可以先修正你当前代码里的基础语法问题。
现有代码的基础问题修正
你编写的
TabularDataset.splits调用存在重复关键字参数的语法问题:方法调用里连续写了两次path参数、两次train文件路径,这种写法在Python中会直接触发重复关键字参数的运行报错,根本无法正常执行,调整前需要先把重复参数梳理通顺。
两种可行的子集创建方式
方式一:截取训练文件生成临时子集文件后加载
这种方式改动最小,完全兼容你原本的TabularDataset使用逻辑,适合对TorchText加载流程做最小修改的场景:
- 操作步骤:
- 读取原全量训练CSV文件,跳过表头后截取前1000条样本,写入一个独立的临时子集CSV文件
- 调用
TabularDataset.splits时,将训练集路径替换为这个临时子集文件路径即可
- 参考代码:
import pandas as pd # 读取全量训练数据并截取前1000条 full_train_df = pd.read_csv("/content/drive/MyDrive/axcs_train.csv") train_subset_df = full_train_df.iloc[:1000, :] # 保存为临时子集文件 train_subset_df.to_csv("/content/drive/MyDrive/axcs_train_1000subset.csv", index=False) # 修正参数后的TabularDataset加载逻辑 train_data, test_data = TabularDataset.splits( path='/content/drive/MyDrive', train='axcs_train_1000subset.csv', test='axcs_test.csv', format='csv', skip_header=True, fields=tv_datafields )
方式二:加载全量数据集后内存切片取前1000样本
这种方式不需要生成额外的临时存储文件,完全在内存中完成子集构建:
- 操作步骤:
- 先按正常逻辑加载全量的训练、测试TabularDataset实例
- 利用TorchText Dataset类原生支持下标切片的特性,直接截取训练集的前1000个样本作为最终训练数据集
- 参考代码:
# 加载全量训练、测试TabularDataset(已修正重复参数) full_train_data, test_data = TabularDataset.splits( path='/content/drive/MyDrive', train='axcs_train.csv', test='axcs_test.csv', format='csv', skip_header=True, fields=tv_datafields ) # 直接在内存中切片获取前1000个训练样本 train_data = full_train_data[:1000]
- 特性说明:切片生成的子集与原全量数据集共享样本内存,不会产生多余的存储开销,可以直接传入后续的迭代器构建、RNN模型训练流程正常使用。
内容的提问来源于stack exchange,提问作者A_John
相关产品推荐
相关产品推荐

