我在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]。
现在我的问题:
我想将随机/混洗训练数据传递给我的模型,但同时保留每批中的序列顺序。因此,批次作为一个整体应该随机化/改组,但每批中的序列应保留原始序列顺序。有没有一种简单的方法可以做到这一点?
答案 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