TensorFlow tf.data, обрабатывающий dev, установленный после каждой эпохи - PullRequest
1 голос
/ 20 мая 2019
batch_size = 2
x_dim = 2
m = 5
m_dev = 4
epochs = 2

# Toy data
X_train = np.random.randn(m, x_dim)
Y_train = np.random.randint(0, 5, size=m).reshape(-1, 1)
X_dev = np.random.randn(m_dev, x_dim)
Y_dev = np.random.randint(0, 5, size=m_dev).reshape(-1, 1)

X = tf.placeholder(X_train.dtype, shape=[None, x_dim], name='X')
Y = tf.placeholder(Y_train.dtype, shape=[None, 1], name='Y')

# Create two separate datasets
train_dataset = tf.data.Dataset.from_tensor_slices((X, Y)).batch(batch_size)
dev_dataset = tf.data.Dataset.from_tensor_slices((X, Y)).batch(X_dev.shape[0])

# Create a generic Iterator
iterator = tf.data.Iterator.from_structure(train_dataset.output_types,
                                           train_dataset.output_shapes)

# Create two init ops
train_init_op = iterator.make_initializer(train_dataset)
dev_init_op = iterator.make_initializer(dev_dataset)

next_data = iterator.get_next()

with tf.Session() as sess:
    for epoch in range(epochs):
        # Training data
        sess.run(train_init_op, feed_dict={X: X_train, Y: Y_train})
        while True:
            try:
                X_batch, Y_batch = sess.run(next_data)
                # process training data
            except tf.errors.OutOfRangeError:
                break

        # Epoch done: process the dev data
        sess.run(dev_init_op, feed_dict={X: X_dev, Y: Y_dev})
        X_dev_all, Y_dev_all = sess.run(next_data)

Я использую tf.data с переинициализируемым итератором для обработки данных обучения и набора данных.Для каждой эпохи я инициализирую набор данных тренировки. Официальная документация имеет аналогичную структуру.Я думаю, что это неэффективно, особенно если тренировочный набор большой.

Некоторые из ресурсов, которые я нашел в сети, имеют sess.run(train_init_op, feed_dict={X: X_train, Y: Y_train}) перед циклом for, чтобы избежать этой проблемы.Но тогда мы не можем обработать набор разработчика после каждой эпохи;мы можем обработать его только после того, как закончим epochs эпох.

Есть ли способ эффективно обработать набор dev после каждой эпохи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...