keras读入数据的方式
来源:4-8 tf.data读取tfrecord文件并与tf.keras结合使用
慕姐8158610
2020-05-05
tfrecords_train_set = tfrecords_reader_dataset(
train_tfrecord_filenames, batch_size = batch_size)
这一步读取tfrecord数据,tf2.0中这会把所有的tfrecord文件都读入内存吗,如果读取的数据量非常大的话,内存是放不下的?如果不是全部读入内存,那么在print的时候应该是打印不出来数据的啊,难道只读入take涉及到数据的文件,如果是这样的话,那么tfrecords_reader_dataset函数并不真正出发文件的读取
model.fit(tfrecords_train_set,
validation_data = tfrecords_valid_set,
steps_per_epoch = 11160 // batch_size,
validation_steps = 3870 // batch_size,
epochs = 100,
callbacks = callbacks)
第二个是模型在fit的时候读取数据的方式,这时候是怎么读取的,这时候数据是流式一个batch一个batch的读取吗?在tfrecord文件的读取和模型输入这块的衔接的过程不明白,恳请老师帮忙详细解释下过程
1回答
-
不是全部的读入,因为内存可能放不下。而是异步读入,即先读入一部分,然后训练开始后,用过的数据会释放内存,同时dataset会继续读入新的内容。这个异步是dataset内部自己做的。这也是dataset的强大之处。
相当于是并行的生产者消费者模式,dataset会异步的读入数据,同时fit函数训练模型会消费数据,在整个过程中要保证数据读取不能成为训练的瓶颈。同时内存会够用。
222020-11-30
相似问题