数据在深度学习中的重要性怎么说都不为过,无论是训练模型,还是性能调优,都离不开大量的数据。有人曾经断言中美在人工智能领域的竞赛,中国将胜出,其依据就是中国拥有更多的数据。像Google、amazon、腾讯、阿里巴巴之类的巨头,其产品属性天然拥有大量的数据,那对于个人和小型创业公司,数据从哪儿来呢?
除了自行搜集数据,还有一条捷径就是获得公开的数据集,这些数据集往往是研究机构或大公司出于研究的目的而创建的,提供免费下载,可以很好的弥补个人开发者和小型创业公司数据不足的问题。不过由于这些数据集由不同的组织创建,其格式也各不相同,往往需要针对不同的数据集编写解析代码。
keras作为一个高层次的深度学习框架,提供了友好的用户接口,其内置了一些公共数据集的支持。具体说来,keras.datasets模块包含了加载和获取流行的参考数据集的方法。通过这些数据集接口,开发者不需要考虑数据集格式上的不同,全部由keras统一处理,下面就来看看keras中集成的数据集。
注意
keras.datasets模块包含了从网络下载数据的功能,下载后的数据集保存于 ~/.keras/datasets/ 目录。因为这些数据集来源各有不同,有些需要访问外国网站才能访问。我将这些数据收集起来放到了百度网盘 https://pan.baidu.com/s/1sUV6oQ7mUplTCoXKulA9Sw,有需要的朋友可以自行下载,将下载的数据文件放到 ~/.keras/datasets/ 目录即可。
以下是keras.datasets包含的数据集清单
- 波士顿房价数据
- CIFAR10 (十种类别的图片集)
- CIFAR100 (100种类别的图片集)
- MNIST (手写数字图片集)
- Fashion-MNIST (10种时尚类别的图片集)
- IMDB电影点评数据
- 路透社新闻数据
1. 波士顿房价数据
本数据集取自由卡内基梅隆大学维护的StatLib库。这个数据集包含了19世纪70年代末波士顿郊区不同地点的房屋信息数据,每条数据包含13个属性,目标属性是某地点房屋的售价(单位为k$)。
这个数据集的数据较老,再加上房价与很多因素有关,不具有通用性。它可用于练习回归算法,对于实际项目的作用有限,如果用它来预测中国的房价,绝对谬之千里。
加载数据集的代码如下:
代码语言:javascript复制
from keras.datasets import boston_housing(x_train, y_train), (x_test, y_test) = boston_housing.load_data()
2. CIFAR10
本数据集包含50,000个32x32彩色训练图像和10,000个测试图像,一共10个类别的标签。
加载数据集的代码:
代码语言:javascript复制
from keras.datasets import cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
返回一个二元组:
- x_train和x_test: uint8数组类型的RGB图像数据,其形状为(num_samples, 32, 32, 3)。其中3代表RGB三个通道。
- y_train和y_test: uint8数组类型的类别标签,类别编号为数字,类别标签值为0-9之间的数字,数组形状(num_samples, ).
3. CIFAR100
和CIFAR10数据集类似,只是标签类别扩充到100个,也就是有100个类别的图像。
4. MNIST
本数据集包含10个数字的60,000个28x28灰度图像,以及10,000个图像的测试集。
加载数据集的代码:
代码语言:javascript复制
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
返回一个二元组:
- x_train和x_test: uint8数组类型的灰度图像数据,其形状为(num_samples, 28, 28)。
- y_train和y_test: uint8数组类型的类别标签,0-9之间的数字,数组形状(num_samples, ).
5. Fashion-MNIST
本数据集包含10个时尚类别的60,000个28x28灰度图像,以及10,000个图像的测试集。此数据集可用作MNIST的替代品。类别标签定义如下:
标签 | 描述 |
---|---|
0 | T恤/上衣 |
1 | 裤子 |
2 | 套头衫 |
3 | 连衣裙 |
4 | 外套 |
5 | 凉鞋 |
6 | 衬衣 |
7 | 运动鞋 |
8 | 包包 |
9 | 短靴 |
加载数据集的代码:
代码语言:javascript复制
from keras.datasets import fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
返回的二元组和MNIST数据集类似。
6. IMDB电影点评数据
来自IMDB的25,000个电影评论的数据集,标记为正面评价和负面评价。数据集并不是直接包含单词字符串,而是已经过预处理,每个评论都被编码为一系列单词索引(整数)。出于方便起见,单词根据数据集中的总体词频进行索引,这样整数“3”就是数据中第3个最频繁的单词的编码。这样做的目的是允许快速过滤操作,例如:“仅考虑前10,000个最常见的单词,但去掉前20个最常见的单词”。
作为惯例,“0”不代表特定单词,
加载数据集的代码:
代码语言:javascript复制
from keras.datasets import imdb
(x_train, y_train), (x_test, y_test) = imdb.load_data()
返回一个二元组:
- x_train和x_test: 序列列表,整数类型的索引列表。
- y_train和y_test: 整数标签列表(1或0)。
训练数据集的数据样例如下:
代码语言:javascript复制
[1, 307, 5, 1301, 20, 1026, 2511, 87, 2775, 52, 116, 5, 31, 7, 4, 91, 1220, 102, 13, 28, 110, 11, 6, 137, 13, 115, 219, 141, 35, 221, 956, 54, 13, 16, 11, 2714, 61, 322, 423, 12, 38, 76, 59, 1803, 72, 8, 10508, 23, 5, 967, 12, 38, 85, 62, 358, 99]
这可能对人的阅读不太友好,但是方便计算机处理。这组数据集可用于二分类问题。
7. 路透社新闻数据
这是来自路透社的11,228条新闻线索的数据集,标记有46个主题。与IMDB数据集一样,每条新闻线索都被编码为一系列单词索引(相同的约定)。
加载数据集的代码:
代码语言:javascript复制
from keras.datasets import reuters
(x_train, y_train), (x_test, y_test) = reuters.load_data()
返回一个二元组:
- x_train和x_test: 序列列表,整数类型的索引列表。
- y_train和y_test: 整数标签列表(0到45)。
这组数据集可用于二分类问题。
总结
从上面的代码可以看到,keras提供的接口非常简洁,仅仅调用各数据集的load_data()方法,开发者无需处理数据下载、数据保存、数据解析等等细节,可以极大的方便开发者将精力集中于业务开发。目前keras集成的数据集还比较有限,以后也许会有更多的公共数据集集成过来。
参考:
- Datasets - Keras Documentation
- Datasets within Keras