You need to enable JavaScript to run this app. FASTAI从DataFrame创建DataLoaders报KeyError: 'is_valid'问题求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 06:27:03