复习一下tf.data基础API的使用。
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import keras
print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
print(module.__name__, module.__version__)
首先导入包,打印一下版本信息。
再使用一下切片函数,前面转载了一篇博客是说明这个函数的,很通俗易懂。
dataset = tf.data.Dataset.from_tensor_slices(np.arange(10))
print(dataset)
for item in dataset:
print(item)
打印一下切片函数的结果:
# 1. repeat epoch
# 2. get batch
dataset = dataset.repeat(3).batch(7)
for item in dataset:
print(item)
指定数据集是否重复以及batch_size的大小,运行结果如下:
接下来使用一下interleave函数。
# interleave:
# case: 文件dataset -> 具体数据集
dataset2 = dataset.interleave(
lambda v: tf.data.Dataset.from_tensor_slices(v), # map_fn
cycle_length = 5, # cycle_length
block_length = 5, # block_length
)
for item in dataset2:
print(item)
dataset.interleave是dataset的一个类方法,是用来从数据集里面取数据的,上面的运行结果为:
接下来用一张图说明这个函数是如何读取数据的:
和代码中输出的结果顺序也一样的。
接下来再来看一下切片函数:
x = np.array([[1, 2], [3, 4], [5, 6]])
y = np.array(['cat', 'dog', 'fox'])
dataset3 = tf.data.Dataset.from_tensor_slices((x, y))
print(dataset3)
for item_x, item_y in dataset3:
print(item_x.numpy(), item_y.numpy())
x当成数据特征,y当成标签,x和y的元素个数要对应上。使用这个切片函数,就可以把x和y数据整合成为数据集,一下是输出结果:
生成数据集的时候也可以指定键名。这样就可以用键名访问对应的特征数据和标签数据。
dataset4 = tf.data.Dataset.from_tensor_slices({"feature": x,
"label": y})
for item in dataset4:
print(item["feature"].numpy(), item["label"].numpy())
下面是代码的输出结果: