深度学习(18)神经网络与全连接层一: 数据加载


Outline

  • keras.datasets
  • tf.data.Dataset.from_tensor_slices
    • shuffle
    • map
    • batch
    • repeat
  • we will talk Input Pipeline later

1. 常用数据集

keras.datasets

  • boston housing
    • Boston housing price regression dataset.
  • mnist/fashion mnist
    • MNIST/Fashion-MNIST dataset.
  • cifar10/100
    • small images classification dataset.
  • imdb
    • sentiment clssification dataset.

2. MNIST数据集

(1) MNIST样本

在这里插入图片描述

  • 图片的shape=[28, 28, 1],共有70k张图片,其中60k张作为训练集,10k张作为测试集。

(2) MNIST加载案例

在这里插入图片描述

(a)(x, y), (x_test, y_test) = kares.datasets.mnist.load_data(): 自动下载,管理,解析,读取,转换这一系列的工作,最终拿到的是一个Numpy的格式,其中(x, y)为train,即训练集,x.shape=[60000, 28, 28],y.shape=[60000,]; (x_test, y_test)为test,即测试集,x_test.shape=[10000, 28, 28],y_test.shape=[10000,];
(b)x.min()=0; x.max()=255; 注意这里的min和max都是Numpy里的API,这俩值代表了一张图片里每个像素点的灰度值在[0~255]之间; 为了方便计算,需要归一化操作,在后边的操作中需要将其除以255,来达到将其值控制在[01](或者[-11]、[-0.5~0.5],具体怎么处理要看具体应用目的)之间的目的;
(c)y[:4]: 取前4张图片的y值,即标签值,为[5, 0, 4, 1],即代表第一章图片的label值为5; 即代表第二章图片的label值为0; 即代表第三章图片的label值为4; 即代表第四章图片的label值为1; 数据类型为unit8;
(d)y_onehot = tf.one_hot(y, depth=10): 将y进行onehot编码,因为共有10个数字类别,所以设置depth=10;
(e)y_onehot[:2]: 查看前两个元素,即第一个元素的标签值为“5”,所以其onehot编码为[0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,]; 第一个元素的标签值为“0”,所以其onehot编码为[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,];

3. CIFAR10/100

(1) CIFAR10/100样本

在这里插入图片描述

  • CIFAR10表示共有10种类型(大类,例如车、狗、鸟等等)的图片; CIFAR100表示共有100种类型(小类,例如狗分为边牧、田园犬等等)的图片; CIFAR10和CIFAR100是同一个数据集;
  • 每张彩色图片的shape=[32, 32, 3];

(2) CIFAR10/100加载案例

在这里插入图片描述

(a)(x, y), (x_test, y_test) = kares.datasets.cifar10.load_data(): 加载与解析CIFAR10数据集;
(x, y), (x_test, y_test) = kares.datasets.cifar100.load_data(): 加载与解析CIFAR100数据集;
(b) 输入输出
训练集输入x.shape=[50000, 32, 32, 3];
训练集输出y.shape=[50000, 1];
测试集输入x_test.shape=[10000, 32, 32, 3];
测试集输出y_test.shape=[10000, 1];

(3) tf.data.Dataset

  • from_tensor_slices()
    在这里插入图片描述

(a)db = tf.data.Dataset.from_tensor_slices(x_test): 利用from_tensor_slices()函数将Numpy类型的x_test转换为Dataset的实例,db就可以很方便地进行迭代操作;
(b)next(iter(db)).shape: iter(db)为迭代器,即it = iter(db) → \to next(it);
(c) from_tensor_slice()比“先将数据转换为Tensor类型再一个个读取的方法”要好很多;
(d)db = tf.data.Dataset.from_tensor_slices((x_test, y_test)): 这里可以看出,Dataset可以传入两个参数,x_test即images,y_test即label;

(4) .shuffle(打散功能)

在这里插入图片描述

(a)db = db.shuffle(10000): 将[0~10000]区域内的样本随机打散,注意打散的时候x_test对应的y_test必须保持一致;

(5) .map(数据预处理功能)

在这里插入图片描述

(a)preprocess(x, y): 定义一个数据预处理的函数;
(b)db2 = db.map(preprocess): 定义预处理函数后,就可以使用map()函数直接调用预处理函数对数据集进行预处理;

(6) .batch

在这里插入图片描述

(a)db3 = db2.batch(32): 将数据集划分为1个batch32张图片;

(7) StpIteration

在这里插入图片描述

(8) .repeat()

在这里插入图片描述

(9) For example

在这里插入图片描述

参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值