Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ko/guide/migrate/metrics_optimizers.ipynb
25118 views
Kernel: Python 3
#@title Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License.

TF1에서 tf.metrics는 모든 메트릭 함수에 대한 API 네임스페이스입니다. 각 메트릭은 labelprediction을 입력 매개변수로 사용하고 해당 메트릭 텐서를 결과로 반환하는 함수입니다. TF2에서 tf.keras.metrics는 모든 메트릭 함수와 객체를 포함합니다. Metric 객체는 tf.keras.Modeltf.keras.layers.layer와 함께 사용하여 메트릭 값을 계산할 수 있습니다.

설치하기

몇 가지 필요한 TensorFlow 가져오기로 시작합니다.

import tensorflow as tf import tensorflow.compat.v1 as tf1

그리고 데모용으로 몇 가지 간단한 데이터를 준비합니다.

features = [[1., 1.5], [2., 2.5], [3., 3.5]] labels = [0, 0, 1] eval_features = [[4., 4.5], [5., 5.5], [6., 6.5]] eval_labels = [0, 1, 1]

TF1: Estimator를 사용하는 tf.compat.v1.metrics

TF1에서 메트릭은 eval_metric_opsEstimatorSpec에 추가될 수 있으며 연산은 tf.metrics에 정의된 모든 메트릭 함수를 통해 생성됩니다. 예제에 따라 tf.metrics.accuracy를 사용하는 방법을 확인할 수 있습니다.

def _input_fn(): return tf1.data.Dataset.from_tensor_slices((features, labels)).batch(1) def _eval_input_fn(): return tf1.data.Dataset.from_tensor_slices( (eval_features, eval_labels)).batch(1) def _model_fn(features, labels, mode): logits = tf1.layers.Dense(2)(features) predictions = tf.math.argmax(input=logits, axis=1) loss = tf1.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits) optimizer = tf1.train.AdagradOptimizer(0.05) train_op = optimizer.minimize(loss, global_step=tf1.train.get_global_step()) accuracy = tf1.metrics.accuracy(labels=labels, predictions=predictions) return tf1.estimator.EstimatorSpec(mode, predictions=predictions, loss=loss, train_op=train_op, eval_metric_ops={'accuracy': accuracy}) estimator = tf1.estimator.Estimator(model_fn=_model_fn) estimator.train(_input_fn)
estimator.evaluate(_eval_input_fn)

또한, tf.estimator.add_metrics()를 통해 메트릭을 Estimator에 직접 추가할 수 있습니다.

def mean_squared_error(labels, predictions): labels = tf.cast(labels, predictions.dtype) return {"mean_squared_error": tf1.metrics.mean_squared_error(labels=labels, predictions=predictions)} estimator = tf1.estimator.add_metrics(estimator, mean_squared_error) estimator.evaluate(_eval_input_fn)

TF2: tf.keras.Model을 사용하는 Keras 메트릭 API

TF2에서 tf.keras.metrics는 모든 메트릭 클래스와 함수를 포함합니다. 이는 OOP 스타일로 설계되어 있으며 다른 tf.keras API와 긴밀하게 통합합니다. 모든 메트릭은 tf.keras.metrics 네임스페이스에서 찾을 수 있으며 일반적으로 tf.compat.v1.metricstf.keras.metrics 사이에서 직접 매핑합니다.

다음 예제에서 메트릭이 model.compile() 메서드에 추가됩니다. 사용자는 레이블 및 예측 텐서를 지정하지 않고 메트릭 인스턴스만 생성하면 됩니다. Keras 모델은 모델 출력과 레이블을 메트릭 객체로 라우팅합니다.

dataset = tf.data.Dataset.from_tensor_slices((features, labels)).batch(1) eval_dataset = tf.data.Dataset.from_tensor_slices( (eval_features, eval_labels)).batch(1) inputs = tf.keras.Input((2,)) logits = tf.keras.layers.Dense(2)(inputs) predictions = tf.math.argmax(input=logits, axis=1) model = tf.keras.models.Model(inputs, predictions) optimizer = tf.keras.optimizers.Adagrad(learning_rate=0.05) model.compile(optimizer, loss='mse', metrics=[tf.keras.metrics.Accuracy()])
model.evaluate(eval_dataset, return_dict=True)

Eager 실행을 사용하도록 설정하면 tf.keras.metrics.Metric 인스턴스를 직접 사용하여 numpy 데이터 또는 Eager 텐서를 평가할 수 있습니다. tf.keras.metrics.Metric 객체는 상태 저장 컨테이너입니다. 메트릭 값은 metric.update_state(y_true, y_pred)를 통해 업데이트할 수 있으며 결과는 metrics.result()로 검색할 수 있습니다.

accuracy = tf.keras.metrics.Accuracy() accuracy.update_state(y_true=[0, 0, 1, 1], y_pred=[0, 0, 0, 1]) accuracy.result().numpy()
accuracy.update_state(y_true=[0, 0, 1, 1], y_pred=[0, 0, 0, 0]) accuracy.update_state(y_true=[0, 0, 1, 1], y_pred=[1, 1, 0, 0]) accuracy.result().numpy()

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로 기본 설정됩니다. 이 차이는 대부분의 사용 사례에서 무시할 수 있습니다.