Path: blob/master/site/ko/guide/migrate/metrics_optimizers.ipynb
38653 views
Copyright 2021 The TensorFlow Authors.
๋ฉํธ๋ฆญ ๋ฐ ์ตํฐ๋ง์ด์ ๋ง์ด๊ทธ๋ ์ด์
TF1์์ tf.metrics๋ ๋ชจ๋ ๋ฉํธ๋ฆญ ํจ์์ ๋ํ API ๋ค์์คํ์ด์ค์
๋๋ค. ๊ฐ ๋ฉํธ๋ฆญ์ label๊ณผ prediction์ ์
๋ ฅ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๊ณ ํด๋น ๋ฉํธ๋ฆญ ํ
์๋ฅผ ๊ฒฐ๊ณผ๋ก ๋ฐํํ๋ ํจ์์
๋๋ค. TF2์์ tf.keras.metrics๋ ๋ชจ๋ ๋ฉํธ๋ฆญ ํจ์์ ๊ฐ์ฒด๋ฅผ ํฌํจํฉ๋๋ค. Metric ๊ฐ์ฒด๋ tf.keras.Model๊ณผ tf.keras.layers.layer์ ํจ๊ป ์ฌ์ฉํ์ฌ ๋ฉํธ๋ฆญ ๊ฐ์ ๊ณ์ฐํ ์ ์์ต๋๋ค.
์ค์นํ๊ธฐ
๋ช ๊ฐ์ง ํ์ํ TensorFlow ๊ฐ์ ธ์ค๊ธฐ๋ก ์์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋ชจ์ฉ์ผ๋ก ๋ช ๊ฐ์ง ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฅผ ์ค๋นํฉ๋๋ค.
TF1: Estimator๋ฅผ ์ฌ์ฉํ๋ tf.compat.v1.metrics
TF1์์ ๋ฉํธ๋ฆญ์ eval_metric_ops๋ก EstimatorSpec์ ์ถ๊ฐ๋ ์ ์์ผ๋ฉฐ ์ฐ์ฐ์ tf.metrics์ ์ ์๋ ๋ชจ๋ ๋ฉํธ๋ฆญ ํจ์๋ฅผ ํตํด ์์ฑ๋ฉ๋๋ค. ์์ ์ ๋ฐ๋ผ tf.metrics.accuracy๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ํ, tf.estimator.add_metrics()๋ฅผ ํตํด ๋ฉํธ๋ฆญ์ Estimator์ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
TF2: tf.keras.Model์ ์ฌ์ฉํ๋ Keras ๋ฉํธ๋ฆญ API
TF2์์ tf.keras.metrics๋ ๋ชจ๋ ๋ฉํธ๋ฆญ ํด๋์ค์ ํจ์๋ฅผ ํฌํจํฉ๋๋ค. ์ด๋ OOP ์คํ์ผ๋ก ์ค๊ณ๋์ด ์์ผ๋ฉฐ ๋ค๋ฅธ tf.keras API์ ๊ธด๋ฐํ๊ฒ ํตํฉํฉ๋๋ค. ๋ชจ๋ ๋ฉํธ๋ฆญ์ tf.keras.metrics ๋ค์์คํ์ด์ค์์ ์ฐพ์ ์ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก tf.compat.v1.metrics์ tf.keras.metrics ์ฌ์ด์์ ์ง์ ๋งคํํฉ๋๋ค.
๋ค์ ์์ ์์ ๋ฉํธ๋ฆญ์ด model.compile() ๋ฉ์๋์ ์ถ๊ฐ๋ฉ๋๋ค. ์ฌ์ฉ์๋ ๋ ์ด๋ธ ๋ฐ ์์ธก ํ
์๋ฅผ ์ง์ ํ์ง ์๊ณ ๋ฉํธ๋ฆญ ์ธ์คํด์ค๋ง ์์ฑํ๋ฉด ๋ฉ๋๋ค. Keras ๋ชจ๋ธ์ ๋ชจ๋ธ ์ถ๋ ฅ๊ณผ ๋ ์ด๋ธ์ ๋ฉํธ๋ฆญ ๊ฐ์ฒด๋ก ๋ผ์ฐํ
ํฉ๋๋ค.
Eager ์คํ์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ฉด tf.keras.metrics.Metric ์ธ์คํด์ค๋ฅผ ์ง์ ์ฌ์ฉํ์ฌ numpy ๋ฐ์ดํฐ ๋๋ Eager ํ
์๋ฅผ ํ๊ฐํ ์ ์์ต๋๋ค. tf.keras.metrics.Metric ๊ฐ์ฒด๋ ์ํ ์ ์ฅ ์ปจํ
์ด๋์
๋๋ค. ๋ฉํธ๋ฆญ ๊ฐ์ metric.update_state(y_true, y_pred)๋ฅผ ํตํด ์
๋ฐ์ดํธํ ์ ์์ผ๋ฉฐ ๊ฒฐ๊ณผ๋ metrics.result()๋ก ๊ฒ์ํ ์ ์์ต๋๋ค.
tf.keras.metrics.Metric์ ๋ํ ์์ธํ ๋ด์ฉ์ tf.keras.metrics.Metric์ API ์ค๋ช
์์ ๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
TF1.x ์ตํฐ๋ง์ด์ ๋ฅผ Keras ์ตํฐ๋ง์ด์ ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ
Adam ์ตํฐ๋ง์ด์ ์ ๊ฒฝ์ฌ ํ๊ฐ ์ตํฐ๋ง์ด์ ์ ๊ฐ์ tf.compat.v1.train์ ์ตํฐ๋ง์ด์ ๋ tf.keras.optimizers์์ ๋์ผํ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
์๋ ํ์๋ ์ด๋ฌํ ๋ ๊ฑฐ์ ์ตํฐ๋ง์ด์ ๋ฅผ Keras์ ๋ง๊ฒ ๋ณํํ๋ ๋ฐฉ๋ฒ์ด ์์ฝ๋์ด ์์ต๋๋ค. ๊ธฐ๋ณธ ํ์ต๋ฅ ์ ๋ฐ์ดํธํ๊ธฐ์ ๊ฐ์ ์ถ๊ฐ ๋จ๊ณ๊ฐ ํ์ํ์ง ์๋ ํ TF1.x ๋ฒ์ ์ TF2 ๋ฒ์ ์ผ๋ก ์ง์ ๊ต์ฒดํ ์ ์์ต๋๋ค.
์ตํฐ๋ง์ด์ ๋ฅผ ๋ณํํ๋ฉด ์ด์ ์ฒดํฌํฌ์ธํธ๊ฐ ํธํ๋์ง ์์ ์ ์์ต๋๋ค.
| TF1.x | TF2 | ์ถ๊ฐ ๋จ๊ณ |
|---|---|---|
| `tf.v1.train.GradientDescentOptimizer` | `tf.keras.optimizers.SGD` | ์์ |
| `tf.v1.train.MomentumOptimizer` | `tf.keras.optimizers.SGD` | `momentum` ์ธ์ ํฌํจ |
| `tf.v1.train.AdamOptimizer` | `tf.keras.optimizers.Adam` | `beta1`๊ณผ `beta2` ์ธ์๋ฅผ `beta_1`๊ณผ `beta_2`๋ก ์ด๋ฆ ๋ณ๊ฒฝ |
| `tf.v1.train.RMSPropOptimizer` | `tf.keras.optimizers.RMSprop` | `decay` ์ธ์๋ฅผ `rho`๋ก ์ด๋ฆ ๋ณ๊ฒฝ |
| `tf.v1.train.AdadeltaOptimizer` | `tf.keras.optimizers.Adadelta` | ์์ |
| `tf.v1.train.AdagradOptimizer` | `tf.keras.optimizers.Adagrad` | ์์ |
| `tf.v1.train.FtrlOptimizer` | `tf.keras.optimizers.Ftrl` | `accum_name`์ `linear_name` ์ธ์ ์ ๊ฑฐ |
| `tf.contrib.AdamaxOptimizer` | `tf.keras.optimizers.Adamax` | `beta1`๊ณผ `beta2` ์ธ์๋ฅผ `beta_1`๊ณผ `beta_2`๋ก ์ด๋ฆ ๋ณ๊ฒฝ |
| `tf.contrib.Nadam` | `tf.keras.optimizers.Nadam` | `beta1`๊ณผ `beta2` ์ธ์๋ฅผ `beta_1`๊ณผ `beta_2`๋ก ์ด๋ฆ ๋ณ๊ฒฝ |
์ฐธ๊ณ : TF2์์ ๋ชจ๋ ์ก์ค๋ก (์์น ์์ ์์)์ ์ด์ 1e-8 ๋์ 1e-7๋ก ๊ธฐ๋ณธ ์ค์ ๋ฉ๋๋ค. ์ด ์ฐจ์ด๋ ๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์์ ๋ฌด์ํ ์ ์์ต๋๋ค.
TensorFlow.org์์ ๋ณด๊ธฐ
Google Colab์์ ์คํํ๊ธฐ
GitHub์์์์ค ๋ณด๊ธฐ
๋
ธํธ๋ถ ๋ค์ด๋ก๋ํ๊ธฐ