You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tfds.load()两种调用差异:为何一正常一报TypeError?

问题原因与解决方案

两段代码的核心差异在于数据集加载后的结构和文本类型处理,错误的根源有两点:

1. 数据集解包错误

当使用split=['train','test']参数时,部分TensorFlow Datasets版本会返回字典结构(键为'train'/'test',值为对应数据集),而非你预期的列表。这会导致你用(x_train,y_train),(x_test,y_test)解包时,x_train被错误赋值为字典的键或其他非文本结构,最终Tokenizer处理时遇到字典类型,抛出"需要bytes-like对象而非dict"的错误。

2. 文本类型未转换

即使解包正确,as_supervised=True返回的文本是bytes类型(numpy数组元素),而Keras的Tokenizer要求输入是字符串类型,这也会导致后续处理出错。


修正后的代码

# 加载数据集,返回包含训练/测试集的列表
train_ds, test_ds = tfds.load('imdb_reviews', split=['train', 'test'], as_supervised=True, batch_size=-1)

# 转换为numpy数组,分离文本和标签
x_train, y_train = tfds.as_numpy(train_ds)
x_test, y_test = tfds.as_numpy(test_ds)

# 将bytes类型的文本解码为UTF-8字符串
x_train = [text.decode('utf-8') for text in x_train]
x_test = [text.decode('utf-8') for text in x_test]

# 正常执行Tokenzier处理
tokenizer = Tokenizer(num_words=10000)
tokenizer.fit_on_texts(x_train)
sequences = tokenizer.texts_to_sequences(x_train)

内容的提问来源于stack exchange,提问作者Anurag Nimonkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:03:14