畅游人工智能之海--Keras教程之数据集(一)

畅游人工智能之海--Keras教程之数据集(一)

前言

keras提供了几个数据集,可以通过\(load\_data\)函数直接调用,具体如下所示

mnist digits 分类数据集

这是一个包含0,1,2,3,4,5,6,7,8,9的60,000张28x28灰度图像的数据集,以及10,000张图像的测试集。

1
tf.keras.datasets.mnist.load_data(path="mnist.npz")

其中\(path\)参数指定了数据集在本地缓存的位置,函数的返回值是两个numpy类型的数组,\((x\_train, y\_train), (x\_test, y\_test)\)。其中,\((x\_train, y\_train)\)是数据,shape是\((num\_samples,28,28)\)\((x\_test, y\_test)\)是标签,shape是\((num\_samples,)\)。这里得到的仅仅是矩阵数据,如果想要看到这个图片,还需要进一步的可视化操作。

CIFAR10 小图片分类数据集

这是50,000个32x32色彩训练图像和10,000个测试图像的数据集,标记了10个类别。

1
tf.keras.datasets.cifar10.load_data()

这里不支持本地cache,返回值的类型和mnist是一样的,但是数组\((x\_train, y\_train)\)的shape有所区别,\((num\_samples, 3, 32, 32)\),由于是彩色的,使用的是RGB色彩标准,所以是三个通道,相对于mnist就稍微复杂了一些

CIFAR100 小图片分类数据集

这是一个50,000个32x32彩色训练图像和10,000个测试图像的数据集,标记了100多个细粒度的类别,这些细类被分组为20个粗粒度的类别。

1
tf.keras.datasets.cifar100.load_data(label_mode="fine")

由于数据集有两种不同粒度的标签,在调用数据集时应该指明数据集的标签是哪一个,这个信息是通过\(label\_mode\)这个参数传递的,当参数的值为fine时,分为100个类别,当参数值为coarse时,分为10个类别。函数的返回值和cifar10一摸一样。

IMDB 电影评论数据集

这是来自IMDB的25,000条电影评论的数据集,并按情感(正/负)进行标记。 评论已经过预处理,并且每个评论都被编码为单词索引(整数)列表。 为了方便起见,单词以数据集中的整体频率索引,因此,例如整数“ 3”编码数据中第3个最频繁出现的单词。 这样就可以进行快速过滤操作,例如:“仅考虑前10,000个最常用的词,而排除前20个最常用的词”。

按照惯例,“ 0”不代表特定单词,而是用于编码任何未知单词。

1
2
3
4
5
6
7
8
9
10
11
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
)
参数解释

num_words:所有的单词都按照词频进行排序了,如果改参数是一个整数,那么训练集中就只包含词频最高的num_words单词,剩余的单词都会被oov_char代替,否则就是所有的单词。

skip_top:输出训练集的时候跳过词频最高的几个单词,并使用oov_char代替。

maxlen:整数或者空值,表示限制训练集合中的句子序列的最大长度

seed:随机种子,打乱数据集时使用

start_char:给每个序列的开始处标记一个字符,是一个整数,一般可以用1

oov_char:上面提到过了,相当于是一个统一填充值

函数的返回值依然是 \((x\_train, y\_train), (x\_test, y\_test)\)

另一个接口是tf.keras.datasets.imdb.get_word_index(path="imdb_word_index.json"),这个函数用于获取单词和index之间的映射关系,返回值是键值类型的,键是单词字符串,值是单词对应的索引。