FASTAI从DataFrame创建DataLoaders报KeyError: 'is_valid'问题求助
问题原因
ColSplitter()默认会读取数据集里名为is_valid的布尔列来划分训练集和验证集,你当前使用的df2中不存在该列,因此触发KeyError报错。
另外你的DataBlock定义存在逻辑冲突:当设置is_lm=True时代表构建语言模型数据流水线,语言模型的标签由文本自动生成,不需要额外传入target分类标签,也不需要配套CategoryBlock。
解决方案
方案1:保留ColSplitter用法
先给数据集新增is_valid列,自行指定哪些样本属于验证集,示例代码如下:
import numpy as np # 随机选取20%的样本作为验证集 df2['is_valid'] = np.random.choice([True, False], size=len(df2), p=[0.2, 0.8])
新增列后再执行原有的dataloaders创建代码即可正常运行。
方案2:更换数据集划分方式
不需要新增is_valid列,直接替换ColSplitter为其他划分器,比如用RandomSplitter随机划分验证集:
# 如果是微调预训练语言模型(ULMFiT流程第一步),用如下DataBlock定义 dls_lm = DataBlock( blocks=TextBlock.from_df('text', seq_len=15, is_lm=True), get_x=ColReader('text'), splitter=RandomSplitter(valid_pct=0.2, seed=42) ) dls = dls_lm.dataloaders(df2, bs=24) # 如果是直接训练文本分类模型,用如下DataBlock定义 dls_cls = DataBlock( blocks=(TextBlock.from_df('text', seq_len=15), CategoryBlock), get_x=ColReader('text'), get_y=ColReader('target'), splitter=RandomSplitter(valid_pct=0.2, seed=42) ) dls = dls_cls.dataloaders(df2, bs=24)
内容的提问来源于stack exchange,提问作者Juan Cruz Alric
相关产品推荐
相关产品推荐

