tensorflow 数据读取 tf.data.Dataset.from_tensor_slices

文章目录

  • 前言
  • 一个例子
  • 至于transformation
  • 学完啦!!


前言

我真是高产,菜鸡的快乐就是又学到一个“姿势”,如下:

 db = tf.data.Dataset.from_tensor_slices((images,labels))
 db = db.shuffle(1000).map(preprocess).batch(32)

看到这,我发出了‘不太行’的声音,一顿学习,成果如下:
tf.data.Dataset.from_tensor_slices创建了一个Dataset
map,shuffle,batch 是对它的三种transformation
本片完。

————————————————————————————

那当然是不可能滴~

一个例子

import tensorflow as tf
import numpy as np

#dataset = tf.data.Dataset.from_tensor_slices(np.array([1.0, 2.0, 3.0, 4.0, 5.0]))
#dataset = tf.data.Dataset.from_tensor_slices(np.random.uniform(size=(5, 2)))
dataset = tf.data.Dataset.from_tensor_slices(
    {
        "a": np.array([1.0, 2.0, 3.0, 4.0, 5.0]),                                       
        "b": np.random.uniform(size=(5, 2))
    }
)
for element in dataset:
  print(element)

这里感叹一下tensorflow2.0+版本真的简单好多喔~

依次运行得到以下结果:
tensorflow 数据读取 tf.data.Dataset.from_tensor_slices_第1张图片
tensorflow 数据读取 tf.data.Dataset.from_tensor_slices_第2张图片

在这里插入图片描述
这下大概知道这个东东怎么用了吧~

至于transformation

  • map
    map接收一个函数,Dataset中的每个元素都会被当作这个函数的输入,并将函数返回值作为新的Dataset,如我们可以对dataset中每个元素的值加1:
 dataset = tf.data.Dataset.from_tensor_slices(np.array([1.0, 2.0, 3.0, 4.0, 5.0]))
 dataset_1 = dataset.map(lambda x: x + 1)

打印输出上面代码,就得到
tensorflow 数据读取 tf.data.Dataset.from_tensor_slices_第3张图片
可以看到1,2,3,4,5 依次加一变成了2,3,4,5,6~~

  • batch
    batch就是将多个元素组合成batch
dataset = dataset.batch(2

在这里插入图片描述
数据两个一批的在一起啦~~

  • shuffle
    shuffle的功能为打乱dataset中的元素,参数buffersize,表示打乱时使用的buffer的大小:
dataset = dataset.shuffle(buffer_size=5)

tensorflow 数据读取 tf.data.Dataset.from_tensor_slices_第4张图片
顺序大乱~~
如果buffersize=2
tensorflow 数据读取 tf.data.Dataset.from_tensor_slices_第5张图片
看到区别了?所以在使用时要全面打乱,记得把这个参数设的很大才行喔~~

  • repeat
dataset = dataset.repeat(2)

tensorflow 数据读取 tf.data.Dataset.from_tensor_slices_第6张图片
变成2个epoch~~

学完啦!!

你可能感兴趣的:(一些可爱的坑,tensorflow,python,dataset)