# Tensorflow : Loading data from files with Queue Runners

파일로부터 읽어야 할 데이터가 많아진다면, 사용해야 하는 메모리도 증가하기 때문에 실제로 numpy를 이용한 파일 읽기가 '불가능'해진다.
파이썬, 텐서플로우에서는 이를 위해 Queue Runner라는 도구를 제공한다.
정리하면, '필요한 정보들만 선택적으로 골라서 이를 batch 형식으로 불러오는 방법' 이다.
즉 요구되는 내용만 꺼내어서 사용하기 때문에, 메모리 낭비도 일어나지 않는다.

굉장히 복잡해보이지만, 실제로는 간단하게 총 4가지 스텝으로 구성된다.

1. 파일의 리스트를 만든다

  • filename_queue = tf.train.string_input_producer(['파일이름1', '파일이름2', ... ], shuffle=False, name='filename')
  • 파일을 무한정으로 추가할 수 있다
    • 아마 무한정으로 하게 될 경우, 그에 따른 오버헤드도 발생하겠지만 여기선 논외!
  • Shuffle같은 경우에는 우선 지금 자세하게 볼 내용은 아니므로 건너뛰자

2.  파일을 읽어 올 reader를 생성

  • reader = tf.TextLineReader()
  • key, value = reader.read(filename_queue)
  • 일반적으로 텍스트 파일을 읽어올 때 사용된다

3. 파싱

  • record_defaults = [[0.], [0.], [0.], [0.]]
  • xy = tf.decode_csv(value, record_defulats=record_defaults)
    • ,(콤마)로 분리되는 값들에 대한 필드를 정의해 줄 수 있다
    • 예시는 float 이므로, 모두 [0.]으로 정의한 것

4. 배치(batch)

  • train_x_batch, train_y_batch = \
  • tf.train.batch([xy[0:-1], xy[-1:]], batch_size=10)
    • 앞부분은 x, 뒷부분은 y
    • batch_size: 몇개 씩 갖고올지를 정해주는 부분
  • 실제로 생성된 train_x_batch와 train_y_batch를 세션으로 run!

자세한 코드는 이곳에서 확인한다



댓글