tensorflow.keras.datasets 中关于imdb.load_data的使用说明

本文详细解析了tensorflow2.x中keras.datasets.imdb.load_data的参数,包括num_words、skip_top、maxlen、seed、start_char、oov_char和index_from等,并通过示例展示了它们对数据的影响,指出了可能存在的小bug。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在tensorflow2.x的keras中内置了7种类型的数据集:

数据集名称 数据集描述
boston_housing 波士顿房价数据
cifar10 10种类别图片集
cifar100 100种类别图片集
fashion_mnist 10种时尚类别图片集
imdb 电影评论情感分类数据集
mnist 手写数字图片集
reuters 路透社新闻主题分类数据集

这些数据的读取都可以使用load_data()方法。不过2种关于文本的数据集imdb和reuters比较特殊,他们的load_data中包含了过滤参数。本文将介绍imdb的load_data参数以及用法。
imdb.load_data的定义如下:

tf.keras.datasets.imdb.load_data(
    path='imdb.npz', num_words=None, skip_top=0, maxlen=None, seed=113,
    start_char=1, oov_char=2, index_from=3, **kwargs
)
  • path
    此参数定义的文件的名称。一般使用默认值

  • num_words
    整数。定义的是大于该词频的单词会被读取。如果单词的词频小于该整数,会用oov_char定义的数字代替。默认是用2代替。
    需要注意的是,词频越高的单词,其在单词表中的位置越靠前,也就是索引越小,所以实际上保留下来的是索引小于此数值的单词。

  • skip_top
    整数。词频低于此整数的单词会被读入。高于此整数的会被oov_char定义的数字代替。

  • maxlen
    整数。评论单词数小于此数值的会被读入。比如一条评论包含的单词数是120,如果maxlen=100,则该条评论不会被读入。

  • seed
    整数。定义了随机打乱数据时候的初始化种子。跟生成随机数的种子是一样的。

  • start_char
    整数。定义了每条评论的起始索引。默认值是1。

  • oov_char
    整数。定义了不满足条件单词的替代值。凡是不满足过滤条件的单词的索引都用此数值代替。

  • index_from
    整数。单词索引大于此数值的会被读入。

  • **kwargs
    兼容用途。

  • num_words使用
    示例如下:

from tensorflow.keras import datasets

(x,y),(tx,ty) = datasets.imdb.load_data()
print("全部数据:",len(x),' 第一个评论:',len(x[0]))
print('第一个评论内容:',x[0][0:10])
(x100,y100),(tx100,ty100) = datasets.imdb.load_data(num_words=100)
print("前100词频:",len(x100),' 第一个评论【100】:',len(x100[0]))
print('第一个评论内容【100】:',x100[0][0:10])

结果如下:

全部数据: 25000  第一个评论: 218
第一个评论内容: [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65]100词频: 25000  第一个评论【100: 218
第一个评论内容【100: [1, 14, 22, 16, 43, 2, 2, 2, 2, 65]

对比可以发现,索引大于100的都被2替代了。

  • skip_top使用
    示例如下:
from tensorflow.keras import datasets

(x,y),(tx,ty) = datasets.imdb.load_data()
print("全部数据:",len(x),' 第一个评论:',len(x[0]))
print('第一个评论内容:',x[0]
boston_housing module: Boston housing price regression dataset. cifar10 module: CIFAR10 small images classification dataset. cifar100 module: CIFAR100 small images classification dataset. fashion_mnist module: Fashion-MNIST dataset. imdb module: IMDB sentiment classification dataset. mnist module: MNIST handwritten digits dataset. reuters module: Reuters topic classification dataset. import tensorflow as tf from tensorflow import keras fashion_mnist = keras.datasets.fashion_mnist (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data() mnist = keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() cifar100 = keras.datasets.cifar100 (x_train, y_train), (x_test, y_test) = cifar100.load_data() cifar10 = keras.datasets.cifar10 (x_train, y_train), (x_test, y_test) = cifar10.load_data() imdb = keras.datasets.imdb (x_train, y_train), (x_test, y_test) = imdb.load_data() # word_index is a dictionary mapping words to an integer index word_index = imdb.get_word_index() # We reverse it, mapping integer indices to words reverse_word_index = dict([(value, key) for (key, value) in word_index.items()]) # We decode the review; note that our indices were offset by 3 # because 0, 1 and 2 are reserved indices for "padding", "start of sequence", and "unknown". decoded_review = ' '.join([reverse_word_index.get(i - 3, '?') for i in x_train[0]]) print(decoded_review) boston_housing = keras.datasets.boston_housing (x_train, y_train), (x_test, y_test) = boston_housing.load_data() reuters= keras.datasets.reuters (x_train, y_train), (x_test, y_test) = reuters.load_data() tf.keras.datasets.reuters.get_word_index( path='reuters_word_index.json' )
``` from transformers import BertTokenizer, TFBertForSequenceClassification from tensorflow.keras.optimizers import Adam from tensorflow.keras.losses import SparseCategoricalCrossentropy # 加载BERT预训练模型和分词器 tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = TFBertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2) # 编译模型 model.compile(optimizer=Adam(learning_rate=3e-5), loss=SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) # 加载IMDB数据集 (x_train, y_train), (x_test, y_test) = tf.keras.datasets.imdb.load_data(num_words=10000) # 数据预处理 maxlen = 100 x_train = pad_sequences(x_train, maxlen=maxlen) x_test = pad_sequences(x_test, maxlen=maxlen) # 将数据转换为BERT输入格式 def encode_data(texts, labels): input_ids = [] attention_masks = [] for text in texts: encoded = tokenizer.encode_plus( text, add_special_tokens=True, max_length=maxlen, pad_to_max_length=True, return_attention_mask=True, return_tensors='tf' ) input_ids.append(encoded['input_ids']) attention_masks.append(encoded['attention_mask']) return { 'input_ids': tf.concat(input_ids, axis=0), 'attention_mask': tf.concat(attention_masks, axis=0) }, tf.convert_to_tensor(labels) train_data, train_labels = encode_data(x_train, y_train) test_data, test_labels = encode_data(x_test, y_test) # 训练模型 model.fit(train_data, train_labels, epochs=3, batch_size=32, validation_data=(test_data, test_labels)) # 评估模型 test_loss, test_acc = model.evaluate(test_data, test_labels) print(f'迁移学习模型在IMDB测试集上的准确率: {test_acc}')```解释代码
最新发布
03-19
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值