Tensorflow csv输入管道:随机批次,但保留每批中的序列顺序

时间:2018-04-04 20:07:06

标签: python csv tensorflow rnn

我在tensorflow中构建了一个递归神经网络。然后我构建一个管道,将我的数据集(在csv文件中)的训练数据导入到我的模型中。代码部分(来源:here)中的过程非常有效。

filename_queue = tf.train.string_input_producer(["file0.csv", "file1.csv"])

reader = tf.TextLineReader()
key, value = reader.read(filename_queue)

# Default values, in case of empty columns. Also specifies the type of the
# decoded result.
record_defaults = [[1], [1], [1], [1], [1]]
col1, col2, col3, col4, col5 = tf.decode_csv(
    value, record_defaults=record_defaults)
features = tf.stack([col1, col2, col3, col4])

with tf.Session() as sess:
  # Start populating the filename queue.
  coord = tf.train.Coordinator()
  threads = tf.train.start_queue_runners(coord=coord)

  for i in range(1200):
    # Retrieve a single instance:
    example, label = sess.run([features, col5])

  coord.request_stop()
  coord.join(threads)

唯一的另一件事是,我使用

data_batch = tf.train.batch(
                [features], batch_size=n_steps_mul_batch_size, capacity=capacity)
data_batch_reshaped = tf.reshape(
            data_batch, [batch_size, n_steps, feature_num])

创建形状训练批次[batch_size x timesteps x features]。

现在我的问题:

我想将随机/混洗训练数据传递给我的模型,但同时保留每批中的序列顺序。因此,批次作为一个整体应该随机化/改组,但每批中的序列应保留原始序列顺序。有没有一种简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

据我所知,在Tensorflow中没有简单的方法。

但是,你可以手动完成:

import numpy as np
import random

def get_next_batch(data, batch_size):
    size = data.shape[0]
    rand_samples = random.sample(data[:, 0, 0], batch_size)
    data_batch = np.array([data[i] for i in range(size) if data[i, 0, 0] in rand_samples])
    return data_batch