tensorflow Dataset及TFRecord一些要点持续更新

Posted zhouxiaosong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow Dataset及TFRecord一些要点持续更新相关的知识,希望对你有一定的参考价值。

关于tensorflow结合Dataset与TFRecord这方面看到挺好一篇文章:

https://cloud.tencent.com/developer/article/1088751

github:

https://github.com/YJango/TFRecord-Dataset-Estimator-API/blob/master/TensorFlow%20Dataset%20%2B%20TFRecords.ipynb

 

dataset要点:

一般先shuffle,然后batch,再repeat

当然可以先repeat再batch,这样做与前面一个的区别就是最后一个batch是会有一部分之前batch里出现过的数据,在测试集上这么做要谨慎。

 

dataset的one_shot_iterator和make_initializable_iterator

看到stackoverflow上有个问题:

https://stackoverflow.com/questions/48091693/tensorflow-dataset-api-diff-between-make-initializable-iterator-and-make-one-sho

其实我觉得题主想问的不是答主说的意思,实际上one-shot迭代器只能迭代一轮,initializable迭代器可以迭代多轮(通过sess.run(iterator.initializer)来实现。那么这两种迭代器的区别就非常明显了,换句话说,题主的第二个代码片段,除了第0个epoch之外,剩下的所有epoch都没有数据,会报错。

可以看下面这段代码来测试:

import tensorflow as tf
import numpy as np
dataset = tf.data.Dataset.from_tensor_slices(np.random.uniform(size=(5, 2))).shuffle(100).batch(2)
iterator = dataset.make_initializable_iterator()
# iterator = dataset.make_one_shot_iterator()
one_element = iterator.get_next()
with tf.Session() as sess:

    for i in range(5):
        sess.run(iterator.initializer)
        while True:
            try:
                print(sess.run(one_element))
            except tf.errors.OutOfRangeError:
                print("Epoch %s is done." % i)
                break

  

 

以上是关于tensorflow Dataset及TFRecord一些要点持续更新的主要内容,如果未能解决你的问题,请参考以下文章

『TensorFlow』数据读取类_data.Dataset

tensorflow dataset.shuffle dataset.batch dataset.repeat 理解 注意点

tensorflow的keras实现搭配dataset 之一

在tensorflow中使用`dataset.map()`访问张量numpy数组

TensorFlow:dataset.train.next_batch 是如何定义的?

Google老师亲授 TensorFlow2.0入门到进阶笔记- (dataset)