Path: blob/master/site/ko/tutorials/load_data/csv.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
CSV λ°μ΄ν° λ‘λνκΈ°
μ΄ νν 리μΌμ TensorFlowμμ CSV λ°μ΄ν°λ₯Ό μ¬μ©νλ λ°©λ²μ λν μμ λ₯Ό μ 곡ν©λλ€.
λ€μκ³Ό κ°μ΄ λ κ°μ§ μ£Όμ λ΄μ©μ΄ μμ΅λλ€.
Loading the data off disk
Pre-processing it into a form suitable for training.
μ΄ νν 리μΌμ λ‘λ©μ μ€μ μ λλ©° μ μ²λ¦¬μ λν λͺ κ°μ§ λΉ λ₯Έ μλ₯Ό μ 곡ν©λλ€. μ μ²λ¦¬ μΈ‘λ©΄μ λν΄ μμΈν μμλ³΄λ €λ©΄ μ μ²λ¦¬ λ μ΄μ΄ μμ κ°μ΄λ λ° Keras μ μ²λ¦¬ λ μ΄μ΄λ₯Ό μ¬μ©νμ¬ κ΅¬μ‘°νλ λ°μ΄ν° λΆλ₯ νν 리μΌμ νμΈνμΈμ.
μ€μ νκΈ°
μΈλ©λͺ¨λ¦¬ λ°μ΄ν°
μμ ν¬κΈ°μ CSV λ°μ΄ν°μΈνΈλ₯Ό μ¬μ©νμ¬ TensorFlow λͺ¨λΈμ νλ ¨μν€λ κ°μ₯ κ°λ¨ν λ°©λ²μ μ΄λ₯Ό λ©λͺ¨λ¦¬μ pandas Dataframe λλ NumPy λ°°μ΄λ‘ λ‘λνλ κ²μ λλ€.
λΉκ΅μ κ°λ¨ν μλ μ 볡 λ°μ΄ν°μΈνΈμ λλ€.
λ°μ΄ν°μΈνΈμ ν¬κΈ°κ° μμ΅λλ€.
λͺ¨λ μ λ ₯ νΉμ±μ λͺ¨λ μ νλ λ²μμ λΆλ μμμ κ°μ λλ€.
λ€μμ Pandas DataFrame
μ λ°μ΄ν°λ₯Ό λ€μ΄λ‘λνλ λ°©λ²μ
λλ€.
μ΄ λ°μ΄ν°μΈνΈμλ λ°λ€ κ³ λ±λ₯μ μΌμ’ μΈ μ 볡 μΈ‘μ κ° μΈνΈκ° ν¬ν¨λμ΄ μμ΅λλ€.
βμ 볡 κ»μ§β (Nicki Dugan Pogue μ 곡, CC BY-SA 2.0)
μ΄ λ°μ΄ν° μΈνΈμ λͺ λͺ©μ μμ μ λ€λ₯Έ μΈ‘μ κ°μΌλ‘λΆν° λμ΄λ₯Ό μμΈ‘νλ κ²μ΄λ―λ‘ λ€μκ³Ό κ°μ΄ νλ ¨μ μν΄ νΉμ±κ³Ό λ μ΄λΈμ λΆλ¦¬ν©λλ€.
μ΄ λ°μ΄ν°μΈνΈμμλ λͺ¨λ νΉμ±μ λμΌνκ² μ·¨κΈν©λλ€. λ€μκ³Ό κ°μ΄ νΉμ±μ λ¨μΌ NumPy λ°°μ΄λ‘ λ¬Άμ΅λλ€.
λ€μμΌλ‘, νκ· λͺ¨λΈλ‘ λμ΄λ₯Ό μμΈ‘ν©λλ€. μ
λ ₯ ν
μκ° νλλ§ μμΌλ―λ‘ μ¬κΈ°μμλ keras.Sequential
λͺ¨λΈμ΄λ©΄ μΆ©λΆν©λλ€.
ν΄λΉ λͺ¨λΈμ νλ ¨νλ €λ©΄ νΉμ±κ³Ό λ μ΄λΈμ Model.fit
λ‘ μ λ¬ν©λλ€.
μ§κΈκΉμ§ CSV λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ λͺ¨λΈμ νλ ¨νλ κ°μ₯ κΈ°λ³Έμ μΈ λ°©λ²μ 보μμ΅λλ€. λ€μμΌλ‘ μ«μ μ΄μ μ κ·ννκΈ° μν΄ μ μ²λ¦¬λ₯Ό μ μ©νλ λ°©λ²μ λ°°μλλ€.
κΈ°λ³Έ μ μ²λ¦¬
λͺ¨λΈμ λν μ λ ₯μ μ κ·ννλ©΄ μ’μ΅λλ€. Keras μ μ²λ¦¬ λ μ΄μ΄λ μ΄ μ κ·νλ₯Ό λͺ¨λΈμ λΉλνλ νΈλ¦¬ν λ°©λ²μ μ 곡ν©λλ€.
tf.keras.layers.Normalization
λ μ΄μ΄λ κ° μ΄μ νκ· κ³Ό λΆμ°μ 미리 κ³μ°νκ³ μ΄λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ κ·νν©λλ€.
λ¨Όμ λ μ΄μ΄λ₯Ό λ§λλλ€.
κ·Έλ° λ€μ Normalization.adapt
λ©μλλ₯Ό μ¬μ©νμ¬ μ κ·ν λ μ΄μ΄λ₯Ό λ°μ΄ν°μ λ§κ² μ‘°μ ν©λλ€.
μ°Έκ³ : PreprocessingLayer.adapt
λ©μλμ ν¨κ» νλ ¨ λ°μ΄ν°λ§ μ¬μ©νκ³ κ²μ¦ λλ ν
μ€νΈ λ°μ΄ν°λ μ¬μ©νμ§ λ§μΈμ.
κ·Έλ° λ€μ λͺ¨λΈμμ μ κ·ν λ μ΄μ΄λ₯Ό μ¬μ©ν©λλ€.
νΌν© λ°μ΄ν° μ ν
The "Titanic" dataset contains information about the passengers on the Titanic. The nominal task on this dataset is to predict who survived.
Image from Wikimedia
The raw data can easily be loaded as a Pandas DataFrame
, but is not immediately usable as input to a TensorFlow model.
λ°μ΄ν° μ νκ³Ό λ²μκ° λ€λ₯΄κΈ° λλ¬Έμ λ¨μν νΉμ±μ NumPy λ°°μ΄μ μμμ keras.Sequential
λͺ¨λΈλ‘ μ λ¬ν μ μμ΅λλ€. κ° μ΄μ κ°λ³μ μΌλ‘ μ²λ¦¬ν΄μΌ ν©λλ€.
ν κ°μ§ μ΅μ μΌλ‘ λ°μ΄ν°λ₯Ό μ€νλΌμΈμΌλ‘ μ μ²λ¦¬(μνλ λꡬ μ¬μ©)νμ¬ λ²μ£Όν μ΄μ μ«μ μ΄λ‘ λ³νν λ€μ μ²λ¦¬λ μΆλ ₯μ TensorFlow λͺ¨λΈμ μ λ¬ν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ λ¨μ μ λͺ¨λΈμ μ μ₯νκ³ λ΄λ³΄λ΄λ κ²½μ° μ μ²λ¦¬κ° ν¨κ» μ μ₯λμ§ μλλ€λ κ²μ λλ€. Keras μ μ²λ¦¬ λ μ΄μ΄λ λͺ¨λΈμ μΌλΆμ΄κΈ° λλ¬Έμ μ΄ λ¬Έμ λ₯Ό νΌν μ μμ΅λλ€.
μ΄ μμ μμλ Keras ν¨μν APIλ₯Ό μ¬μ©νμ¬ μ μ²λ¦¬ λ‘μ§μ ꡬννλ λͺ¨λΈμ λΉλν©λλ€. νμ ν΄λμ€ννμ¬ κ°μ μμ μ μνν μλ μμ΅λλ€.
ν¨μν APIλ "κΈ°νΈνλ" ν μμμ μλν©λλ€. μ μμ μΈ "μ¦μ(eager)" ν μμλ κ°μ΄ μμ΅λλ€. λμ‘°μ μΌλ‘ μ΄λ¬ν "κΈ°νΈνλ" ν μμλ κ°μ΄ μμ΅λλ€. λμ μ μ€νλλ μμ μ μΆμ νκ³ λμ€μ μ€νν μ μλ κ³μ° ννμ μμ±ν©λλ€. λ€μμ κ°λ¨ν μμ μ λλ€.
μ μ²λ¦¬ λͺ¨λΈμ λΉλνλ €λ©΄ λ¨Όμ CSV μ΄μ μ΄λ¦ λ° λ°μ΄ν° μ νκ³Ό μΌμΉνλ κΈ°νΈνλ tf.keras.Input
κ°μ²΄ μΈνΈλ₯Ό λΉλν©λλ€.
μ μ²λ¦¬ λ Όλ¦¬μ 첫 λ²μ§Έ λ¨κ³λ μ«μ μ λ ₯μ ν¨κ» μ°κ²°νκ³ μ΄λ₯Ό μ κ·ν λ μ΄μ΄λ₯Ό ν΅ν΄ μ€ννλ κ²μ λλ€.
λμ€μ μ°κ²°ν μ μλλ‘ λͺ¨λ κΈ°νΈνλ μ μ²λ¦¬ κ²°κ³Όλ₯Ό μμ§ν©λλ€.
λ¬Έμμ΄ μ
λ ₯μ κ²½μ° tf.keras.layers.StringLookup
ν¨μλ₯Ό μ¬μ©νμ¬ λ¬Έμμ΄λ‘λΆν° μ΄νμ μ μ μΈλ±μ€λ‘ λ§€νν©λλ€. κ·Έλ° λ€μ tf.keras.layers.CategoryEncoding
μ μ¬μ©νμ¬ μΈλ±μ€λ₯Ό λͺ¨λΈμ μ ν©ν float32
λ°μ΄ν°λ‘ λ³νν©λλ€.
tf.keras.layers.CategoryEncoding
λ μ΄μ΄μ κΈ°λ³Έ μ€μ μ κ° μ
λ ₯μ λν΄ μ-ν« λ²‘ν°λ₯Ό μμ±νλ κ²μ
λλ€. tf.keras.layers.Embedding
λ μλν©λλ€. μ΄ μ£Όμ μ λν μμΈν λ΄μ©μ μ μ²λ¦¬ λ μ΄μ΄ μμ
κ°μ΄λ λ° Keras μ μ²λ¦¬ λ μ΄μ΄λ₯Ό μ¬μ©νμ¬ κ΅¬μ‘°νλ λ°μ΄ν° λΆλ₯ νν 리μΌμ νμΈνμΈμ.
inputs
λ° preprocessed_inputs
λͺ¨μμ μ¬μ©νμ¬ μ μ²λ¦¬λ λͺ¨λ μ
λ ₯μ ν¨κ» μ°κ²°νκ³ μ μ²λ¦¬λ₯Ό μ²λ¦¬νλ λͺ¨λΈμ λΉλν μ μμ΅λλ€.
μ΄ λͺ¨λΈμ μ
λ ₯ μ μ²λ¦¬λ§ ν¬ν¨ν©λλ€. μ΄λ₯Ό μ€ννμ¬ λ°μ΄ν°μ μ΄λ€ μν₯μ λ―ΈμΉλμ§ νμΈν μ μμ΅λλ€. Keras λͺ¨λΈμ Pandas DataFrames
λ₯Ό μλμΌλ‘ λ³ννμ§ μμ΅λλ€. μλνλ©΄ νλμ ν
μλ‘ λ³νν΄μΌ νλμ§ μλλ©΄ ν
μ μ¬μ μΌλ‘ λ³νν΄μΌ νλμ§κ° λͺ
ννμ§ μκΈ° λλ¬Έμ
λλ€. λ°λΌμ μ΄λ₯Ό ν
μ μ¬μ μΌλ‘ λ³νν©λλ€.
첫 λ²μ§Έ νλ ¨ μμ λ₯Ό μλΌμ μ΄ μ μ²λ¦¬ λͺ¨λΈλ‘ μ λ¬νλ©΄ μ«μ νΉμ±κ³Ό λ¬Έμμ΄ μ-ν«μ΄ λͺ¨λ ν¨κ» μ°κ²°λ κ²μ λ³Ό μ μμ΅λλ€.
μ΄μ μ΄ μμ λͺ¨λΈμ λΉλν©λλ€.
λͺ¨λΈμ νλ ¨ν λ νΉμ± μ¬μ μ x
λ‘, λ μ΄λΈμ y
λ‘ μ λ¬ν©λλ€.
μ μ²λ¦¬λ λͺ¨λΈμ μΌλΆμ΄λ―λ‘ λͺ¨λΈμ μ μ₯νκ³ λ€λ₯Έ κ³³μ λ€μ λ‘λνμ¬λ λμΌν κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€.
tf.data μ¬μ©νκΈ°
μ΄μ μΉμ μμλ λͺ¨λΈμ νλ ¨νλ λμ λͺ¨λΈμ λ΄μ₯ λ°μ΄ν° μ νλ§ λ° λ°°μΉμ μμ‘΄νμ΅λλ€.
μ
λ ₯ λ°μ΄ν° νμ΄νλΌμΈμ λ λ§μ΄ μ μ΄ν΄μΌ νκ±°λ λ©λͺ¨λ¦¬μ μ½κ² λ§μΆ μ μλ λ°μ΄ν°λ₯Ό μ¬μ©ν΄μΌ νλ κ²½μ° tf.data
λ₯Ό μ¬μ©ν©λλ€.
λ λ§μ μλ₯Ό λ³΄λ €λ©΄ tf.data
: TensorFlow μ
λ ₯ νμ΄νλΌμΈ λΉλ κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ.
μΈλ©λͺ¨λ¦¬ λ°μ΄ν°μμ
CSV λ°μ΄ν°μ tf.data
λ₯Ό μ μ©νλ 첫 λ²μ§Έ μμ λ‘ λ€μ μ½λλ₯Ό κ³ λ €ν κ²½μ° μ΄μ μΉμ
μ νΉμ± μ¬μ μ μλμΌλ‘ λΆν ν©λλ€. κ° μΈλ±μ€μλ κ° νΉμ±μ λν΄ μ΄λ¬ν μΈλ±μ€λ₯Ό μ¬μ©ν©λλ€.
μ΄κ²μ μ€ννκ³ μ²« λ²μ§Έ μμ λ₯Ό μΆλ ₯ν©λλ€.
λ©λͺ¨λ¦¬ λ°μ΄ν° λ‘λμμ κ°μ₯ κΈ°λ³Έμ μΈ tf.data.Dataset
μ Dataset.from_tensor_slices
μμ±μμ
λλ€. μ΄κ²μ TensorFlowμμ μμ slices
ν¨μμ μΌλ°νλ λ²μ μ ꡬννλ tf.data.Dataset
λ₯Ό λ°νν©λλ€.
λ€λ₯Έ Python iterableκ³Ό λ§μ°¬κ°μ§λ‘ tf.data.Dataset
μ λν΄ λ°λ³΅ν μ μμ΅λλ€.
from_tensor_slices
ν¨μλ λͺ¨λ ꡬ쑰μ μ€μ²©λ μ¬μ λλ ννμ μ²λ¦¬ν μ μμ΅λλ€. λ€μ μ½λλ (features_dict, labels)
μμ λ°μ΄ν°μΈνΈλ₯Ό λ§λλλ€.
μ΄ Dataset
λ₯Ό μ¬μ©νμ¬ λͺ¨λΈμ νλ ¨νλ €λ©΄ μ΅μν λ°μ΄ν°λ₯Ό shuffle
νκ³ batch
μ²λ¦¬ν΄μΌ ν©λλ€.
features
λ° labels
λ₯Ό Model.fit
μ μ λ¬νλ λμ λ°μ΄ν°μΈνΈλ₯Ό μ λ¬ν©λλ€.
λ¨μΌ νμΌλ‘λΆν°
μ§κΈκΉμ§ μ΄ νν 리μΌμ μΈλ©λͺ¨λ¦¬ λ°μ΄ν°λ‘ μμ
νμ΅λλ€. tf.data
λ λ°μ΄ν° νμ΄νλΌμΈμ λΉλνκΈ° μν νμ₯μ±μ΄ λ°μ΄λ ν΄ν·μ΄λ©° CSV νμΌ λ‘λλ₯Ό μ²λ¦¬νλ λͺ κ°μ§ κΈ°λ₯μ μ 곡ν©λλ€.
μ΄μ νμΌμμ CSV λ°μ΄ν°λ₯Ό μ½κ³ tf.data.Dataset
λ₯Ό μμ±ν©λλ€.
(μ 체 μ€λͺ
μλ tf.data.experimental.make_csv_dataset
λ₯Ό μ°Έμ‘°νμΈμ.)
μ΄ ν¨μμλ λ§μ νΈλ¦¬ν νΉμ±μ΄ ν¬ν¨λμ΄ μμ΄ λ°μ΄ν° μμ μ΄ μ©μ΄ν©λλ€. μ¬κΈ°μλ λ€μμ΄ ν¬ν¨λμ΄ μμ΅λλ€.
μ΄ ν€λλ₯Ό μ¬μ ν€λ‘ μ¬μ©.
κ° μ΄μ μ νμ μλμΌλ‘ κ²°μ .
μ£Όμ: tf.data.experimental.make_csv_dataset
μμ num_epochs
μΈμλ₯Ό μ€μ ν΄μΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ tf.data.Dataset
μ κΈ°λ³Έ λμμ 루νλ₯Ό 무νν λ°λ³΅νλ κ²μ
λλ€.
μ°Έκ³ : μμ μ
μ λ λ² μ€ννλ©΄ λ€λ₯Έ κ²°κ³Όκ° μμ±λ©λλ€. tf.data.experimental.make_csv_dataset
μ κΈ°λ³Έ μ€μ μλ shuffle_buffer_size=1000
μ΄ ν¬ν¨λλ©°, μ΄λ μ΄ μμ λ°μ΄ν°μΈνΈμλ μΆ©λΆνμ§λ§ μ€μ λ°μ΄ν°μΈνΈμλ κ·Έλ μ§ μμ μ μμ΅λλ€.
μ¦μ λ°μ΄ν° μμΆμ ν μλ μμ΅λλ€. λ€μμ λλμ μ£Όκ° κ΅ν΅λ λ°μ΄ν°μΈνΈκ° ν¬ν¨λ gzipμΌλ‘ μμΆλ CSV νμΌμ λλ€.
μ΄λ―Έμ§ μΆμ²: Wikimedia
μμΆλ νμΌλ‘λΆν° μ§μ μ½λλ‘ compression_type
μΈμλ₯Ό μ€μ ν©λλ€.
μ°Έκ³ : tf.data
νμ΄νλΌμΈμμ ν΄λΉ λ μ§-μκ° λ¬Έμμ΄μ νμ±ν΄μΌ νλ κ²½μ° tfa.text.parse_time
μ μ¬μ©ν μ μμ΅λλ€.
μΊμ±
CSV λ°μ΄ν°λ₯Ό νμ±νλ λ° μ½κ°μ μ€λ²ν€λκ° μμ΅λλ€. μμ ν¬κΈ°μ λͺ¨λΈμ κ²½μ° μ΄λ νλ ¨ λ³λͺ© νμμ΄ λ°μν μ μμ΅λλ€.
μ¬μ© μ¬λ‘μ λ°λΌ CSV λ°μ΄ν°κ° 첫 epochμμλ§ κ΅¬λ¬Έ λΆμλλλ‘ Dataset.cache
λλ tf.data.Dataset.snapshot
μ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
cache
μ snapshot
λ©μλμ μ£Όμ μ°¨μ΄μ μ cache
νμΌμ μ΄λ₯Ό μμ±ν TensorFlow νλ‘μΈμ€μμλ§ μ¬μ©ν μ μλ€λ κ²μ
λλ€. λ€λ§, snapshot
νμΌμ λ€λ₯Έ νλ‘μΈμ€μμ μ½μ μ μμ΅λλ€.
μλ₯Ό λ€μ΄, traffic_volume_csv_gz_ds
λ₯Ό 20λ² λ°λ³΅νλ λ° μΊμ± μμ΄λ μ½ 15μ΄, μΊμ±μ΄ μμΌλ©΄ μ½ 2μ΄κ° 걸릴 μ μμ΅λλ€.
μ°Έκ³ : Dataset.cache
λ 첫 λ²μ§Έ epochμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μμλλ‘ μ¬μν©λλ€. λ°λΌμ cache
λ©μλλ₯Ό μ¬μ©νλ©΄ νμ΄νλΌμΈμ μ΄κΈ°μ λͺ¨λ μ
νμ΄ λΉνμ±νλ©λλ€. μλμμ Dataset.shuffle
μ Dataset.cache
λ€μ λ€μ μΆκ°λ©λλ€.
μ°Έκ³ : tf.data.Dataset.snapshot
νμΌμ μ¬μ© μ€μΈ λ°μ΄ν°μΈνΈλ₯Ό μμ μ μ₯ν κ²½μ° μ¬μ©ν©λλ€. μ΄κ²μ μ₯κΈ° μ μ₯μ μν νμμ΄ μλλλ€. νμΌ νμμ λ΄λΆ μΈλΆ μ λ³΄λ‘ κ°μ£Όλλ©° TensorFlow λ²μ κ°μ νΈνμ 보μ₯λμ§ μμ΅λλ€.
CSV νμΌ λ‘λλ‘ μΈν΄ λ°μ΄ν° λ‘λκ° λλ €μ§κ³ Dataset.cache
λ° tf.data.Dataset.snapshot
μ΄ μ¬μ© μ¬λ‘μ μΆ©λΆνμ§ μμ κ²½μ°, λ°μ΄ν°λ₯Ό λ³΄λ€ κ°μνλ νμμΌλ‘ λ€μ μΈμ½λ©νλ κ²μ΄ μ’μ΅λλ€.
μ¬λ¬ νμΌ
μ§κΈκΉμ§ μ΄ μΉμ
μ λͺ¨λ μμ λ tf.data
μμ΄ μ½κ² μνν μ μμμ΅λλ€. tf.data
λ₯Ό μ¬μ©νμ¬ μ€μ λ‘ μμ
μ λ¨μνν μ μλ ν μλ νμΌ λͺ¨μμ μ²λ¦¬ν κ²½μ°μ
λλ€.
μλ₯Ό λ€μ΄ λ¬Έμ κΈκΌ΄ μ΄λ―Έμ§ λ°μ΄ν°μΈνΈλ κΈκΌ΄λΉ νλμ©, csv νμΌ λͺ¨μμΌλ‘ λ°°ν¬λ©λλ€.
Pixabayμμ Willi Heidelbachκ° μ 곡ν μ΄λ―Έμ§
λ°μ΄ν°μΈνΈλ₯Ό λ€μ΄λ‘λνκ³ λ΄λΆ νμΌμ κ²ν ν©λλ€.
λ§μ νμΌμ μ²λ¦¬ν κ²½μ° glob μ€νμΌμ file_pattern
μ tf.data.experimental.make_csv_dataset
ν¨μμ μ λ¬ν μ μμ΅λλ€. νμΌμ μμλ κ° λ°λ³΅λ§λ€ λ€μμ
λλ€.
num_parallel_reads
μΈμλ₯Ό μ¬μ©νμ¬ λ³λ ¬λ‘ μ½κ³ ν¨κ» μΈν°λ¦¬λΈ μ²λ¦¬λλ νμΌμ μλ₯Ό μ€μ ν©λλ€.
μ΄λ¬ν CSV νμΌμ μ΄λ―Έμ§λ λ¨μΌ νμΌλ‘ νλ©΄νλμ΄ μμ΅λλ€. μ΄ μ΄λ¦μ νμμ r{row}c{column}
μ
λλ€. λ€μμ 첫 λ²μ§Έ λ°°μΉμ
λλ€.
μ ν μ¬ν: ν¨νΉ νλ
μ¬λ¬λΆμ μλ§λ μ΄μ κ°μ΄ λ³λμ μ΄μ μλ κ° ν½μ λ‘ μμ νκ³ μΆμ§λ μμ κ²μ λλ€. μ΄ λ°μ΄ν°μΈνΈλ₯Ό μ¬μ©νκΈ° μ μ ν½μ μ μ΄λ―Έμ§ ν μλ‘ ν¨νΉν΄μΌ ν©λλ€.
λ€μμ κ° μμ μ μ΄λ―Έμ§λ₯Ό λΉλνκΈ° μν΄ μ΄ μ΄λ¦μ νμ±νλ μ½λμ λλ€.
λ°μ΄ν°μΈνΈμ κ° λ°°μΉμ ν΄λΉ ν¨μλ₯Ό μ μ©ν©λλ€.
κ²°κ³Ό μ΄λ―Έμ§λ₯Ό νλ‘―ν©λλ€.
νμ μμ€ ν¨μ
μ§κΈκΉμ§ μ΄ νν 리μΌμ csv λ°μ΄ν°λ₯Ό μ½κΈ° μν κ°μ₯ λμ μμ€μ μ νΈλ¦¬ν°μ μ€μ μ λμμ΅λλ€. μ¬μ© μ¬λ‘κ° μ΄ κΈ°λ³Έ ν¨ν΄μ λ§μ§ μλ κ²½μ° κ³ κΈ μ¬μ©μμκ² λμμ΄ λ μ μλ λ€λ₯Έ λ κ°μ§ APIκ° μμ΅λλ€.
tf.io.decode_csv
: ν μ€νΈ μ€μ CSV μ΄ ν μ λͺ©λ‘μΌλ‘ νμ±νλ ν¨μμ λλ€.tf.data.experimental.CsvDataset
: νμ μμ€ CSV λ°μ΄ν°μΈνΈ μμ±μμ λλ€.
μ΄ μΉμ
μμλ tf.data.experimental.make_csv_dataset
μμ μ 곡νλ κΈ°λ₯μ λ€μ λ§λ€μ΄ μ΄ νμ μμ€ κΈ°λ₯μ μ¬μ©νλ λ°©λ²μ 보μ¬μ€λλ€.
tf.io.decode_csv
μ΄ ν¨μλ λ¬Έμμ΄ λλ λ¬Έμμ΄ λͺ©λ‘μ μ΄ λͺ©λ‘μΌλ‘ λμ½λ©ν©λλ€.
tf.data.experimental.make_csv_dataset
κ³Ό λ¬λ¦¬ μ΄ ν¨μλ μ΄ λ°μ΄ν° μ νμ μΆμΈ‘νμ§ μμ΅λλ€. κ° μ΄μ λν΄ μ¬λ°λ₯Έ μ νμ κ°μ΄ ν¬ν¨λ record_defaults
λͺ©λ‘μ μ 곡νμ¬ μ΄ μ νμ μ§μ ν©λλ€.
tf.io.decode_csv
λ₯Ό μ¬μ©νμ¬ νμ΄νλ λ°μ΄ν°λ₯Ό λ¬Έμμ΄λ‘ μ½κΈ° μν΄ λ€μκ³Ό κ°μ΄ ν μ μμ΅λλ€.
μ€μ μ νμΌλ‘ νμ±νλ €λ©΄ ν΄λΉ μ νμ record_defaults
λͺ©λ‘μ λ§λλλ€.
μ°Έκ³ : CSV ν
μ€νΈμ κ°λ³ λΌμΈλ³΄λ€ λν λΌμΈ λ°°μΉμμ tf.io.decode_csv
λ₯Ό νΈμΆνλ κ²μ΄ λ ν¨μ¨μ μ
λλ€.
tf.data.experimental.CsvDataset
tf.data.experimental.CsvDataset
ν΄λμ€λ tf.data.experimental.make_csv_dataset
ν¨μμ νΈλ¦¬ν νΉμ±μΈ μ΄ ν€λ νμ±, μ΄ μ ν μΆλ‘ , μλ μ
νλ§, νμΌ μΈν°λ¦¬λΉ μμ΄ μ΅μνμ CSV Dataset
μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.
μ΄ μμ±μλ tf.io.decode_csv
μ κ°μ λ°©μμΌλ‘ record_defaults
λ₯Ό μ¬μ©ν©λλ€.
μμ μ½λλ κΈ°λ³Έμ μΌλ‘ λ€μκ³Ό κ°μ΅λλ€.
μ¬λ¬ νμΌ
tf.data.experimental.CsvDataset
μ μ¬μ©νμ¬ κΈκΌ΄ λ°μ΄ν°μΈνΈλ₯Ό νμ±νλ €λ©΄ λ¨Όμ record_defaults
μ λν μ΄ μ νμ κ²°μ ν΄μΌ ν©λλ€. μ°μ ν νμΌμ 첫 λ²μ§Έ νμ κ²μ¬ν©λλ€.
μ²μ λ κ°μ νλλ§ λ¬Έμμ΄μ΄κ³ λλ¨Έμ§λ μ μ λλ λΆλ μμμ μ΄λ©° μΌνλ₯Ό κ³μ°νμ¬ μ΄ νΉμ± μλ₯Ό μ»μ μ μμ΅λλ€.
tf.data.experimental.CsvDataset
μμ±μλ μ
λ ₯ νμΌ λͺ©λ‘μ κ°μ Έμ¬ μ μμ§λ§ μμ°¨μ μΌλ‘ μ½μ΅λλ€. CSV λͺ©λ‘μ 첫 λ²μ§Έ νμΌμ AGENCY.csv
μ
λλ€.
λ°λΌμ νμΌ λͺ©λ‘μ CsvDataset
μ μ λ¬ν λ AGENCY.csv
μ λ μ½λλ₯Ό λ¨Όμ μ½μ΅λλ€.
μ¬λ¬ νμΌμ μΈν°λ¦¬λΈνλ €λ©΄ Dataset.interleave
λ₯Ό μ¬μ©ν©λλ€.
CSV νμΌ μ΄λ¦μ΄ ν¬ν¨λ μ΄κΈ° λ°μ΄ν°μΈνΈλ λ€μκ³Ό κ°μ΅λλ€.
μ΄λ κ² νλ©΄ κ° epochλ§λ€ νμΌ μ΄λ¦μ μ νν©λλ€.
interleave
λ©μλλ μμ Dataset
μ κ° μμλ§λ€ νμ Dataset
λ₯Ό μμ±νλ map_func
λ₯Ό μ¬μ©ν©λλ€.
μ¬κΈ°μμ νμΌ λ°μ΄ν°μΈνΈμ κ° μμμμ tf.data.experimental.CsvDataset
μ μμ±νλ €κ³ ν©λλ€.
μΈν°λ¦¬λΈλ‘ λ°νν Dataset
λ μ¬λ¬ νμ Dataset
λ₯Ό μννλ©° μμλ₯Ό λ°νν©λλ€. μλμμ λ°μ΄ν°μΈνΈκ° cycle_length=3
μΈ κ°μ§ κΈκΌ΄ νμΌμ μννλ λ°©μμ νμΈνμΈμ.
곡μ°
μ΄μ μ tf.io.decode_csv
κ° λ¬Έμμ΄ λ°°μΉμμ μ€νλ λ λ ν¨μ¨μ μ΄λΌλ μ μ μΈκΈνμ΅λλ€.
λν λ°°μΉ ν¬κΈ°λ₯Ό μ¬μ©ν λ μ΄ μ¬μ€μ νμ©νμ¬ CSV λ‘λ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€(λ¨, λ¨Όμ μΊμ±μ μλν΄μΌ ν¨).
λ΄μ₯ λ‘λ 20μ μ¬μ©ν κ²½μ° 2048κ°μ μμ λ°°μΉμ μ½ 17μ΄κ° 걸립λλ€.
ν
μ€νΈ μ€ λ°°μΉλ₯Ό decode_csv
μ μ λ¬νλ©΄ λ λΉ λ₯΄κ² μ½ 5μ΄ λ§μ μ€νλ©λλ€.
λκ·λͺ¨ λ°°μΉλ₯Ό μ¬μ©νμ¬ CSV μ±λ₯μ λμ΄λ λ λ€λ₯Έ μλ κ³Όλμ ν©κ³Ό κ³Όμμ ν© νν 리μΌμ μ°Έμ‘°νμΈμ.
μ΄λ¬ν μ’
λ₯μ μ κ·Ό λ°©μμ΄ ν¨κ³Όκ° μμ μ μμ§λ§ Dataset.cache
λ° tf.data.Dataset.snapshot
κ³Ό κ°μ λ€λ₯Έ μ΅μ
κ³Ό ν¨κ» λ°μ΄ν°λ₯Ό λ³΄λ€ κ°μνλ νμμΌλ‘ λ€μ μΈμ½λ©νλ λ°©λ²λ κ³ λ €νμΈμ.