tensorflow数据集API在make_initializable_iterator和make_one_shot_i之间的差异

2024-09-28 23:52:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道make_initializable_iterator和{}之间的区别。
1Tensorflow文档说A "one-shot" iterator does not currently support re-initialization.这到底是什么意思?
2下面两个片段是等价的?
使用make_initializable_iterator

iterator = data_ds.make_initializable_iterator()
data_iter = iterator.get_next()
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for e in range(1, epoch+1):
    sess.run(iterator.initializer)
    while True:
        try:
            x_train, y_train = sess.run([data_iter])
            _, cost = sess.run([train_op, loss_op], feed_dict={X: x_train,
                                                               Y: y_train})
        except tf.errors.OutOfRangeError:   
            break
sess.close()

使用make_one_shot_iterator

^{pr2}$

Tags: run文档datamaketftrainonesess
1条回答
网友
1楼 · 发布于 2024-09-28 23:52:11

假设您希望使用相同的代码来进行培训和验证。您可能希望使用相同的迭代器,但初始化后指向不同的数据集;如下所示:

def _make_batch_iterator(filenames):
    dataset = tf.data.TFRecordDataset(filenames)
    ...
    return dataset.make_initializable_iterator()


filenames = tf.placeholder(tf.string, shape=[None])
iterator = _make_batch_iterator(filenames)

with tf.Session() as sess:
    for epoch in range(num_epochs):

        # Initialize iterator with training data
        sess.run(iterator.initializer,
                 feed_dict={filenames: ['training.tfrecord']})

        _train_model(...)

        # Re-initialize iterator with validation data
        sess.run(iterator.initializer,
                 feed_dict={filenames: ['validation.tfrecord']})

        _validate_model(...)

对于一次性迭代器,您不能像这样重新初始化它。在

相关问题 更多 >