关于csv_reader_dataset的问题
来源:4-5 tf.data读取csv文件并与tf.keras结合使用
zozo_zuo
2019-06-30
- 关于第9行interleave的问题,这里是不是并行读取n_readers个文件,每个文件读取1行(block_length默认等于1),就是说,假设n_readers=2,就读取第1个文件第1行,第2个文件第1行,第1个文件的第2行,第2个文件的第2行,这个顺序读取?所以读入文件时并不是一次性读入一整个文件,而是每次调用map_func(lambda那行)时都需要执行打开文件关闭文件的操作?这样读入数据的顺序就与实际数据在写入csv文件时的顺序并不一致了,是不是由于后面有shuffle,所以这里并不关心数据的读入顺序?
- 第8行先对dataset进行repeat,后面才对数据进行shuffle,会不会出现repeat后的数据在shuffle跑到前面去,比如:
数据[1,2,3,4,5],在repeat后变成[1,2,3,4,5,1,2,3,4,5],shuffle后变成[1,1,2,3,3,4,2,5,5,4],课程后面在训练时每个epoch只执行了11160 // batch_size个step,这里就相当于step执行了5次(假设batch_size=1),那么在训练时就只训练了[1,1,2,3,3]这个几个数据?后面的数据怎么办?是不是缺少训练了?是否可以在第8行的repeat移动到第16行,即:dataset = dataset.repeat().batch(batch_size)
? - 数据集dataset是不是相当于generator,通过repeat可以不断的生成数据?
- 如何获取dataset的总长度,即样本数量,如果相当于generator是不是就没有长度的概念了?
写回答
1回答
-
同学你好:
前半部分你理解的是对的,interleave作用就是交错的进行数据的读取。但是并不是每次都打开关闭文件因为这样太耗时了,tf会做缓存把文件内容都读取进来然后再去做交错。然后就是数据应该是相互独立的,所以数据顺序本来就不重要,而不是因为后面有shuffle所以顺序不重要。
repeat的情况下会使得数据从后面跑到前面去。但是因为它是随机化的,所以你说的这样的极端情况应该大概率不存在。当然,按照你的改法应该会更好一些。
对的,相当于generator
是的,我们无法从dataset中获取到数据的总长度,只能像generator一样去使用。
012019-08-24
相似问题