pass

来源:4-5 tf.data读取csv文件并与tf.keras结合使用

战战的坚果

2020-02-12

def csv_reader_dataset(filenames, n_readers=5,
batch_size=32, n_parse_threads=5,#做解析时的并行度
shuffle_buffer_size=10000):#混排数据时的buffer的size
dataset = tf.data.Dataset.list_files(filenames)
dataset = dataset.repeat()#数据集重复了指定次数,参数为空:重复无限次
dataset = dataset.interleave(
lambda filename: tf.data.TextLineDataset(filename).skip(1),
cycle_length = n_readers
)
dataset.shuffle(shuffle_buffer_size) #将数据打乱,数值越大,混乱程度越大
dataset = dataset.map(parse_csv_line,
num_parallel_calls=n_parse_threads)
dataset = dataset.batch(batch_size)#batch(4)是把dataset变成四份
return dataset
老师,我对上面这个函数的实现流程不懂:
1。首先将全部文件名变成一个dataset,然后将数据集重复了无限次,是为什么?
2. 数据集重复后,调用interleave函数,获取每个文件名对应的文本内容即dataset,最后合并生成新的dataset,调用shuffle(shuffle_buffer_size) #将数据打乱,括号里数值越大,混乱程度越大,为什么要将已经重复了无限次的数据集进行混排?
3. map函数解析,将数据集按照batch_size分块。以上是我对这个函数的理解。
最后,老师,repeat()和shuffle()和batch()这三个函数的执行顺序不同是否影响结果,有什么影响?它们的执行顺序是怎么决定的?
为什么要重复无限次?为什么要混排?

写回答

1回答

正十七

2020-02-16

先说为什么重复无限次,和为什么混排。

重复无限次的原因是因为我们可能要遍历数据集很多遍。混排的原因是我们希望数据的顺序不影响训练,因为我们是按照batch进行训练的,如果一些数据经常在同一个batch中出现,那么网络可能会学到同一个batch中不同数据间的联系,这不是我们所需要的。


然后是具体的问题:

1。首先将全部文件名变成一个dataset,然后将数据集重复了无限次,是为什么?

这是因为文件名重复无数次,整个最后的数据集也就会是无限的。

2. 数据集重复后,调用interleave函数,获取每个文件名对应的文本内容即dataset,最后合并生成新的dataset,调用shuffle(shuffle_buffer_size) #将数据打乱,括号里数值越大,混乱程度越大,为什么要将已经重复了无限次的数据集进行混排?

混排的原因上面我们说了。

3. map函数解析,将数据集按照batch_size分块。以上是我对这个函数的理解。

map方法是对上一步的数据集中的每个item做解析。


最后,老师,repeat()和shuffle()和batch()这三个函数的执行顺序不同是否影响结果,有什么影响?

这个一般影响不大,不过对我们这个例子来说,其实是有两种dataset,即文件名dataset,以及文件内容dataset。repeat可以在任意一个上做,但shuffle和batch只能在后一个dataset上做,不然数据就不是我们所需要的。

0
4
闪闪一年
这个问题已经看其他同学的答案搞懂了。
2020-04-23
共4条回复

Google老师亲授 TensorFlow2.0 入门到进阶

Tensorflow2.0实战—以实战促理论的方式学习深度学习

1849 学习 · 896 问题

查看课程

相似问题

pass

回答 1

pass

回答 1

pass

回答 1

pass

回答 1

pass

回答 1