轻松读取和处理数据,处理速度很快。创建数据集tf.data.Dataset表示一系列元素。
import tensorflow as tf
#建立dataset
#使用from_tensor_slices将输入的数据切片,使其变成dataset中的组件
dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3, 4, 5, 6, 7])
#对其进行迭代
for ele in dataset:
print(ele)
#输出结果中可以看到dataset将每一个切片转换为Tensor数据类型
#也可以将其转化为numpy数据类型
for ele in dataset:
print(ele.numpy()) #TSF2.0专用
#建立二维列表
dataset = tf.data.Dataset.from_tensor_slices([[1,2],[3,4],[5,6]])
dataset
#运行结果显示每个组件都是长度为2的向量
#使用字典创建dataset
dataset_dic = tf.data.Dataset.from_tensor_slices({'a':[1,2,3,4],
'b':[6,7,8,9],
'c':[12,13,14,15]
})
dataset_dic #形状是列表
for ele in dataset_dic:
print(ele)
使用np.array来创建dataset
import numpy as np
#使用np.array来创建dataset
dataset = tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6,7]))
for ele in dataset:
print(ele)
for ele in dataset:
print(ele.numpy())
#取出一些数据
for ele in dataset.take(4): #取出前四个
print(ele.numpy())
next(iter(dataset.take(1)))
使dataset中的数据发生一些变化:乱序%重复
#dataset的变化
#乱序
dataset = dataset.shuffle(7) #一般使用shuffle所有的数据进行乱序
#重复
dataset = dataset.repeat(count=3) #参数默认为None,无限重复
for ele in dataset:
print(ele.numpy())
在神经网络训练中,对于图片最好按批次进行训练,因为内存可能不够大。dataset提供了一个batch方法,可以将训练数据分批次输入。
dataset = dataset.shuffle(7)
dataset = dataset.repeat(count=3)
dataset = dataset.batch(3)
for ele in dataset:
print(ele.numpy())
dataset还可以应用函数对数据进行乱序
dataset = tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6,7]))
#将每一个数据都变成平方
dataset = dataset.map(tf.square) #tf.square是平方函数
for ele in dataset:
print(ele.numpy())
tf.data输入模块实例
import tensorflow as tf
#导入数据集
(train_images, train_labels),(test_images,test_labels) = tf.keras.datasets.fashion_mnist.load_data()
#数据归一化
train_images = train_images / 255
test_images = test_images /255
#创建训练数据集ds_train
ds_train_img = tf.data.Dataset.from_tensor_slices(train_images)
ds_train_lab = tf.data.Dataset.from_tensor_slices(train_labels)
ds_train = tf.data.Dataset.zip((ds_train_img,ds_train_lab))
ds_train = ds_train.shuffle(10000).repeat().batch(64)
#创建测试数据集ds_test
ds_test_img = tf.data.Dataset.from_tensor_slices(test_images)
ds_test_lab = tf.data.Dataset.from_tensor_slices(test_labels)
ds_test = tf.data.Dataset.zip((ds_test_img,ds_test_lab))
#test数据集不必要shuffle,会默认repeat,batch还是有必要的
ds_test = ds_test.batch(64)
#模型初始化
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
#模型编译
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
#需要告诉程序一个epoch是迭代多少步,结果得是整除
steps_per_epochs = train_images.shape[0]//64 #shape的第一个维度是它的大小
#模型编译
model.fit(ds_train,epochs=5,
steps_per_epoch=steps_per_epochs,
validation_data=ds_test,
validation_steps=10000//64)