반응형

Consuming sets of files

 

여러개의 파일로 분산된 데이터셋을 처리하기 위한 예제이다.

flowers_root = tf.keras.utils.get_file('flower_photos',
              'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
              untar=True) 
flowers_root = pathlib.Path(flowers_root) 

flowers_root

WindowsPath('C:/Users/.../.keras/datasets/flower_photos')

root 디렉토리는 각 클래스의 디렉토리를 포함하고 있다.

for item in flowers_root.glob("*"):
  print(item.name)

sunflowers 
daisy 
LICENSE.txt 
roses 
tulips 
dandelion 

각 클래스 디렉토리내 파일의 예제이다.

str(flowers_root/'*/*')

list_ds
 
= tf.data.Dataset.list_files(str(flowers_root/'*/*')) 

for f in list_ds.take(5):
   print(f.numpy()) 
'C:\\Users\\...\\.keras\\datasets\\flower_photos\\*\\*'
b'C:\\Users\\...\\.keras\\datasets\\flower_photos\\daisy\\4724713781_d169f98a35.jpg'
b'C:\\Users\\...\\.keras\\datasets\\flower_photos\\dandelion\\8749577087_dc2521615f_n.jpg'
b'C:\\Users\\...\\.keras\\datasets\\flower_photos\\tulips\\8520488975_a50d377f91.jpg'
b'C:\\Users\\...\\.keras\\datasets\\flower_photos\\daisy\\1392131677_116ec04751.jpg'
b'C:\\Users\\...\\.keras\\datasets\\flower_photos\\sunflowers\\5999024446_5721493894.jpg'

 tf.io.read_file 함수를 사용하여 데이터를 로드하고 파일의 경로에서 label을 추출하여 (image, label) 쌍을 반환한다.

def process_path(file_path):
   label = tf.strings.split(file_path, os.sep)[-2]
   return tf.io.read_file(file_path), label

labeled_ds = list_ds.map(process_path) 

for image_raw, label_text in labeled_ds.take(1):
   print(repr(image_raw.numpy()[:100]))
   print()
   print(label_text.numpy()) 

b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xdb\x00C\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x02\x02\x03\x02\x02\x02\x02\x02\x04\x03\x03\x02\x03\x05\x04\x05\x05\x05\x04\x04\x04\x05\x06\x07\x06\x05\x05\x07\x06\x04\x04\x06\t\x06\x07\x08\x08\x08\x08\x08\x05\x06\t\n\t\x08\n\x07\x08\x08\x08\xff\xdb\x00C\x01\x01\x01\x01\x02\x02\x02'

b'sunflowers' 

 

 

반응형

+ Recent posts