请稍等 ...
×

采纳答案成功!

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

keras读入数据的方式

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回答

  1. 不是全部的读入,因为内存可能放不下。而是异步读入,即先读入一部分,然后训练开始后,用过的数据会释放内存,同时dataset会继续读入新的内容。这个异步是dataset内部自己做的。这也是dataset的强大之处。

  2. 相当于是并行的生产者消费者模式,dataset会异步的读入数据,同时fit函数训练模型会消费数据,在整个过程中要保证数据读取不能成为训练的瓶颈。同时内存会够用。

2 回复 有任何疑惑可以回复我~
  • 老师,想问一下这个fit的内容,就是
    1. 如果是消费数据,那么这个tfrecords_train_set的内容每个batch的内容都是随机的还是固定的?就是说每个epoch中这个tfrecords_train_set都有可能是不一样的?
    2。如果每回都是相同的,如果被内存淘汰了,也需要从文件中重新读取是吗?
    回复 有任何疑惑可以回复我~ 2020-11-26 22:00:59
  • 1. 是随机还是固定,取决于你有没有设置shuffle。
    2. 是的。需要重新读取。
    回复 有任何疑惑可以回复我~ 2020-11-30 22:00:11
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信