Tensorflow Chapter 6. 파일 불러오기

Chapter 6. 파일 불러오기

6강에서는 파일 불러오기를 완벽히 가르쳐주지 않고 다음 강의인 7강에 내용을 보충하여 설명해주셨다. 파일 뿐만 아니라 7강에서는 이미지 또한 불러오는 내용도 추가했다. 하지만 pandas 처럼 간단하지 않고 queue 에 넣고 queue_runner와 Coordinator를 실행해 하나씩 파일을 꺼내야 한다.

결론적으로 이미지를 불러오는 코드를 공부해봐야겠다. 강의에서 오류 없이 돌아가지만 내 컴퓨터에서 돌아가지 않는 코드는 일부 수정했다.
아래 코드는 강의를 8강까지 더 듣고 수정했다. csv 파일과 image파일을 읽어 오는 코드이다.

import tensorflow as tf
from PIL import Image

IMAGE_PATH = '../data/Face00001.png'
LABEL_PATH = '../data/Label.csv'
IMAGE_LIST = [ IMAGE_PATH ]
LABEL_LIST = [ LABEL_PATH ]
IMAGE_WIDTH = 49
IMAGE_HEIGHT = 61

label_queue = tf.train.string_input_producer(LABEL_LIST)
image_queue = tf.train.string_input_producer(IMAGE_LIST)

reader_csv = tf.TextLineReader()
reader_image = tf.WholeFileReader()

label_key, label_value = reader_csv.read(label_queue)
key, value = reader_image.read(image_queue)

image_decoded = tf.image.decode_png(value)
label_decoded = tf.decode_csv(label_value,record_defaults = [[0]])

x = tf.cast(image_decoded, tf.float32)
y_ = tf.cast(label_decoded, tf.float32)
y_ = tf.reshape(y_, [-1,1])

with tf.Session() as sess:
    init = tf.initialize_all_variables()
    sess.run(init)
    coord = tf.train.Coordinator()
    thread = tf.train.start_queue_runners(sess=sess,coord=coord)
    print sess.run([label_key, label_value])

    image = sess.run(image_decoded)
    image = image.reshape((image.shape[0], -1))
    image = Image.fromarray(image).show()

    coord.request_stop()
    coord.join(thread)

pandas와는 다르게 큐를 이용해서 파일을 불러온다. 그래서 그런지 코드가 복잡해진다. tf.train.string_input_producer 함수는 큐로 이루어진 결과 문자열을 리턴한다. 그리고 wholeFileReader 객체를 불러들이고 큐를 넣어 read한다. 그럼 파일 이름을 가진 key와 파일의 내용을 담은 value를 리턴한다. 내용이 이미지이기 때문에 decode_png 함수를 이용해 decode한다.

세션 안에서는 스레드를 코디네이터하는 객체를 선언하고 queue_runner를 통해 코디네이터를 실행시킨다. 그럼 큐 안에 있던 스레드들을 실행시킬 수 있다.

image 안에 있던 텐서가 3차원이어서 show() 함수를 실행시켜도 사진이 나오지 않았다. 그래서 reshape를 통해 2차원으로 만들고 PIL 모듈을 이용해 출력해볼 수 있었다.

마지막으로 coord 객체 안에 있는 스레드를 멈추게 하는 함수인 request_stop을 실행하고 thread.join(thread)는 스레드가 종료될 때까지 기다린다.

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리