diff --git a/sources/callbacks.md b/sources/callbacks.md
index 5b3f416f..ea3854b4 100644
--- a/sources/callbacks.md
+++ b/sources/callbacks.md
@@ -1,277 +1,147 @@
-## Usage of callbacks
+## 콜백callbacks의 사용법
-콜백은 학습 과정의 특정 단계에서 적용할 함수의 세트입니다. 학습 과정 중 콜백을 사용해서 모델의 내적 상태와 통계자료를 확인 할 수 있습니다. 콜백의 리스트는 (키워드 인수 `callbacks`로) `Sequential`이나 `Model` 클래스의 `.fit()` 메서드에 전달이 가능합니다. 그에 따라 학습의 각 단계에서 콜백의 적절한 메서드가 호출됩니다.
+콜백은 학습 과정의 에폭Epoch 또는 배치Batch와 같은 각 단계가 끝날 때마다 작동시킬 함수의 세트입니다. 콜백을 사용하면 학습이 진행되는 동안 모델의 내부 상태 및 통계적 지표의 변화를 관찰할 수 있습니다. 사용방법은 `.fit()` 메소드의 `callbacks` 인자argument에 콜백으로 이루어진 리스트를 전달하는 것입니다. Sequential 모델과 Model 클래스 모두에서 작동하며, 관련된 메소드들이 훈련의 각 단계마다 호출됩니다.
----
-[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L537)
-### ProgbarLogger
+---
+[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L275)
+### Callback
+새로운 콜백 생성에 필요한 기본 클래스입니다.
-```python
-keras.callbacks.ProgbarLogger(count_mode='samples', stateful_metrics=None)
-```
+__특성properties__
-측정항목을 stdout에 프린트하는 콜백
+- __params__: 딕셔너리. 훈련 파라미터들 (예: 출력 여부verbosity, 배치 크기batch size, 에폭 수number of epochs 등).
+- __model__: `keras.models.Model` 인스턴스. 훈련할 모델의 레퍼런스.
-__인수__
+콜백 메소드는 `logs`라는 이름의 딕셔너리를 인자로 받습니다. 이 딕셔너리는 매 에폭 또는 배치와 관련된 각종 수치들을 저장하는 값values과 이를 호출하는 키keys들로 이루어지게 됩니다.
-- __count_mode__: "steps" 혹은 "samples" 중 하나.
- 진행 표시줄이 검사한 샘플의 수에 기반하는지
- 검사한 단계(배치)의 수에 기반하는지 여부.
-- __stateful_metrics__: 세대에 걸쳐 평균을 내면 *안 되는*
- 측정 항목의 문자열 이름의 Iterable.
- 이 리스트의 측정 항목을 원본 그대로 로그합니다.
- 그 외 측정 항목은 평균을 구해 로그합니다 (예. 손실 등).
+(현재 버전까지) Sequential 모델 클래스의 `.fit()`메소드의 경우 아래와 같은 수치를 콜백에 전달, `logs`에 기록합니다.
+- on_epoch_end: 기본적으로 `logs`에 `acc`와 `loss`를 기록하며, 교차검증validation이 적용된 경우 `val_loss`, 교차검증 및 정확도 추적이 적용된 경우 `val_acc`까지 저장됩니다.
+- on_batch_begin: 현재 배치의 크기를 나타내는 `size`값이 `logs`에 저장됩니다.
+- on_batch_end: `logs`에 `loss`를 기록하며 정확도 추적이 적용된 경우 `acc`도 함께 저장합니다.
-__오류 알림__
-- __ValueError__: 유효하지 않은 `count_mode`의 경우 오류를 알립니다.
-
----
-
-[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L633)
-### ModelCheckpoint
+[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L477)
+### BaseLogger
```python
-keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)
+keras.callbacks.BaseLogger(stateful_metrics=None)
```
-각 세대 후 모델을 저장합니다.
-
-`filepath`는 (`on_epoch_end`에서 전달되는)
-`epoch`의 값과 `logs`의 키로 채워진
-이름 형식 옵션을 가질 수 있습니다.
-
-예를 들어 `filepath`가 `weights.{epoch:02d}-{val_loss:.2f}.hdf5`라면,
-파일 이름에 세대 번호와 검증 손실을 넣어
-모델의 체크포인트가 저장됩니다.
-
-__인수__
-
-- __filepath__: 문자열, 모델 파일을 저장할 경로.
-- __monitor__: 관찰할 수량.
-- __verbose__: 다변 모드, 0 혹은 1.
-- __save_best_only__: `save_best_only=True`인 경우
- 관찰하는 수량을 기준으로 가장
- 최신의 최고 모델은 덧씌우지 않습니다.
-- __save_weights_only__: 참인 경우 모델의 가중치만 저장되고
- (`model.save_weights(filepath)`), 아닌 경우
- 전체 모델이 저장됩니다 (`model.save(filepath)`).
-- __mode__: {auto, min, max} 중 하나.
- `save_best_only=True`이면
- 현재 저장 파일을 덧씌울지는
- 관찰하는 수량의 최대화 혹은 최소화를
- 기준으로 결정합니다. `val_acc`의 경우
- 이는 `max`가 되어야 하며, `val_loss`라면
- `min`이 되어야 합니다. `auto`의 경우
- 관찰하는 수량의 이름에서 방향성이 자동적으로 유추됩니다.
-- __period__: 체크포인트간 간격 (세대의 수).
+각 에폭별로 평가 지표들의 평균을 기록하는 콜백으로 모든 케라스 모델에 자동적으로 적용됩니다.
-----
+__인자__
-[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L851)
-### RemoteMonitor
+- __stateful_metrics__: 에폭마다 기록할 때 평균이 아니라 원래의 값을 그대로 유지해야 하는 평가 지표들을 지정하는 인자입니다. 리스트나 튜플, 문자열과 같은 파이썬의 iterable 타입을 입력받습니다. 이 목록에 포함된 지표들은 각 `on_epoch_end` 단계에서 원래의 값 그대로 기록되며, 그밖의 값들은 평균값으로 기록됩니다.
-```python
-keras.callbacks.RemoteMonitor(root='http://localhost:9000', path='/publish/epoch/end/', field='data', headers=None, send_as_json=False)
-```
-이벤트를 서버에 스트림할 콜백
-
-`requests` 라이브러리를 필요로 합니다.
-디폴트 설정으로 이벤트는 `root + '/publish/epoch/end/'`으로 보내집니다.
-호출은 HTTP POST와 JSON-인코딩 이벤트 데이터 딕셔너리인
-`data` 인수로 합니다.
-send_as_json이 참으로 설정된 경우, 요청의 내용 종류는
-application/json입니다. 그 외는 형식 내 직렬화된 JSON이 보내집니다.
-
-__인수__
-
-- __root__: 문자열; 표적 서버의 최상위 url.
-- __path__: 문자열; 이벤트가 보내질 `root`를 기준으로 한 상대적 경로
-- __field__: 문자열; 데이터가 저장될 JSON 필드.
- 형식 내 payload가 보내지는 경우에만 필드가 사용됩니다
- (다시 말해 send_as_json이 거짓으로 설정된 경우).
-- __headers__: 딕셔너리; 선택적 커스텀 HTTP 헤더
-- __send_as_json__: 불리언; 요청을 application/json으로
- 보내는지 여부.
-
----
-
-[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L946)
-### ReduceLROnPlateau
+[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L524)
+### TerminateOnNaN
```python
-keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', min_delta=0.0001, cooldown=0, min_lr=0)
+keras.callbacks.TerminateOnNaN()
```
+손실loss 값으로 NaN이 발생했을 때 학습을 종료시키는 콜백입니다.
-측정 항목이 향상되지 않는 경우 학습 속도를 줄입니다.
-
-모델은 종종 학습이 부진할 때 학습 속도를 2-10의 인수로 줄여
-효과를 보기도 합니다. 이 콜백은 수량을 관찰하여
-'patience' 수의 세대 동안 향상되는 기미가 없으면
-'patience' 수의 세대 동안 향상되는 기미가 없으면
-
-__예시__
-
-```python
-reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2,
- patience=5, min_lr=0.001)
-model.fit(X_train, Y_train, callbacks=[reduce_lr])
-```
-
-__인수__
-
-- __monitor__: 관찰할 수량.
-- __factor__: 학습 속도를 줄일 인수.
- new_lr = lr * factor
-- __patience__: number of epochs that produced the monitored
- quantity with no improvement after which training will
- be stopped.
- Validation quantities may not be produced for every
- epoch, if the validation frequency
- (`model.fit(validation_freq=5)`) is greater than one.
-- __verbose__: 정수. 0: 자동, 1: 최신화 메시지.
-- __mode__: {auto, min, max} 중 하나. `min` 모드에서는
- 관찰하는 수량이 더 이상 감소하지
- 않으면 학습이 멈춥니다. `max` 모드에서는
- 관찰하는 수량이 더 이상 증가하지
- 않으면 학습이 멈춥니다; `auto` 모드에서는
- 관찰하는 수량의 이름에서
- 방향성이 자동적으로 유추됩니다.
-- __min_delta__: 유의미한 변화에만 집중해 새로운
- 최적값을 계산할 한계점.
-- __cooldown__: 학습 속도가 감소 된 후 몇 세대를 기다려야 평소
- 가동이 재개되는지를 결정하는 세대의 수.
-- __min_lr__: 학습 속도에 대한 하한선.
-
---
-
-[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L275)
-### Callback
+[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L537)
+### ProgbarLogger
```python
-keras.callbacks.Callback()
+keras.callbacks.ProgbarLogger(count_mode='samples', stateful_metrics=None)
```
-새로운 콜백을 만드는데 사용되는 추상 베이스 클래스.
-
-__특성__
+평가 지표를 stdout(일반적으로 콘솔창)에 출력하는 콜백입니다.
-- __params__: 딕셔너리. 학습 매개변수
- (예. 다변 모드, 배치 크기, 세대 수…).
-- __model__: `keras.models.Model`의 인스턴스.
- 학습 중인 모델의 참조.
+__인자__
-콜백 메서드가 인수로 받는
-`logs` 딕셔너리는 현재 배치 혹은 세대에 적절한
-수치에 대한 키를 담습니다.
+- __count_mode__: `'steps'` 혹은 `'samples'` 중 하나를 입력합니다. 진행 표시줄이 검사한 샘플의 수에 기반하는지 검사한 단계(배치)의 수에 기반하는지 여부를 결정합니다.
+- __stateful_metrics__: 에폭마다 기록할 때 평균이 아니라 원래의 값을 그대로 유지해야 하는 평가 지표들을 지정하는 인자입니다. 리스트나 튜플, 문자열과 같은 파이썬의 iterable 타입을 입력받습니다. 이 목록에 포함된 지표들은 각 `on_epoch_end` 단계에서 원래의 값 그대로 기록되며, 그밖의 값들은 평균값으로 기록됩니다.
-현재 `Sequential` 모델 클래스의 `.fit()` 메서드는
-콜백에 전달하는 `logs`에 다음의
-수치를 포함합니다:
+__오류__
-on_epoch_end: 로그에 `acc`와 `loss`가 포함되고
-`val_loss`와 (`fit`에서 검증이 사용으로 설정된 경우)
-`val_acc`는(검증과 정확성 모니터링이 사용으로 설정된 경우)
-선택적으로 포함됩니다.
-on_batch_begin: 로그에는 `size`와
-현재 배치의 샘플의 수가 포함됩니다.
-on_batch_end: 로그에는 `loss`가 포함되고, 선택적으로 `acc`가 포함됩니다
-(정확성 모니터링이 사용으로 설정된 경우).
+- __ValueError__: 유효하지 않은 `count_mode`의 경우 오류를 알립니다.
+
----
-
-[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L477)
-### BaseLogger
+[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L614)
+### History
```python
-keras.callbacks.BaseLogger(stateful_metrics=None)
+keras.callbacks.History()
```
-측정항목의 세대 평균을 축적하는 콜백..
-
-이 콜백은 모든 케라스 모델에 자동적으로 적용됩니다.
-
-__인수__
+`History` 객체에 이벤트를 기록하는 콜백.
-- __stateful_metrics__: 세대에 걸쳐 평균을 내면 *안 되는*
- 측정 항목의 문자열 이름의 Iterable.
- `on_epoch_end`에서는 이 리스트의 측정 항목을 원본 그대로 로그합니다.
- 그 외 측정 항목은 `on_epoch_end`에서 평균을 구해 로그합니다.
+이 콜백은 모든 케라스 모델에 자동적으로 적용됩니다. `History` 객체는 모델의 `fit` 메소드를 통해 반환됩니다.
+
----
-
-[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L524)
-### TerminateOnNaN
+[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L633)
+### ModelCheckpoint
```python
-keras.callbacks.TerminateOnNaN()
+keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)
```
-NaN 손실이 발생했을 때 학습을 종료시키는 콜백.
+각 에폭이 끝날 때 모델을 저장합니다.
-----
+__인자__
-[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L614)
-### History
+- __filepath__: `str`. 모델 파일을 저장할 경로를 지정합니다. `logs`에 포함된 키와 `on_epoch_end`에서 해당 키에 부여하는 값을 이용해 파일 이름의 형식을 지정할 수 있습니다. 예를 들어, `filepath`가 `weights.{epoch:02d}-{val_loss:.2f}.hdf5`라면 모델 체크포인트는 에폭 횟수와 검증 손실이 들어간 파일 이름으로 저장됩니다.
+- __monitor__: 조건을 지정해서 저장 여부를 정할 때 해당 조건으로 사용할 지표를 지정합니다. 기본값은 `'val_loss'`입니다.
+- __verbose__: 진행 메시지를 출력할지의 여부를 결정합니다. 0 혹은 1의 값을 갖습니다.
+- __save_best_only__: `save_best_only=True`인 경우 `monitor`로 지정된 지표를 기준으로 현재까지 가운데 가장 성능이 뛰어난 결과
+- __save_weights_only__: 참인 경우 모델의 가중치만 저장되고(`model.save_weights(filepath)`), 아닌 경우 전체 모델이 저장됩니다(`model.save(filepath)`).
+- __mode__: `'auto', 'min', 'max'`. `save_best_only=True`를 사용할 때 `monitor`로 지정한 지표가 현재까지 최대일 때 저장할지 최소일 때 저장할지를 결정합니다. 예를 들어 `val_acc`의 경우 `mode`는 `'max'`가 되어야 하며, `val_loss`라면 `'min'`이 되어야 합니다. `auto`의 경우 지표의 이름에서 방향성을 자동으로 유추합니다.
+- __period__: 체크포인트 사이의 간격을 에폭 수를 기준으로 지정합니다.
+
+
+----
+[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L733)
+### EarlyStopping
```python
-keras.callbacks.History()
+keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto', baseline=None, restore_best_weights=False)
```
-`History` 객체에 이벤트를 기록하는 콜백.
+지표가 나아지지 않는 경우 학습을 멈추도록 합니다.
-이 콜백은 모든 케라스 모델에
-자동적으로 적용됩니다. `History` 객체는
-모델의 `fit` 메서드를 통해 반환됩니다.
+__인자__
+- __monitor__: 조건으로 사용할 지표를 지정합니다. 기본값은 `'val_loss'`입니다.
+- __min_delta__: 관찰하는 수량이 향상되었다고 판단할 최소한의 변화. 다시 말해 변화량이 min_delta 보다 작을 경우 향상된 것으로 간주하지 않습니다.
+- __patience__: 지표가 나아지지 않는 상태에서 추가적으로 학습할 최대 횟수를 지정합니다. 지정한 횟수에 도달할 때까지 지표의 개선이 없으면 학습을 멈춥니다. 검증 지표를 조건으로 사용할 때 검증 빈도가 1보다 큰 경우 (예: `model.fit(validation_freq=5)`) 매 에폭마다 검증 지표가 생성되지 않는다는 점에 유의하기 바랍니다.
+- __verbose__: 진행 메시지를 출력할지의 여부를 결정합니다. 0 혹은 1의 값을 갖습니다.
+- __mode__: `'auto', 'min', 'max'`. `save_best_only=True`를 사용할 때 `monitor`로 지정한 지표가 현재까지 최대일 때 저장할지 최소일 때 저장할지를 결정합니다. 예를 들어 `val_acc`의 경우 `mode`는 `'max'`가 되어야 하며, `val_loss`라면 `'min'`이 되어야 합니다. `auto`의 경우 지표의 이름에서 방향성을 자동으로 유추합니다.
+- __baseline__: 관찰하는 수량이 도달해야 하는 최저 기준 값. 모델이 지정한 값 이상의 향상을 이루지 못하는 경우 학습을 멈춥니다.
+- __restore_best_weights__: 학습을 끝낼 때 가장 좋은 결과를 기록한 에폭의 가중치를 복원할지 여부를 정합니다. 기본값은 `'False'`이며, 이 경우 가장 마지막 학습 단계의 가중치를 반환합니다.
-----
-[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L733)
-### EarlyStopping
+----
+[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L851)
+### RemoteMonitor
```python
-keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto', baseline=None, restore_best_weights=False)
+keras.callbacks.RemoteMonitor(root='http://localhost:9000', path='/publish/epoch/end/', field='data', headers=None, send_as_json=False)
```
+이벤트를 서버에 실시간으로 전송하기 위한 콜백입니다.
-관찰하는 수량이 개선되지 않으면 학습을 멈춥니다.
-
-__인수__
-
-- __monitor__: 관찰할 수량.
-- __min_delta__: 관찰하는 수량이 향상되었다고 판단할
- 최소한의 변화, 다시 말해 min_delta
- 미만의 절대적 변화는 향상되었다고
- 판단하지 않습니다.
-- __patience__: number of epochs that produced the monitored
- after which training will be stopped.
- quantity with no improvement after which training will
- be stopped.
- Validation quantities may not be produced for every
- epoch, if the validation frequency
- (`model.fit(validation_freq=5)`) is greater than one.
-- __verbose__: 다변 모드.
-- __mode__: {auto, min, max} 중 하나. `min` 모드에서는
- 관찰하는 수량이 더 이상 감소하지
- 않으면 학습이 멈춥니다. `max` 모드에서는
- 관찰하는 수량이 더 이상 증가하지
- 않으면 학습이 멈춥니다; `auto` 모드에서는
- 관찰하는 수량의 이름에서
- 방향성이 자동적으로 유추됩니다.
-- __baseline__: 관찰하는 수량이 도달해야 하는 베이스라인 값.
- 모델이 베이스라인을 초과하는 향상을 보이지 않으면
- 학습이 멈춥니다.
-- __restore_best_weights__: 관찰하는 수량의 최선 값이 발생한 세대에서
- 모델 가중치를 복원할지 여부.
- 거짓인 경우, 학습의 마지막 단계에서 얻어진
- 모델 가중치가 사용됩니다.
-
+`requests` 라이브러리를 필요로 합니다. 이벤트를 보낼 주소의 기본 설정은 `root + '/publish/epoch/end/'`입니다. 호출은 HTTP POST로, JSON 형식으로 인코딩 된 이벤트 데이터 딕셔너리인 `data`인자를 동반합니다. send_as_json이 True로 설정된 경우, request의 내용은 application/json 형식을 따르게 됩니다. 아닐 경우 사용자가 지정한 형태에 따라 직렬화된serialized JSON 형식으로 보냅니다.
-----
+__인자__
+- __root__: `str`. 표적 서버의 최상위 url.
+- __path__: `str`. 이벤트를 보낼 `root`를 기준으로 한 상대적 경로
+- __field__: `str`. 데이터를 저장할 JSON 필드입니다. 전송 데이터를 기본 지정 외의 다른 형식으로 보내고자 하는 경우에만 사용됩니다. (예: send_as_json이 False인 경우)
+- __headers__: 딕셔너리. HTTP 헤더를 사용자가 직접 지정하고자 할 때 사용합니다.
+- __send_as_json__: `bool`. 요청을 기본 application/json 형식으로 보낼지 여부를 결정합니다.
+
+
+----
[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L910)
### LearningRateScheduler
@@ -279,86 +149,47 @@ __인수__
keras.callbacks.LearningRateScheduler(schedule, verbose=0)
```
-학습 속도 스케쥴러.
+학습률Learning Rate 스케쥴러.
-__인수__
+__인자__
-- __schedule__: 세대 색인(정수, 0에서 색인 시작)과 현재
- 학습 속도를 인풋으로 받고, 새로운 학습 속도를
- 아웃풋(부정소수점)으로 반환하는 함수.
-- __verbose__: 정수. 0: 자동, 1: 최신화 메시지.
-
-----
+- __schedule__: (0으로부터 시작하는 정수) 에폭 인덱스와 현재 학습률을 입력받아서 float 형식의 새로운 학습률을 반환합니다.
+- __verbose__: `int`. 진행 메시지를 출력할지의 여부를 결정합니다. 0 혹은 1의 값을 가지며 1을 선택하면 메시지가 업데이트 됩니다.
-[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/tensorboard_v1.py#L20)
-### TensorBoard
+
+----
+[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L946)
+### ReduceLROnPlateau
```python
-keras.callbacks.tensorboard_v1.TensorBoard(log_dir='./logs', histogram_freq=0, batch_size=32, write_graph=True, write_grads=False, write_images=False, embeddings_freq=0, embeddings_layer_names=None, embeddings_metadata=None, embeddings_data=None, update_freq='epoch')
+keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', min_delta=0.0001, cooldown=0, min_lr=0)
```
-TensorBoard 기초 시각화.
+평가 지표가 개선되지 않는 경우 학습률을 줄입니다.
-[TensorBoard](https://www.tensorflow.org/guide/summaries_and_tensorboard)는
-텐서플로우가 제공하는 시각화 도구입니다.
+학습이 부진할 때 학습률을 1/2에서 1/10 사이의 비율로 줄이면서 진척이 이루어지는 경우가 종종 있습니다. 이 콜백은 지정한 지표가 `patience`인자로 지정한 에폭을 지날 때까지 개선되지 않는 경우 학습률을 감소시킵니다.
-이 콜백은 TensorBoard에 로그를 기록하여
-학습과 테스트 측정 항목에 대한 동적 그래프나
-모델 내 다양한 레이어에 대한 활성화 히스토그램을
-시각화 할 수 있도록 합니다.
+__예시__
-pip으로 텐서플로우를 설치했다면, 다음과 같이
-명령 줄에서 TensorBoard를 시작할 수 있습니다:
-```sh
-tensorboard --logdir=/full_path_to_your_logs
+```python
+reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2,
+ patience=5, min_lr=0.001)
+model.fit(X_train, Y_train, callbacks=[reduce_lr])
```
-텐서플로우 외의 백엔드를 사용하는 경우에도
-(텐서플로우가 설치만 되어있다면), TensorBoard가 동작하기는 하지만,
-손실과 측정 항목 플롯을 보여주는 기능만 사용이 가능합니다.
-
-__인수__
-
-- __log_dir__: TensorBoard가 구문 분석할 로그 파일을
- 저장할 위치 경로.
-- __histogram_freq__: 모델의 레이어에 대해 활성화와 가중치 히스토그램을 계산할
- (세대 내) 빈도. 0으로 설정되어 있으면 히스토그램을 계산하지
- 않습니다. 히스토그램 시각화를 하려면 검증 데이터(혹은 데이터 조각)이
- 특정되어야 합니다.
-- __batch_size__: 히스토그램 계산 목적으로 네트워크에 전달할
- 인풋 배치의 크기.
-- __write_graph__: TensorBoard에서 그래프를 시각화할지 여부.
- write_graph이 참으로 설정되어 있으면
- 로그 파일이 상당히 커질 수 있습니다.
-- __write_grads__: TensorBoard에서 경사 히스토그램를 시각화할지 여부.
- `histogram_freq`이 0보다 커야 합니다.
-- __write_images__: TensorBoard에서 이미지로 시각화할 모델 가중치를
- 작성할지 여부.
-- __embeddings_freq__: 선택된 임베딩 레이어가 저장되는 (세대 내) 빈도.
- 0으로 설정되어 있으면, 임베딩이 계산되지 않습니다.
- TensorBoard의 Embedding 탭에서 시각화할 데이터는
- `embeddings_data`로 전달되어야 합니다.
-- __embeddings_layer_names__: 관찰할 레이어 이름의 리스트.
- None이나 빈 리스트의 경우 모든 임베딩 레이어가 관찰됩니다.
-- __embeddings_metadata__: 레이어 이름을 해당 임베딩 레이어의 메타데이터가 저장되는
- 파일 이름에 매핑하는 딕셔너리. 메타데이터 파일 형식에 대해서는
- [세부사항](https://www.tensorflow.org/guide/embedding#metadata)을
- 참고하십시오. 모든 임베딩 레이어에 대해서 동일한 메타데이터
- 파일이 사용되는 경우는 문자열을 전달할 수 있습니다.
-- __embeddings_data__: `embeddings_layer_names`에 특정되어 레이어에
- 임베딩할 데이터. Numpy 배열 (모델이 하나의 인풋을 갖는 경우) 혹은
- Numpy 배열의 리스트 (모델이 여러 인풋을 갖는 경우).
- 임베딩에 대해서 [더 알아보려면](
- https://www.tensorflow.org/guide/embedding).
-- __update_freq__: `'batch'`, `'epoch'`, 혹은 정수. `'batch'`를 사용하는 경우
- 각 배치 이후 손실과 특정항목을 TensorBoard에 기록합니다.
- `'epoch'`의 경우에도 마찬가지입니다. 정수를 사용하는 경우,
- 예를 들어 `10000`이라면, 10000 샘플마다 콜백이 측정 항목과 손실을
- TensorBoard에 작성합니다. TensorBoard에 너무 자주 기록하면
- 학습이 느려질 수도 있다는 점을 참고하십시오.
+__인자__
+
+- __monitor__: 조건으로 사용할 지표를 지정합니다. 기본값은 `'val_loss'`입니다.
+- __factor__: 학습률을 감소시킬 비율을 지정합니다. new_lr = lr * factor 입니다.
+- __patience__: 지표가 나아지지 않는 상태에서 추가적으로 학습할 최대 횟수를 지정합니다. 지정한 횟수에 도달할 때까지 지표의 개선이 없으면 학습을 멈춥니다. 검증 지표를 조건으로 사용할 때 검증 빈도가 1보다 큰 경우 (예: `model.fit(validation_freq=5)`) 매 에폭마다 검증 지표가 생성되지 않는다는 점에 유의하기 바랍니다.
+- __verbose__: `int`. 진행 메시지를 출력할지의 여부를 결정합니다. 0 혹은 1의 값을 가지며 1을 선택하면 메시지가 업데이트 됩니다.
+- __mode__: `'auto', 'min', 'max'`. `save_best_only=True`를 사용할 때 `monitor`로 지정한 지표가 현재까지 최대일 때 저장할지 최소일 때 저장할지를 결정합니다. 예를 들어 `val_acc`의 경우 `mode`는 `'max'`가 되어야 하며, `val_loss`라면 `'min'`이 되어야 합니다. `auto`의 경우 지표의 이름에서 방향성을 자동으로 유추합니다.
+- __min_delta__: 관찰하는 수량이 향상되었다고 판단할 최소한의 변화. 다시 말해 변화량이 min_delta 보다 작을 경우 향상된 것으로 간주하지 않습니다.
+- __cooldown__: 학습률을 줄인 이후 원래의 학습률로 복귀하기 전까지 진행시킬 에폭 횟수를 정합니다.
+- __min_lr__: 학습률의 하한선을 정합니다.
-----
+----
[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L1071)
### CSVLogger
@@ -366,28 +197,23 @@ __인수__
keras.callbacks.CSVLogger(filename, separator=',', append=False)
```
-세대 결과를 csv 파일에 스트림하는 콜백.
-
-np.ndarray와 같은 1D interable을 포함,
-문자열로 표현 가능한 모든 값을 지원합니다.
+에폭의 결과를 csv 파일에 실시간 전송하는 콜백입니다. np.ndarray를 비롯하여 문자열로 표현할 수 있는 모든 1D iterable 형식을 지원합니다.
__예시__
-
```python
csv_logger = CSVLogger('training.log')
model.fit(X_train, Y_train, callbacks=[csv_logger])
```
-__인수__
+__인자__
-- __filename__: csv 파일의 파일 이름, 예. 'run/log.csv'.
-- __separator__: csv 파일의 성분을 분리하는데 사용할 문자열.
-- __append__: 참: 파일이 존재하는 경우 뒤에 덧붙입니다 (학습을 이어나갈 때
- 유용합니다). 거짓: 기존의 파일을 덧씌웁니다.
+- __filename__: csv 파일의 파일 이름. 예: 'run/log.csv'.
+- __separator__: csv 파일의 구성요소를 분리하는데 사용할 문자열. 기본값은 ','입니다.
+- __append__: `'True'`: 같은 이름의 파일이 존재하는 경우 기존 내용의 뒤에 덧붙입니다 (학습을 이어나갈 때 유용합니다). `'False'`: 기존의 파일을 덮어씁니다.
+
----
-
[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/callbacks.py#L1159)
### LambdaCallback
@@ -395,23 +221,18 @@ __인수__
keras.callbacks.LambdaCallback(on_epoch_begin=None, on_epoch_end=None, on_batch_begin=None, on_batch_end=None, on_train_begin=None, on_train_end=None)
```
-간단한 커스텀 콜백을 즉석에서 만드는 콜백.
+즉석에서 간단한 사용자 정의 콜백을 만듭니다.
-이 콜백은 적절한 시점에 호출될 익명 함수로 생성됩니다.
-콜백이 다음과 같이 위치적 인수를 전달 받는다는 것을
-참고하십시오:
+이 콜백은 지정한 시점에 사용자가 지정한 임의의 함수를 호출합니다. 각 시점은 다음과 같은 위치적 인자를 필요로 합니다.
-- `on_epoch_begin`과 `on_epoch_end`는 다음 두 가지 위치적 인수를 전달 받습니다:
-`epoch`, `logs`
-- `on_batch_begin`과 `on_batch_end`는 다음 두 가지 위치적 인수를 전달 받습니다:
-`batch`, `logs`
-- `on_train_begin`과 `on_train_end`는 다음 위치적 인수를 전달 받습니다:
-`logs`
+- `on_epoch_begin`과 `on_epoch_end`: `epoch`, `logs`의 두 위치적 인자를 전달받습니다.
+- `on_batch_begin`과 `on_batch_end`: `batch`, `logs`의 두 위치적 인자를 전달받습니다.
+- `on_train_begin`과 `on_train_end`: `logs` 인자를 전달받습니다.
-__인수__
+__인자__
-- __on_epoch_begin__: 각 세대의 시작에 호출됩니다.
-- __on_epoch_end__: 각 세대의 끝에 호출됩니다.
+- __on_epoch_begin__: 각 에폭의 시작에 호출됩니다.
+- __on_epoch_end__: 각 에폭의 끝에 호출됩니다.
- __on_batch_begin__: 각 배치의 시작에 호출됩니다.
- __on_batch_end__: 각 배치의 끝에 호출됩니다.
- __on_train_begin__: 모델 학습의 시작에 호출됩니다.
@@ -421,12 +242,12 @@ __예시__
```python
-# 각 배치가 시작할 때 배치 번호를 프린트합니다
+# 각 배치가 시작할 때 배치 번호를 출력합니다.
batch_print_callback = LambdaCallback(
on_batch_begin=lambda batch,logs: print(batch))
-# 세대 손실을 JSON 형식으로 파일에 스트림합니다
-# 파일 내용은 명확히 구성된 JSON이 아니며 줄 별로 JSON 객체를 가집니다
+# 에폭별 손실을 JSON 형식으로 파일에 스트림합니다.
+# 파일 전체가 완전한 JSON 형식은 아니고, 각 줄 별로 JSON 객체를 가지게 됩니다.
import json
json_log = open('loss_log.json', mode='wt', buffering=1)
json_logging_callback = LambdaCallback(
@@ -446,14 +267,51 @@ model.fit(...,
json_logging_callback,
cleanup_callback])
```
+
+
+----
+[[source]](https://github.com/keras-team/keras/blob/master/keras/callbacks/tensorboard_v1.py#L20)
+### TensorBoard
+
+```python
+keras.callbacks.tensorboard_v1.TensorBoard(log_dir='./logs', histogram_freq=0, batch_size=32, write_graph=True, write_grads=False, write_images=False, embeddings_freq=0, embeddings_layer_names=None, embeddings_metadata=None, embeddings_data=None, update_freq='epoch')
+```
+
+TensorBoard 기초 시각화 콜백입니다.
+
+[TensorBoard](https://www.tensorflow.org/guide/summaries_and_tensorboard)는 텐서플로우가 제공하는 시각화 도구입니다.
+
+이 콜백은 TensorBoard에 로그를 기록하여 학습 및 시험 단계의 지표 변화를 그래프로 그리고, 모델 내 다양한 레이어에 대한 활성화 히스토그램을 시각화 할 수 있도록 합니다.
+
+pip으로 텐서플로우를 설치했다면, 다음과 같은 명령줄 입력으로 TensorBoard를 시작할 수 있습니다.
+
+```sh
+tensorboard --logdir=/full_path_to_your_logs
+```
+
+텐서플로우가 설치만 되어있다면 텐서플로우 외의 백엔드를 사용하는 경우에도 TensorBoard가 동작합니다. 이 경우 손실과 평가 지표 플롯을 보여주는 기능만 사용 가능합니다.
+
+__인자__
+
+- __log_dir__: TensorBoard가 분석할 로그 파일을 저장할 위치 경로.
+- __histogram_freq__: 활성화 값과 가중치의 히스토그램을 그릴 에폭 단위 빈도를 지정합니다. 0으로 설정할 경우 히스토그램을 만들지 않습니다. 히스토그램을 시각화하려면 검증 데이터 또는 검증용으로 사용할 데이터의 분할을 명시해야 합니다.
+- __batch_size__: 히스토그램 계산을 위해 네트워크에 전달할 입력 배치의 크기입니다.
+- __write_graph__: TensorBoard에서 그래프를 시각화할지 여부를 정합니다. write_graph가 True로 설정되어 있으면 로그 파일이 상당히 커질 수 있습니다.
+- __write_grads__: TensorBoard에서 경사 히스토그램를 시각화할지 여부를 정합니다. `histogram_freq`이 0보다 커야 합니다.
+- __write_images__: TensorBoard에서 이미지로 시각화할 모델 가중치를 작성할지 여부를 정합니다.
+- __embeddings_freq__: 선택한 임베딩 층Layer을 저장할 에폭 단위 빈도를 지정합니다. 0으로 설정할 경우 임베딩이 계산되지 않습니다. TensorBoard의 Embedding 탭에서 시각화할 데이터는 `embeddings_data`로 전달되어야 합니다.
+- __embeddings_layer_names__: 관찰할 레이어 이름의 리스트. None이나 빈 리스트의 경우 모든 임베딩 레이어가 관찰됩니다.
+- __embeddings_metadata__: 레이어 이름을 해당 임베딩 레이어의 메타데이터가 저장되는 파일 이름에 매핑하는 딕셔너리. 메타데이터 파일 형식에 대해서는 [세부사항](https://www.tensorflow.org/guide/embedding#metadata)을 참고하십시오. 모든 임베딩 레이어에 대해서 동일한 메타데이터 파일이 사용되는 경우에 한해 딕셔너리 대신 문자열을 전달할 수 있습니다.
+- __embeddings_data__: `embeddings_layer_names`로 지정한 층에 임베딩할 데이터입니다. 모델이 하나의 입력을 갖는 경우 NumPy 배열을, 모델이 여러 인풋을 갖는 경우 NumPy 배열의 리스트를 지정합니다. 더 많은 정보는 [여기서](https://www.tensorflow.org/guide/embedding) 확인하실 수 있습니다.
+- __update_freq__: `'batch'`, `'epoch'`, 혹은 정수. `'batch'`를 사용하는 경우 각 배치 이후 손실과 평가 지표를 TensorBoard에 기록합니다. `'epoch'`의 경우에도 마찬가지입니다. 정수를 사용하는 경우 예를 들어 `10000`이라면, 10000 샘플마다 콜백이 평가 지표와 손실을
+TensorBoard에 작성합니다. TensorBoard에 너무 자주 기록하면 학습이 느려질 수도 있다는 점을 참고하십시오.
---
-# 콜백을 만드십시오
-
-베이스 클래스인 `keras.callbacks.Callback`를 확장해서 커스텀 콜백을 만들 수 있습니다. 콜백은 클래스 재산인 `self.model`을 통해서 관련 모델에 접근할 수 있습니다.
+# 콜백 만들기 예시
+기본 클래스인 `keras.callbacks.Callback`를 확장해서 커스텀 콜백을 만들 수 있습니다. 콜백은 클래스 프로퍼티인 `self.model`을 통해서 관련 모델에 접근할 수 있습니다.
다음은 학습 과정 중 각 배치에 대한 손실 리스트를 저장하는 간단한 예시입니다:
```python
@@ -467,7 +325,7 @@ class LossHistory(keras.callbacks.Callback):
---
-### 예시: 손실 역사 기록
+### 예시: 손실 경과 기록
```python
class LossHistory(keras.callbacks.Callback):
@@ -486,7 +344,7 @@ history = LossHistory()
model.fit(x_train, y_train, batch_size=128, epochs=20, verbose=0, callbacks=[history])
print(history.losses)
-# 아웃풋
+# 출력
'''
[0.66047596406559383, 0.3547245744908703, ..., 0.25953155204159617, 0.25901699725311789]
'''