TF를 사용하여 데이터 읽기에 대한 자습서를 읽고 몇 가지 시도를했습니다. 이제, 문제는 CSV에서 데이터를 읽을 때 작성한 배치에서 중복 된 데이터가 표시된다는 것입니다.파일 minibatches에서 읽은 중복 값 TensorFlow
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import collections
import numpy as np
from six.moves import xrange # pylint: disable=redefined-builtin
import tensorflow as tf
class XICSDataSet:
def __init__(self, height=20, width=195, batch_size=1000, noutput=15):
self.depth = 1
self.height = height
self.width = width
self.batch_size = batch_size
self.noutput = noutput
def trainingset_files_reader(self, data_dir, nfiles):
fnames = [os.path.join(data_dir, "test%d"%i) for i in range(nfiles)]
filename_queue = tf.train.string_input_producer(fnames, shuffle=False)
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
record_defaults = [[.0],[.0],[.0],[.0],[.0]]
data_tuple = tf.decode_csv(value, record_defaults=record_defaults, field_delim = ' ')
features = tf.pack(data_tuple[:-self.noutput])
label = tf.pack(data_tuple[-self.noutput:])
depth_major = tf.reshape(features, [self.height, self.width, self.depth])
min_after_dequeue = 100
capacity = min_after_dequeue + 30 * self.batch_size
example_batch, label_batch = tf.train.shuffle_batch([depth_major, label], batch_size=self.batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue)
return example_batch, label_batch
with tf.Graph().as_default():
ds = XICSDataSet(2, 2, 3, 1)
im, lb = ds.trainingset_files_reader(filename, 1)
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
tf.train.start_queue_runners(sess=sess)
for i in range(1000):
lbs = sess.run([im, lb])[1]
_, nu = np.unique(lbs, return_counts=True)
if np.array_equal(nu, np.array([1, 1, 1])) == False:
print('Not unique elements found in a batch!')
print(lbs)
내가 다른 배치 크기, 파일의 서로 다른 번호, 용량 및 min_after_dequeue의 다른 값으로했지만, 난 항상 문제를 얻을 :
내 코드는 다음과 같습니다. 결국, 나는 단지 하나의 파일에서 데이터를 읽고, 배치를 만들고, 예제를 셔플 링하고 싶습니다. 이 테스트를 위해 임시로 만든 내 파일에는 각각 샘플을 나타내는 5 줄과 5 열이 있습니다. 마지막 열은 해당 샘플의 레이블입니다. 이들은 단지 난수입니다. 이 파일을 테스트하기 위해 단지 10 개의 파일 만 사용하고 있습니다.
내 직감은 항목을 여러 번 읽는 것으로 끝나지만 파일의 끝에서 멈추지는 않습니다. min_after_deque가 파일의 항목 수와 크기가 비슷하면 두 개의 동일한 항목이 동일한 일괄 처리에 포함될 가능성이 큽니다. 왜냐하면 두 번째로 읽을 때까지 min_after_deque 엘리먼트에 남아 있기 때문이다. – titus