Tensorflow2.0学习(9):Dataset

Dataset学习

  • 导入tensorflow与numpy
import tensorflow as tf
import numpy as np
  • 产生一个大小为(5,2)的矩阵
a = np.random.uniform(size=(5, 2))
print(a)
[[0.0483624  0.06583819]
 [0.02226427 0.04434701]
 [0.21813774 0.69337174]
 [0.53861135 0.23749001]
 [0.86036676 0.96004531]]
  • tf.data.Dataset.from_tensor_slices: 切分传入Tensor的第一个维度,生成相应的dataset。
  • 传入的数值是一个矩阵:它的形状为(5, 2),tf.data.Dataset.from_tensor_slices就会切分它形状上的第一个维度,最后生成的dataset中一个含有5个元素,每个元素的形状是(2, ),即每个元素是矩阵的一行。
dataset = tf.data.Dataset.from_tensor_slices(a)
print(dataset)

for item in dataset:
    print(item)
<TensorSliceDataset shapes: (2,), types: tf.float64>
tf.Tensor([0.0483624  0.06583819], shape=(2,), dtype=float64)
tf.Tensor([0.02226427 0.04434701], shape=(2,), dtype=float64)
tf.Tensor([0.21813774 0.69337174], shape=(2,), dtype=float64)
tf.Tensor([0.53861135 0.23749001], shape=(2,), dtype=float64)
tf.Tensor([0.86036676 0.96004531], shape=(2,), dtype=float64)
  • 传入的元组
# from_tensor_slices()输入值为元组
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:
    # numpy :取tensor具体的值
    print(item_x.numpy(), item_y.numpy())
<TensorSliceDataset shapes: ((2,), ()), types: (tf.int32, tf.string)>
[1 2] b'cat'
[3 4] b'dog'
[5 6] b'fox'
  • 传入的是字典
dataset4 = tf.data.Dataset.from_tensor_slices({'feature':x,
                                              'label':y})
for item in dataset4:
    print(item['feature'].numpy(),item['label'].numpy())
[1 2] b'cat'
[3 4] b'dog'
[5 6] b'fox'
  • 对Dataset中的元素做变换
  • map:接收一个函数,Dataset中的每个元素都会被当作这个函数的输入,并将函数返回值作为新的Dataset。如下,对每个元素加1。
dataset_1 = dataset.map(lambda x: x + 1)

for item in dataset_1:
    print(item)
tf.Tensor([1.0483624  1.06583819], shape=(2,), dtype=float64)
tf.Tensor([1.02226427 1.04434701], shape=(2,), dtype=float64)
tf.Tensor([1.21813774 1.69337174], shape=(2,), dtype=float64)
tf.Tensor([1.53861135 1.23749001], shape=(2,), dtype=float64)
tf.Tensor([1.86036676 1.96004531], shape=(2,), dtype=float64)
  • batch:就是将多个元素组合成batch。
dataset_2 = dataset_1.batch(3)

for item in dataset_2:
    print(item)
tf.Tensor(
[[1.0483624  1.06583819]
 [1.02226427 1.04434701]
 [1.21813774 1.69337174]], shape=(3, 2), dtype=float64)
tf.Tensor(
[[1.53861135 1.23749001]
 [1.86036676 1.96004531]], shape=(2, 2), dtype=float64)
  • repeat:repeat的功能就是将整个序列重复多次,主要用来处理机器学习中的epoch。
dataset_3 = dataset_1.repeat(2)

for item in dataset_3:
    print(item)
tf.Tensor([1.0483624  1.06583819], shape=(2,), dtype=float64)
tf.Tensor([1.02226427 1.04434701], shape=(2,), dtype=float64)
tf.Tensor([1.21813774 1.69337174], shape=(2,), dtype=float64)
tf.Tensor([1.53861135 1.23749001], shape=(2,), dtype=float64)
tf.Tensor([1.86036676 1.96004531], shape=(2,), dtype=float64)
tf.Tensor([1.0483624  1.06583819], shape=(2,), dtype=float64)
tf.Tensor([1.02226427 1.04434701], shape=(2,), dtype=float64)
tf.Tensor([1.21813774 1.69337174], shape=(2,), dtype=float64)
tf.Tensor([1.53861135 1.23749001], shape=(2,), dtype=float64)
tf.Tensor([1.86036676 1.96004531], shape=(2,), dtype=float64)
  • shuffle:打乱dataset中的元素,它有一个参数buffersize,表示打乱时使用的buffer的大小。
dataset_4 = dataset_1.shuffle(buffer_size=3)

for item in dataset_4:
    print(item)
tf.Tensor([1.21813774 1.69337174], shape=(2,), dtype=float64)
tf.Tensor([1.0483624  1.06583819], shape=(2,), dtype=float64)
tf.Tensor([1.53861135 1.23749001], shape=(2,), dtype=float64)
tf.Tensor([1.02226427 1.04434701], shape=(2,), dtype=float64)
tf.Tensor([1.86036676 1.96004531], shape=(2,), dtype=float64)
发布了35 篇原创文章 · 获赞 3 · 访问量 2503

猜你喜欢

转载自blog.csdn.net/Smile_mingm/article/details/104519601