请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

pass

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 22:58:09

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

重复无限次的原因是因为我们可能要遍历数据集很多遍。混排的原因是我们希望数据的顺序不影响训练,因为我们是按照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 回复 有任何疑惑可以回复我~
  • 提问者 战战的坚果 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-02-17 10:23:21
  • 老师,我还想问下。这里需要repeat()的原因是因为后面要用shuffle ()的缘故吗?不然的话,好像没必要repeat()
    回复 有任何疑惑可以回复我~ 2020-04-23 12:38:52
  • 还有一个问题,感觉是不是interleave配合batch使用的场景比较多,不然好像直接用map更方便。
    回复 有任何疑惑可以回复我~ 2020-04-23 12:54:45
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信