使用tf.keras内置IMDB数据集时Tokenizer报'int无lower属性'错误原因?
报错根因
tf.keras.datasets.imdb.load_data() 接口返回的数据集已经完成了文本转整数索引的预处理,你拿到的X_train、X_test的每个元素都是由整数组成的序列,而非原始字符串文本。而Tokenizer.fit_on_texts() 方法要求输入为字符串格式的文本样本,内部默认会对每个元素执行转小写的lower()操作,对整数调用该方法就触发了AttributeError: 'int' object has no attribute 'lower'报错。
另外你的代码里冗余导入了第三方imdb包,和Keras内置的IMDB数据集工具无关,可以直接删除。
修复方案
直接使用内置接口预处理好的整数序列即可,无需额外调用Tokenizer做文本处理,修改后代码如下:
import tensorflow as tf from keras.preprocessing import sequence from keras.models import Sequential from keras.layers import Dense, Dropout, Activation from keras.layers import Embedding, LSTM from keras.layers import Conv1D, Flatten, MaxPooling1D from keras.datasets import imdb import wandb from wandb.keras import WandbCallback import numpy as np wandb.init(mode="disabled") # disabled for debugging config = wandb.config # set parameters: config.vocab_size = 1000 config.maxlen = 1000 config.batch_size = 32 config.embedding_dims = 10 config.filters = 16 config.kernel_size = 3 config.hidden_dims = 250 config.epochs = 10 # 加载数据集时直接指定词汇表大小 (X_train, y_train), (X_test, y_test) = tf.keras.datasets.imdb.load_data(num_words=config.vocab_size) # 直接做序列截断补全,不需要走Tokenizer流程 X_train = sequence.pad_sequences(X_train, maxlen=config.maxlen) X_test = sequence.pad_sequences(X_test, maxlen=config.maxlen)
弃用警告说明
你看到的VisibleDeprecationWarning是旧版本TensorFlow加载IMDB数据集时的已知提示,属于版本兼容问题,不影响代码正常运行,升级TensorFlow到2.4+版本即可消除该警告。
内容的提问来源于stack exchange,提问作者Keegan Clarke
相关产品推荐
相关产品推荐

