又鸽了好几天,理由如下:鸽 今天我们来学习迁移学习(不是),没更新完。先暂时这样,明天更新完,另外打算肝Yolo系列了,做项目了。(不是) 再见!
一、数据集
1.tf.data.Dataset数据集
面对一堆格式不一的原始数据文件,数据预处理的过程非常麻烦,其实在泰坦尼克号的时候大家就能感觉出来,这个过程甚至要比模型设计还要费力。 这也就是tf.data.Dataset的由来。
- 注意:前面我们没有用过这个类,都是按照特征和标签拆分的原始数据集,今天我们来试一下这个类
tf.data.Dataset由一系列可迭代访问的元素组成,每个元素包含一个或多个张量,tf.data.Dataset.from_tensor_slices()是建立tf.data.Dataset的基本方法,适用于数据量比较小(能够装进整个内存)的情况
import tensorflow as tf
import numpy as np
X = tf.constant([1001,1002,1003,1004,1005])
Y = tf.constant([1,2,3,4,5])
dataset = tf.data.Dataset.from_tensor_slices((X,Y))
dataset
<TensorSliceDataset shapes: ((), ()), types: (tf.int32, tf.int32)>
for x,y in dataset:
print(x.numpy(),y.numpy())
1001 1
1002 2
1003 3
1004 4
1005 5
X = np.array([1001,1002,1003,1004,1005])
Y = np.array([1,2,3,4,5])
dataset2 = tf.data.Dataset.from_tensor_slices((X,Y))
for x,y in dataset2:
print(x.numpy(),y.numpy())
1001 1
1002 2
1003 3
1004 4
1005 5
it = iter(dataset)
x,y = it.next()
x.numpy(),y.numpy()
(1001, 1)
tf.data.Dataset类提供了多种数据集预处理方法,常用的包括
- Dataset.map(f) 对数据集中的每个元素应用函数f
- Dataset.shuffle(buffer_size) 将数据集打散,实现乱序,buffer_size的大小与数据集的分布有关,如果一共有100个数据,前50个是训练集,后50个是测试集那么需要设置为50
- Dataset.batch(batch_size)将数据集分成批次,类似于打包
- Dataset.prefetch()预取出数据集中的size个元素,可以提高模型训练效率
- Dataset.take()截取数据集中的前size个元素,相当于一个小的数据集,元素个数为size个
|