最近看了下pytorch的数据读取接口,一个dataset,一个dataloader。相比tf的话,可以说抽象的好一些,但是tf的话封装集成的好一些。
pytorch的话适合小数据集合的快速开发和实验。tf的话,更侧重工业级一点,一次调通之后,以后不需要经常变,性能的收益是比较好的。另外tf的生态好一些。一些性能优化的api都是很不错的。当然我只是粗浅的看了doc并且试用了一下,大概率fb或者其他企业级有内部用的话,有很多trick。
pytorch的话,首先需要定一个dataset ,这个dataset(普通的dataset和迭代器的dataset)的主要作用是实现函数,来操作具体怎么读取一条数据。
然后dataloader的话,就是具体实现batch和shuffle的作用。
之前之前用tf的读取接口,从queue runner到 dataset,可是说用起来还是比较方便的。只要把读取的文件名称输入就行了,然后实现下解析数据的接口,可以说非常方便,没有怎么了解过读取的细节。这次看torch的读取,大概了解了读取的细节,想来两者实现上本周没有太大的区别。
tf维护两个队列,文件列表和内存列表,一个线程读取文件内容往buf里写(并不是文件内容都读到内存里,而是一条一条读取),一个线程从buf里取数据送给gpu进行计算。shuffle里的buf_size写的就是内存的大小。tf的,prefetch主要是得到batch后,给gpu缓存的操作。保障gpu的使用率