deeplearning学习小结(二)——tf.data

1. tf.data API 在 TensorFlow 中引入了两个新概念:

1.1**tf.data.Dataset:**

表示一系列元素,其中每个元素包含一个或多个 Tensor 对象。例如,在图片管道中,一个元素可能是单个训练样本,具有一对表示图片数据和标签的张量。可以通过两种不同的方式来创建数据集。

操作方法:

直接从 Tensor 创建 Dataset

 Dataset.from_tensor_slices() 

通过对数据集压缩在一起创建一个“数据集”来建立

Dataset.zip()

从一个或多个tf.data.Dataset对象中构建dataset

Dataset.batch()
1.2 **tf.data.Iterator:**

此方式主要用于从数据集中提取元素。Iterator.get_next() 指令会在执行时生成 Dataset 的下一个元素,可充当输入管道和模型之间的接口。通过 Iterator.initializer 指令使用不同的数据集初始化和参数化迭代器,可在同一个程序中对训练和验证数据进行多次迭代

操作方法:

迭代器对象实例化(非Eager模式下):

iterator = dataset.make_one_shot_iterator()
one_element = iterator.get_next()

2. 数据集处理方法

Dataset支持一类特殊的操作:Transformation。一个Dataset通过Transformation变成一个新的Dataset。通常我们可以通过Transformation完成数据变换,打乱,组成batch,生成epoch等一系列操作。

常用的Transformation有:

  • map: 和python中的map类似,map接收一个函数,Dataset中的每个元素都会被当作这个函数的输入,并将函数返回值作为新的Dataset

  • shuffle: shuffle的功能为打乱dataset中的元素,它有一个参数buffersize,表示打乱时使用的buffer的大小,一般设为10000

dataset=dataset.shuffle(7) #让数据乱序7次
  • repeat: repeat的功能就是将整个序列重复多次,主要用来处理机器学习中的epoch,假设原先的数据是一个epoch,使用repeat(3)就可以将之变成3个epoch
dataset=dataset.repeat(count=3) #让数据循环3次
  • batch: batch就是将多个元素组合成batch
dataset=dataset.batch(4) #一次喂4个数

实例演示:

dataset=tf.data.Dataset.from_tensor_slices([1,2,3,4,56,7])
dataset=dataset.shuffle(7)
dataset=dataset.repeat(count=3)
dataset=dataset.batch(4)
for i in dataset:
  print(i.numpy()) 

out:
[1,3,5,2]
[7,2,5,4]
[2,2,5,1]
.
.
.
一次出来4个数,循环3次


3. Dataset创建实例

3.1 创建一个一维Dataset
dataset=tf.data.Dataset.from_tensor_slices([1,2,3,4,5])
for i in dataset
  print(i.numpy()) 

out:
1
2
3
4
5

3.2 创建一个二维Dataset
dataset=tf.data.Dataset.from_tensor_slices([[1,2],[3,4],[5,6]])
for i in dataset:
  print(i.numpy()) 

out:
[1,2]
[3,4]
[5,6]

3.3 以字典形式创建Dataset
dataset=tf.data.Dataset.from_tensor_slices({'a':[1,2,3,4],'b':[5,6,7,8],'c'[9,10,11,12]})
for i in dataset:
  print(i.numpy()) 

out:
[1,2,3,4],‘b’:[5,6,7,8],‘c’=[9,10,11,12]})

3.4 将Dataset里的数据平方
dataset=tf.data.Dataset.from_tensor_slices(np.array([1,2]))
dataset=dataset.map(tf.square) #平方所有数据
for i in dataset:
  print(i.numpy()) 

out:
1
4


4. tf.data.dataset使用实例

目的:创建一个手写MNIST数据集
自动下载数据集

(train_images,train_labels),(test_images,tset_labels)=tf.keras.dataset.mnist.load_data()

创建训练图片数据集

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)

乱序10000次,循环,每次喂64张图

ds_train=ds_train.shuffle(10000).repeat().batch(64)

求得每个epoch迭代的数量

steps_per_epochs=train_images.shape[0]//64

创建测试数据集

ds_test=tf.data.Dataset.from_tensor_slices(test_images,tset_labels)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解释: 1. self.epsilon = 0.1 if e_greedy_increment is not None else self.epsilon_max: 这行代码是用来设置epsilon的值。epsilon是用于控制在强化学习探索和利用之间的平衡。如果e_greedy_increment不为None,即存在增量值,那么epsilon的初始值为0.1;否则,epsilon的初始值为self.epsilon_max。 2. self.lr_decay_rate = 0.95和self.lr_decay_step = 10000: 这两行代码是用于定义学习率的衰减速率和衰减步数。学习率衰减是为了让模型在训练过程逐渐降低学习率,以便更好地收敛到最优解。在这里,学习率以指数衰减的方式进行更新,每经过10000个步骤,学习率会以0.95的衰减速率进行衰减。 3. self.lr = tf.train.exponential_decay(self.learning_rate, self.global_step, self.lr_decay_step, self.lr_decay_rate, staircase=True): 这行代码定义了学习率的指数衰减方式。tf.train.exponential_decay函数用于计算学习率的衰减值。其,learning_rate是初始学习率,global_step是当前训练步数,lr_decay_step是衰减步数,lr_decay_rate是衰减速率,staircase=True表示学习率以阶梯函数的形式进行衰减。 4. self.l_r = self.learning_rate: 这行代码将初始学习率赋值给l_r,可能用于后续的学习率更新。 5. self.gama = 3、self.tau = 0.5和self.r_base = [0]: 这三行代码定义了一些参数。gama是拉格朗日乘子,用于某些优化问题的约束条件;tau是计算reward滑动平均的参数,用于平滑reward的变化;r_base是一个包含单个元素0的列表,可能用于存储reward的基准值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值