Skip to content

Latest commit

 

History

History
318 lines (251 loc) · 39.2 KB

sequential.md

File metadata and controls

318 lines (251 loc) · 39.2 KB

Sequential 모델 API

Sequential 모델을 처음 사용하는 경우, 먼저 케라스 Sequential 모델 시작하기를 읽어보십시오.


Sequential 모델 메소드

compile

compile(optimizer, loss=None, metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)

학습시킬 모델을 구성합니다.

인자

  • optimizer: 학습에 사용할 최적화 함수optimizer를 지정합니다. 케라스가 제공하는 최적화 함수의 이름 문자열string 또는 개별 최적화 함수의 인스턴스를 입력합니다. 자세한 사항은 최적화 함수를 참고하십시오.
  • loss: 학습에 사용할 손실 함수loss function를 지정합니다. 케라스가 제공하는 손실 함수의 이름 문자열 또는 개별 손실 함수의 인스턴스를 입력합니다. 자세한 사항은 손실 함수을 참고 하십시오. 모델이 다중의 결과output를 출력하는 경우, 손실 함수를 리스트 또는 딕셔너리 형태로 입력하여 결과의 종류별로 서로 다른 손실 함수를 적용할 수 있습니다. 이 경우 모델이 최소화할 손실값은 모든 손실 함수별 결과값의 합이 됩니다.
  • metrics: 학습 및 평가 과정에서 사용할 평가 지표metric의 리스트입니다. 가장 빈번히 사용하는 지표는 정확도metrics=['accuracy']입니다. 모델이 다중의 결과를 출력하는 경우, 각 결과에 서로 다른 지표를 특정하려면 metrics={'output_a': 'accuracy', 'output_b': ['accuracy', 'mse']}와 같은 형식의 딕셔너리를 입력합니다. 또한 출력 결과의 개수와 같은 길이의 리스트를 전달하는 형식으로도 지정할 수 있습니다(예: metrics=[['accuracy'], ['accuracy', 'mse']] 혹은 metrics=['accuracy', ['accuracy', 'mse']]).
  • loss_weights: 모델이 다중의 결과를 출력하는 경우 각각의 손실값이 전체 손실값에 미치는 영향을 조정하기 위한 계수를 설정합니다. 모델이 최소화할 손실값은 각각 loss_weights 만큼의 가중치가 곱해진 개별 손실값의 합입니다. float형식의 스칼라 값으로 이루어진 리스트 또는 딕셔너리를 입력받습니다. 리스트일 경우 모델의 결과와 순서에 맞게 1:1로 나열되어야 하며, 딕셔너리의 경우 결과값의 문자열 이름을 key로, 적용할 가중치의 스칼라 값을 value로 지정해야 합니다.
  • sample_weight_mode: fit 메소드의 sample_weight인자는 모델의 학습과정에서 손실을 계산할 때 입력된 훈련train 세트의 표본sample들 각각에 별도의 가중치를 부여하는 역할을 합니다. 이때 부여할 가중치가 2D(시계열) 형태라면 compile메소드의 sample_weight_mode"temporal"로 설정해야 합니다. 기본값은 1D 형태인 None입니다. 모델이 다중의 결과를 출력하는 경우 딕셔너리 혹은 리스트의 형태로 입력하여 각 결과마다 서로 다른 sample_weight_mode를 적용할 수 있습니다.
  • weighted_metrics: 학습 및 시험test 과정에서 sample_weightclass_weight를 적용할 평가 지표들을 리스트 형식으로 지정합니다. sample_weightclass_weight에 대해서는 fit메소드의 인자 항목을 참고하십시오.
  • target_tensors: 기본적으로 케라스는 학습 과정에서 외부로부터 목표값target을 입력받아 저장할 공간인 플레이스홀더placeholder를 미리 생성합니다. 만약 플레이스홀더를 사용하는 대신 특정한 텐서를 목표값으로 사용하고자 한다면 target_tensors인자를 통해 직접 지정하면 됩니다. 이렇게 하면 학습과정에서 외부로부터 NumPy 데이터를 목표값으로 입력받지 않게 됩니다. 단일 결과 모델일 경우 하나의 텐서를, 다중 모델의 경우는 텐서의 리스트 또는 결과값의 문자열 이름을 key로, 텐서를 value로 지정한 딕셔너리를 target_tensors로 입력받습니다.
  • **kwargs: Theano/CNTK 백엔드를 사용하는 경우 이 인자는 K.function에 전달됩니다. TensorFlow 백엔드를 사용하는 경우, 인자가 tf.Session.run에 전달됩니다.

오류

  • ValueError: optimizer, loss, metrics 혹은 sample_weight_mode의 인자가 잘못된 경우 발생합니다.

fit

fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_freq=1, max_queue_size=10, workers=1, use_multiprocessing=False)

전체 데이터셋을 정해진 횟수만큼 반복하여 모델을 학습시킵니다.

인자

  • x: 입력 데이터로 다음과 같은 종류가 가능합니다.
    • NumPy 배열array 또는 배열과 같은 형식의 데이터. 다중 입력의 경우 배열의 리스트.
    • 모델이 이름이 지정된 입력값을 받는 경우 이름과 배열/텐서가 keyvalue로 연결된 딕셔너리.
    • 파이썬 제너레이터 또는 keras.utils.Sequence 인스턴스로 (inputs, targets) 혹은 (inputs, targets, sample weights)를 반환하는 것.
    • 프레임워크(예: TensorFlow)를 통해 이미 정의된 텐서를 입력받는 경우 None(기본값).
  • y: 목표 데이터로 다음과 같은 종류가 가능합니다.
    • NumPy 배열 또는 배열과 같은 형식의 데이터. 다중의 결과를 출력하는 경우 배열의 리스트.
    • 프레임워크(예: TensorFlow)를 통해 이미 정의된 텐서를 입력받는 경우 None(기본값).
    • 결과값의 이름이 지정되어 있는 경우 이름과 배열/텐서가 keyvalue로 연결된 딕셔너리.
    • 만약 x에서 파이썬 제너레이터 또는 keras.utils.Sequence 인스턴스를 사용할 경우 목표값이 x와 함께 입력되므로 별도의 y입력은 불필요합니다.
  • batch_size: int 혹은 None. 손실로부터 그래디언트를 구하고 가중치를 업데이트하는 과정 한 번에 사용할 표본의 개수입니다. 따로 정하지 않는 경우 batch_size는 기본값인 32가 됩니다. 별도의 심볼릭 텐서나 제네레이터, 혹은 Sequence 인스턴스로 데이터를 받는 경우 인스턴스가 자동으로 배치를 생성하기 때문에 별도의 batch_size를 지정하지 않습니다.
  • epochs: int. 모델에 데이터 세트를 학습시킬 횟수입니다. 한 번의 에폭은 훈련 데이터로 주어진 모든 xy를 각 1회씩 학습시키는 것을 뜻합니다. 횟수의 인덱스가 epochs로 주어진 값에 도달할 때까지 학습이 반복되도록 되어있기 때문에 만약 시작 회차를 지정하는 initial_epoch 인자와 같이 쓰이는 경우 epochs는 전체 횟수가 아닌 "마지막 회차"의 순번을 뜻하게 됩니다.
  • verbose: int. 0, 1, 혹은 2. 학습 중 진행 정보의 화면 출력 여부를 설정하는 인자입니다. 0은 표시 없음, 1은 진행 표시줄progress bar 출력, 2는 에폭당 한 줄씩 출력을 뜻합니다. 기본값은 1입니다.
  • callbacks: keras.callbacks.Callback 인스턴스의 리스트. 학습과 검증 과정에서 적용할 콜백의 리스트입니다. 자세한 사항은 콜백을 참조하십시오.
  • validation_split: 0과 1사이의 float. 입력한 xy 훈련 데이터의 마지막부터 지정된 비율만큼의 표본을 분리하여 검증validation 데이터를 만듭니다. 이 과정은 데이터를 뒤섞기 전에 실행됩니다. 검증 데이터는 학습에 사용되지 않으며 각 에폭이 끝날 때마다 검증 손실과 평가 지표를 구하는데 사용됩니다. x가 제너레이터 혹은 Sequence인 경우에는 지원되지 않습니다.
  • validation_data: 매 에폭이 끝날 때마다 손실 및 평가지표를 측정할 검증 데이터를 지정합니다. 검증 데이터는 오직 측정에만 활용되며 학습에는 사용되지 않습니다. validation_split인자와 같이 지정될 경우 validation_split인자를 무시하고 적용됩니다. validation_data로는 다음과 같은 종류가 가능합니다.
    • NumPy 배열 또는 텐서로 이루어진 (x_val, y_val) 튜플.
    • NumPy 배열로 이루어진 (x_val, y_val, val_sample_weights) 튜플.
    • 위와 같이 튜플을 입력하는 경우에는 batch_size도 같이 명시해야 합니다.
    • 데이터 세트 또는 데이터 세트의 이터레이터. 이 경우 validation_steps를 같이 명시해야 합니다.
  • shuffle: bool 또는 문자열 'batch'. 불리언 입력의 경우 각 에폭을 시작하기 전에 훈련 데이터를 뒤섞을지를 결정합니다. 'batch'의 경우 HDF5 데이터의 제약을 해결하기 위한 설정으로 각 배치 크기 안에서 데이터를 뒤섞습니다. steps_per_epoch값이 None이 아닌 경우 shuffle인자는 무효화됩니다.
  • class_weight: 필요한 경우에만 사용하는 인자로, 각 클래스 인덱스를 key로, 가중치를 value로 갖는 딕셔너리를 입력합니다. 인덱스는 정수, 가중치는 부동소수점 값을 갖습니다. 주로 훈련 데이터의 클래스 분포가 불균형할 때 이를 완화하기 위해 사용하며, 손실 계산 과정에서 표본 수가 더 적은 클래스의 영향을 가중치를 통해 끌어올립니다. 학습 과정에서만 사용됩니다.
  • sample_weight: 특정한 훈련 표본이 손실 함수에서 더 큰 영향을 주도록 하고자 할 경우에 사용하는 인자입니다. 일반적으로 표본과 동일한 길이의 1D NumPy 배열을, 시계열 데이터의 경우 (samples, sequence_length)로 이루어진 2D 배열을 입력하여 손실 가중치와 표본이 1:1로 짝지어지게끔 합니다. 2D 배열을 입력하는 경우 반드시 compile() 단계에서 sample_weight_mode="temporal"로 지정해야 합니다. x가 제너레이터 또는 Sequence인스턴스인 경우는 손실 가중치를 sample_weight인자 대신 x의 세 번째 구성요소로 입력해야 적용됩니다.
  • initial_epoch: int. 특정한 에폭에서 학습을 시작하도록 시작 회차를 지정합니다. 이전의 학습을 이어서 할 때 유용합니다.
  • steps_per_epoch: int 혹은 None. 1회의 에폭을 이루는 배치의 개수를 정의하며 기본값은 None입니다. 프레임워크에서 이미 정의된 텐서(예: TensorFlow 데이터 텐서)를 훈련 데이터로 사용할 때 None을 지정하면 자동으로 데이터의 표본 수를 배치 크기로 나누어 올림한 값을 갖게 되며, 값을 구할 수 없는 경우 1이 됩니다.
  • validation_steps: 다음의 두 가지 경우에 한해서 유효한 인자입니다.
    • steps_per_epoch값이 특정된 경우, 매 에폭의 검증에 사용될 배치의 개수를 특정합니다.
    • validation_data를 사용하며 이에 제너레이터 형식의 값을 입력할 경우, 매 에폭의 검증에 사용하기 위해 제너레이터로부터 생성할 배치의 개수를 특정합니다.
  • validation_freq: 검증 데이터가 있을 경우에 한해 유효한 인자입니다. 정수 또는 리스트/튜플/세트 타입의 입력을 받습니다. 정수 입력의 경우 몇 회의 에폭마다 1회 검증할지를 정합니다. 예컨대 validation_freq=2의 경우 매 2회 에폭마다 1회 검증합니다. 만약 리스트나 튜플, 세트 형태로 입력된 경우 입력값 안에 지정된 회차에 한해 검증을 실행합니다. 예를 들어 validation_freq=[1, 2, 10]의 경우 1, 2, 10번째 에폭에서 검증합니다.
  • max_queue_size: int. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. 제너레이터 대기열queue의 최대 크기를 지정하며, 미정인 경우 기본값 10이 적용됩니다.
  • workers: int. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. 프로세스 기반으로 다중 스레딩을 할 때 제너레이터 작동에 사용할 프로세스의 최대 개수를 설정합니다. 기본값은 1이며, 0을 입력할 경우 메인 스레드에서 제너레이터를 작동시킵니다.
  • use_multiprocessing: bool. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. True인 경우 프로세스 기반 다중 스레딩을 사용하며 기본값은 False입니다. 이 설정을 사용할 경우 제너레이터에서 객체 직렬화pickle가 불가능한 인자들은 사용하지 않도록 합니다 (멀티프로세싱 과정에서 자식 프로세스로 전달되지 않기 때문입니다).
  • **kwargs: 이전 버전과의 호환성을 위해 사용됩니다.

반환값

History 객체를 반환합니다. History.history 속성attribute은 각 에폭마다 계산된 학습 손실 및 평가 지표가 순서대로 기록된 값입니다. 검증 데이터를 적용한 경우 해당 손실 및 지표도 함께 기록됩니다.

오류

  • RuntimeError: 모델이 컴파일되지 않은 경우 발생합니다.
  • ValueError: 모델에 정의된 입력과 실제 입력이 일치하지 않을 경우 발생합니다.

evaluate

evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False)

시험 모드에서 모델의 손실 및 평가 지표 값을 구합니다. 계산은 배치 단위로 실행됩니다.

인자

  • x: 입력 데이터로 다음과 같은 종류가 가능합니다.
    • NumPy 배열 또는 배열과 같은 형식의 데이터. 다중 입력의 경우 배열의 리스트.
    • 모델이 이름이 지정된 입력값을 받는 경우 이름과 배열/텐서가 keyvalue로 연결된 딕셔너리.
    • 파이썬 제너레이터 또는 keras.utils.Sequence 인스턴스로 (inputs, targets) 혹은 (inputs, targets, sample weights)를 반환하는 것.
    • 프레임워크(예: TensorFlow)를 통해 이미 정의된 텐서를 입력받는 경우 None(기본값).
  • y: 목표 데이터로 다음과 같은 종류가 가능합니다.
    • NumPy 배열 또는 배열과 같은 형식의 데이터. 다중의 결과를 출력하는 경우 배열의 리스트.
    • 프레임워크(예: TensorFlow)를 통해 이미 정의된 텐서를 입력받는 경우 None(기본값).
    • 결과값의 이름이 지정되어 있는 경우 이름과 배열/텐서가 keyvalue로 연결된 딕셔너리.
    • 만약 x에서 파이썬 제너레이터 또는 keras.utils.Sequence 인스턴스를 사용할 경우 목표값이 x와 함께 입력되므로 별도의 y입력은 불필요합니다.
  • batch_size: int 혹은 None. 한 번에 평가될 표본의 개수입니다. 따로 정하지 않는 경우 batch_size는 기본값인 32가 됩니다. 별도의 심볼릭 텐서나 제네레이터, 혹은 Sequence 인스턴스로 데이터를 받는 경우 인스턴스가 자동으로 배치를 생성하기 때문에 별도의 batch_size를 지정하지 않습니다.
  • verbose: 0 또는 1. 진행 정보의 화면 출력 여부를 설정하는 인자입니다. 0은 표시 없음, 1은 진행 표시줄 출력을 뜻합니다. 기본값은 1입니다.
  • sample_weight: 특정한 시험 표본이 손실 함수에서 더 큰 영향을 주도록 하고자 할 경우에 사용하는 인자입니다. 일반적으로 표본과 동일한 길이의 1D NumPy 배열을, 시계열 데이터의 경우 (samples, sequence_length)로 이루어진 2D 배열을 입력하여 손실 가중치와 표본이 1:1로 짝지어지게끔 합니다. 2D 배열을 입력하는 경우 반드시 compile() 단계에서 sample_weight_mode="temporal"로 지정해야 합니다.
  • steps: int 혹은 None. 평가를 완료하기까지의 단계(배치) 개수를 정합니다. 기본값은 None으로, 이 경우 고려되지 않습니다.
  • callbacks: keras.callbacks.Callback 인스턴스의 리스트. 평가 과정에서 적용할 콜백의 리스트입니다. 콜백을 참조하십시오.
  • max_queue_size: int. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. 제너레이터 대기열의 최대 크기를 지정하며, 미정인 경우 기본값 10이 적용됩니다.
  • workers: int. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. 프로세스 기반으로 다중 스레딩을 할 때 제너레이터 작동에 사용할 프로세스의 최대 개수를 설정합니다. 기본값은 1이며, 0을 입력할 경우 메인 스레드에서 제너레이터를 작동시킵니다.
  • use_multiprocessing: bool. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. True인 경우 프로세스 기반 다중 스레딩을 사용하며 기본값은 False입니다. 이 설정을 사용할 경우 제너레이터에서 객체 직렬화가 불가능한 인자들은 사용하지 않도록 합니다 (멀티프로세싱 과정에서 자식 프로세스로 전달되지 않기 때문입니다).

반환값

적용할 모델이 단일한 결과를 출력하며 별도의 평가 지표를 사용하지 않는 경우 시험 손실의 스칼라 값을 생성합니다. 다중의 결과를 출력하는 모델이거나 여러 평가 지표를 사용하는 경우 스칼라 값의 리스트를 생성합니다. model.metrics_names 속성은 각 스칼라 결과값에 할당된 이름을 보여줍니다.

오류

  • ValueError: 잘못된 인자 전달시에 발생합니다.

predict

predict(x, batch_size=None, verbose=0, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False)

모델에 표본을 입력하여 예측값을 생성합니다. 계산은 배치 단위로 실행됩니다.

인자

  • x: 입력 데이터로 다음과 같은 종류가 가능합니다.
    • NumPy 배열 또는 배열과 같은 형식의 데이터. 다중 입력의 경우 배열의 리스트.
    • 모델이 이름이 지정된 입력값을 받는 경우 이름과 배열/텐서가 keyvalue로 연결된 딕셔너리.
    • 파이썬 제너레이터 또는 keras.utils.Sequence 인스턴스로 (inputs, targets) 혹은 (inputs, targets, sample weights)를 반환하는 것.
    • 프레임워크(예: TensorFlow)를 통해 이미 정의된 텐서를 입력받는 경우 None(기본값).
  • batch_size: int 혹은 None. 한 번에 예측될 표본의 개수입니다. 따로 정하지 않는 경우 batch_size는 기본값인 32가 됩니다. 별도의 심볼릭 텐서나 제네레이터, 혹은 Sequence 인스턴스로 데이터를 받는 경우 인스턴스가 자동으로 배치를 생성하기 때문에 별도의 batch_size를 지정하지 않습니다.
  • verbose: 0 또는 1. 진행 정보의 화면 출력 여부를 설정하는 인자입니다. 0은 표시 없음, 1은 진행 표시줄 출력을 뜻합니다. 기본값은 1입니다.
  • steps: int 혹은 None. 예측을 완료하기까지의 단계(배치) 개수를 정합니다. 기본값은 None으로, 이 경우 고려되지 않습니다.
  • callbacks: keras.callbacks.Callback 인스턴스의 리스트. 예측 과정에서 적용할 콜백의 리스트입니다. 콜백을 참조하십시오.
  • max_queue_size: int. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. 제너레이터 대기열의 최대 크기를 지정하며, 미정인 경우 기본값 10이 적용됩니다.
  • workers: int. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. 프로세스 기반으로 다중 스레딩을 할 때 제너레이터 작동에 사용할 프로세스의 최대 개수를 설정합니다. 기본값은 1이며, 0을 입력할 경우 메인 스레드에서 제너레이터를 작동시킵니다.
  • use_multiprocessing: bool. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. True인 경우 프로세스 기반 다중 스레딩을 사용하며 기본값은 False입니다. 이 설정을 사용할 경우 제너레이터에서 객체 직렬화가 불가능한 인자들은 사용하지 않도록 합니다 (멀티프로세싱 과정에서 자식 프로세스로 전달되지 않기 때문입니다).

반환값

예측값의 NumPy 배열.

오류

  • ValueError: 모델에 정의된 입력과 실제 입력이 일치하지 않을 경우, 또는 상태 저장 모델stateful model을 사용하여 예측할 때 입력한 표본의 개수가 배치 크기의 배수가 아닌 경우 발생합니다.

train_on_batch

train_on_batch(x, y, sample_weight=None, class_weight=None, reset_metrics=True)

하나의 데이터 배치에 대해서 그래디언트를 한 번 적용합니다.

인자

  • x: 기본적으로 훈련 데이터의 NumPy 배열을, 모델이 다중 입력을 받는 경우 NumPy 배열의 리스트를 입력합니다. 모델의 모든 입력에 이름이 배정된 경우 입력값 이름을 key로, NumPy 배열을 value로 묶은 딕셔너리를 입력할 수 있습니다.
  • y: 기본적으로 목표 데이터의 NumPy 배열을, 모델이 다중의 결과를 출력하는 경우 NumPy 배열의 리스트를 입력합니다. 모델의 모든 결과에 이름이 배정된 경우 결과값 이름을 key로, NumPy 배열을 value로 묶은 딕셔너리를 입력할 수 있습니다.
  • sample_weight: 특정한 훈련 표본이 손실 함수에서 더 큰 영향을 주도록 하고자 할 경우에 사용하는 인자입니다. 일반적으로 표본과 동일한 길이의 1D NumPy 배열을, 시계열 데이터의 경우 (samples, sequence_length)로 이루어진 2D 배열을 입력하여 손실 가중치와 표본이 1:1로 짝지어지게끔 합니다. 2D 배열을 입력하는 경우 반드시 compile() 단계에서 sample_weight_mode="temporal"로 지정해야 합니다. x가 제너레이터 또는 Sequence인스턴스인 경우는 손실 가중치를 sample_weight인자 대신 x의 세 번째 구성요소로 입력해야 적용됩니다.
  • class_weight: 필요한 경우에만 사용하는 인자로, 각 클래스 인덱스를 key로, 가중치를 value로 갖는 딕셔너리를 입력합니다. 인덱스는 정수, 가중치는 부동소수점 값을 갖습니다. 주로 훈련 데이터의 클래스 분포가 불균형할 때 이를 완화하기 위해 사용하며, 손실 계산 과정에서 표본 수가 더 적은 클래스의 영향을 가중치를 통해 끌어올립니다. 학습 과정에서만 사용됩니다.
  • reset_metrics: True인 경우 오직 해당되는 하나의 배치만을 고려한 평가 지표가 생성됩니다. False인 경우 평가 지표는 이후에 입력될 다른 배치들까지 누적됩니다.

반환값

적용할 모델이 단일한 결과를 출력하며 별도의 평가 지표를 사용하지 않는 경우 훈련 손실의 스칼라 값을 생성합니다. 다중의 결과를 출력하는 모델이거나 여러 평가 지표를 사용하는 경우 스칼라 값의 리스트를 생성합니다. model.metrics_names 속성은 각 스칼라 결과값에 할당된 이름을 보여줍니다.


test_on_batch

test_on_batch(x, y, sample_weight=None, reset_metrics=True)

하나의 표본 배치에 대해서 모델을 테스트합니다.

인자

  • x: 기본적으로 훈련 데이터의 NumPy 배열을, 모델이 다중 입력을 받는 경우 NumPy 배열의 리스트를 입력합니다. 모델의 모든 입력에 이름이 배정된 경우 입력값 이름을 key로, NumPy 배열을 value로 묶은 딕셔너리를 입력할 수 있습니다.
  • y: 기본적으로 목표 데이터의 NumPy 배열을, 모델이 다중의 결과를 출력하는 경우 NumPy 배열의 리스트를 입력합니다. 모델의 모든 결과에 이름이 배정된 경우 결과값 이름을 key로, NumPy 배열을 value로 묶은 딕셔너리를 입력할 수 있습니다.
  • sample_weight: 특정한 훈련 표본이 손실 함수에서 더 큰 영향을 주도록 하고자 할 경우에 사용하는 인자입니다. 일반적으로 표본과 동일한 길이의 1D NumPy 배열을, 시계열 데이터의 경우 (samples, sequence_length)로 이루어진 2D 배열을 입력하여 손실 가중치와 표본이 1:1로 짝지어지게끔 합니다. 2D 배열을 입력하는 경우 반드시 compile() 단계에서 sample_weight_mode="temporal"로 지정해야 합니다. x가 제너레이터 또는 Sequence인스턴스인 경우는 손실 가중치를 sample_weight인자 대신 x의 세 번째 구성요소로 입력해야 적용됩니다.
  • reset_metrics: True인 경우 오직 해당되는 하나의 배치만을 고려한 평가 지표가 생성됩니다. False인 경우 평가 지표는 이후에 입력될 다른 배치들까지 누적됩니다.

반환값

적용할 모델이 단일한 결과를 출력하며 별도의 평가 지표를 사용하지 않는 경우 시험 손실의 스칼라 값을 생성합니다. 다중의 결과를 출력하는 모델이거나 여러 평가 지표를 사용하는 경우 스칼라 값의 리스트를 생성합니다. model.metrics_names 속성은 각 스칼라 결과값에 할당된 이름을 보여줍니다.


predict_on_batch

predict_on_batch(x)

하나의 표본 배치에 대한 예측값을 생성합니다.

인자

  • x: NumPy 배열로 이루어진 입력 표본.

반환값

예측값의 NumPy 배열.


fit_generator

fit_generator(generator, steps_per_epoch=None, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, validation_freq=1, class_weight=None, max_queue_size=10, workers=1, use_multiprocessing=False, shuffle=True, initial_epoch=0)

파이썬 제너레이터 또는 Sequence 인스턴스에서 생성된 데이터의 배치별로 모델을 학습시킵니다.

연산 효율을 높이기 위해 제너레이터는 모델과 병렬로 작동합니다. 예를 들어 GPU로 모델을 학습시키는 동시에 CPU로 실시간 이미지 데이터 증강data augmentation을 처리할 수 있습니다. 또한 keras.utils.Sequence를 사용할 경우 표본의 순서가 유지됨은 물론, use_multiprocessing=True인 경우에도 매 에폭당 입력이 한 번만 계산되도록 보장됩니다.

인자

  • generator: 파이썬 제너레이터 혹은 Sequence(keras.utils.Sequence)객체object입니다. Sequence 객체를 사용하는 경우 멀티프로세싱 적용시 입력 데이터가 중복 사용되는 문제를 피할 수 있습니다. generator는 반드시 다음 중 하나의 값을 생성해야 합니다.
    • (inputs, targets) 튜플
    • (inputs, targets, sample_weights) 튜플.
      매번 제너레이터가 생성하는 튜플의 값들은 각각 하나의 배치가 됩니다. 따라서 튜플에 포함된 배열들은 모두 같은 길이를 가져야 합니다. 물론 배치가 다른 경우 길이도 달라질 수 있습니다. 예컨대, 전체 표본 수가 배치 크기로 딱 나누어지지 않는 경우 마지막 배치의 길이는 다른 배치들보다 짧은 것과 같습니다. 제너레이터는 주어진 데이터를 무한정 반복 추출하는 것이어야 하며, 모델이 steps_per_epoch로 지정된 개수의 배치를 처리할 때 1회의 에폭이 끝나는 것으로 간주됩니다.
  • steps_per_epoch: int. 1회 에폭을 마치고 다음 에폭을 시작할 때까지 generator로부터 생성할 배치의 개수를 지정합니다. 일반적으로 ceil(num_samples / batch_size), 즉 전체 표본의 수를 배치 크기로 나누어 올림한 값과 같아야 합니다. Sequence 인스턴스를 입력으로 받는 경우에 한해 steps_per_epoch를 지정하지 않으면 자동으로 len(generator)값을 취합니다.
  • epochs: int. 모델에 데이터 세트를 학습시킬 횟수입니다. 한 번의 에폭은 steps_per_epoch로 정의된 데이터 전체를 1회 학습시키는 것을 뜻합니다. 횟수의 인덱스가 epochs로 주어진 값에 도달할 때까지 학습이 반복되도록 되어있기 때문에 만약 시작 회차를 지정하는 initial_epoch 인자와 같이 쓰이는 경우 epochs는 전체 횟수가 아닌 "마지막 회차"의 순번을 뜻하게 됩니다.
  • verbose: int. 0, 1, 혹은 2. 학습 중 진행 정보의 화면 출력 여부를 설정하는 인자입니다. 0은 표시 없음, 1은 진행 표시줄 출력, 2는 에폭당 한 줄씩 출력을 뜻합니다. 기본값은 1입니다.
  • callbacks: keras.callbacks.Callback 인스턴스의 리스트. 학습 과정에서 적용할 콜백의 리스트입니다. 자세한 사항은 콜백을 참조하십시오.
  • validation_data: 다음 중 하나의 형태를 취합니다.
    • 제너레이터 또는 검증 데이터용 Sequence 객체.
    • (x_val, y_val) 튜플.
    • (x_val, y_val, val_sample_weights) 튜플.
      매회의 학습 에폭이 끝날 때마다 입력된 데이터를 사용하여 검증 손실 및 평가 지표를 구합니다. 학습에는 사용되지 않습니다.
  • validation_steps: validation_data가 제너레이터 형식의 값을 입력할 경우에만 유효한 인자입니다. 매 에폭의 검증에 사용하기 위해 제너레이터로부터 생성할 배치의 개수를 특정합니다. 일반적으로 검증 세트의 표본 개수를 배치 크기로 나누어 올림한 값과 같아야 합니다. Sequence 인스턴스를 입력으로 받는 경우에 한해 steps_per_epoch를 지정하지 않으면 자동으로 len(validation_data)값을 취합니다.
  • validation_freq: 검증 데이터가 있을 경우에 한해 유효한 인자입니다. 정수 또는 리스트/튜플/세트 타입의 입력을 받습니다. 정수 입력의 경우 몇 회의 에폭마다 1회 검증할지를 정합니다. 예컨대 validation_freq=2의 경우 매 2회 에폭마다 1회 검증합니다. 만약 리스트나 튜플, 세트 형태로 입력된 경우 입력값 안에 지정된 회차에 한해 검증을 실행합니다. 예를 들어 validation_freq=[1, 2, 10]의 경우 1, 2, 10번째 에폭에서 검증합니다.
  • class_weight: 필요한 경우에만 사용하는 인자로, 각 클래스 인덱스를 key로, 가중치를 value로 갖는 딕셔너리를 입력합니다. 인덱스는 정수, 가중치는 부동소수점 값을 갖습니다. 주로 훈련 데이터의 클래스 분포가 불균형할 때 이를 완화하기 위해 사용하며, 손실 계산 과정에서 표본 수가 더 적은 클래스의 영향을 가중치를 통해 끌어올립니다. 학습 과정에서만 사용됩니다.
  • max_queue_size: int. 제너레이터 대기열의 최대 크기를 지정하며, 미정인 경우 기본값 10이 적용됩니다.
  • workers: int. 프로세스 기반으로 다중 스레딩을 할 때 제너레이터 작동에 사용할 프로세스의 최대 개수를 설정합니다. 기본값은 1이며, 0을 입력할 경우 메인 스레드에서 제너레이터를 작동시킵니다.
  • use_multiprocessing: bool. True인 경우 프로세스 기반 다중 스레딩을 사용하며 기본값은 False입니다. 이 설정을 사용할 경우 제너레이터에서 객체 직렬화가 불가능한 인자들은 사용하지 않도록 합니다 (멀티프로세싱 과정에서 자식 프로세스로 전달되지 않기 때문입니다).
  • shuffle: bool. Sequence인스턴스 입력을 받을 때에만 사용됩니다. 각 에폭을 시작하기 전에 훈련 데이터를 뒤섞을지를 결정합니다. steps_per_epoch값이 None이 아닌 경우 shuffle인자는 무효화됩니다.
  • initial_epoch: int. 특정한 에폭에서 학습을 시작하도록 시작 회차를 지정합니다. 이전의 학습을 이어서 할 때 유용합니다.

반환값

History 객체를 반환합니다. History.history 속성은 각 에폭마다 계산된 학습 손실 및 평가 지표가 순서대로 기록된 값입니다. 검증 데이터를 적용한 경우 해당 손실 및 지표도 함께 기록됩니다.

오류

  • ValueError: 제너레이터가 유효하지 않은 형식의 데이터를 만들어 내는 경우 발생합니다.

예시

def generate_arrays_from_file(path):
    while True:
        with open(path) as f:
            for line in f:
                # 파일의 각 라인으로부터
                # 입력 데이터와 레이블의 NumPy 배열을 만듭니다
                x1, x2, y = process_line(line)
                yield ({'input_1': x1, 'input_2': x2}, {'output': y})

model.fit_generator(generate_arrays_from_file('/my_file.txt'),
                    steps_per_epoch=10000, epochs=10)

evaluate_generator

evaluate_generator(generator, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False, verbose=0)

제너레이터에서 생성한 데이터를 이용하여 모델을 평가합니다. 제너레이터는 test_on_batch가 요구하는 것과 동일한 종류의 데이터를 생성하는 것이어야 합니다.

인자

  • generator: (inputs, targets) 튜플 또는 (inputs, targets, sample_weights) 튜플을 생성하는 파이썬 제너레이터 혹은 Sequence(keras.utils.Sequence)인스턴스입니다. Sequence인스턴스를 사용하는 경우 멀티프로세싱 적용시 입력 데이터가 중복 사용되는 문제를 피할 수 있습니다.
  • steps: 평가를 마치기 전까지 generator로부터 생성할 배치의 개수를 지정합니다. Sequence 인스턴스를 입력으로 받는 경우에 한해 steps를 지정하지 않으면 자동으로 len(generator)값을 취합니다.
  • callbacks: keras.callbacks.Callback 인스턴스의 리스트. 평가 과정에서 적용할 콜백의 리스트입니다. 콜백을 참조하십시오.
  • max_queue_size: int. 제너레이터 대기열의 최대 크기를 지정하며, 미정인 경우 기본값 10이 적용됩니다.
  • workers: int. 프로세스 기반으로 다중 스레딩을 할 때 제너레이터 작동에 사용할 프로세스의 최대 개수를 설정합니다. 기본값은 1이며, 0을 입력할 경우 메인 스레드에서 제너레이터를 작동시킵니다.
  • use_multiprocessing: bool. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. True인 경우 프로세스 기반 다중 스레딩을 사용하며 기본값은 False입니다. 이 설정을 사용할 경우 제너레이터에서 객체 직렬화가 불가능한 인자들은 사용하지 않도록 합니다 (멀티프로세싱 과정에서 자식 프로세스로 전달되지 않기 때문입니다).
  • verbose: 0 또는 1. 진행 정보의 화면 출력 여부를 설정하는 인자입니다. 0은 표시 없음, 1은 진행 표시줄 출력을 뜻합니다. 기본값은 1입니다.

반환값

적용할 모델이 단일한 결과를 출력하며 별도의 평가 지표를 사용하지 않는 경우 시험 손실의 스칼라 값을 생성합니다. 다중의 결과를 출력하는 모델이거나 여러 평가 지표를 사용하는 경우 스칼라 값의 리스트를 생성합니다. model.metrics_names 속성은 각 스칼라 결과값에 할당된 이름을 보여줍니다.

오류

  • ValueError: 제너레이터가 유효하지 않은 형식의 데이터를 만들어 내는 경우 발생합니다.

predict_generator

predict_generator(generator, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False, verbose=0)

제너레이터에서 생성한 표본 데이터에 대한 예측값을 생성합니다. 제너레이터는 predict_on_batch가 요구하는 것과 동일한 종류의 데이터를 생성하는 것이어야 합니다.

인수

  • generator: 표본 데이터의 배치를 생성하는 제너레이터 혹은 Sequence(keras.utils.Sequence)인스턴스입니다. Sequence인스턴스를 사용하는 경우 멀티프로세싱 적용시 입력 데이터가 중복 사용되는 문제를 피할 수 있습니다.
  • steps: 예측을 마치기 전까지 generator로부터 생성할 배치의 개수를 지정합니다. Sequence 인스턴스를 입력으로 받는 경우에 한해 steps를 지정하지 않으면 자동으로 len(generator)값을 취합니다.
  • callbacks: keras.callbacks.Callback 인스턴스의 리스트. 예측 과정에서 적용할 콜백의 리스트입니다. 콜백을 참조하십시오.
  • max_queue_size: int. 제너레이터 대기열의 최대 크기를 지정하며, 미정인 경우 기본값 10이 적용됩니다.
  • workers: int. 프로세스 기반으로 다중 스레딩을 할 때 제너레이터 작동에 사용할 프로세스의 최대 개수를 설정합니다. 기본값은 1이며, 0을 입력할 경우 메인 스레드에서 제너레이터를 작동시킵니다.
  • use_multiprocessing: bool. 입력 데이터가 제너레이터 또는 keras.utils.Sequence 인스턴스일 때만 유효합니다. True인 경우 프로세스 기반 다중 스레딩을 사용하며 기본값은 False입니다. 이 설정을 사용할 경우 제너레이터에서 객체 직렬화가 불가능한 인자들은 사용하지 않도록 합니다 (멀티프로세싱 과정에서 자식 프로세스로 전달되지 않기 때문입니다).
  • verbose: 0 또는 1. 진행 정보의 화면 출력 여부를 설정하는 인자입니다. 0은 표시 없음, 1은 진행 표시줄 출력을 뜻합니다. 기본값은 1입니다.

반환값

예측 값의 NumPy 배열.

오류

  • ValueError: 제너레이터가 유효하지 않은 형식의 데이터를 만들어 내는 경우 발생합니다.

get_layer

get_layer(name=None, index=None)

layer의 (고유한) 이름, 혹은 인덱스를 바탕으로 해당 층을 가져옵니다. nameindex가 모두 제공되는 경우, index가 우선 순위를 갖습니다.

인덱스는 (상향식) 너비 우선 그래프 탐색(bottom-up) horizontal graph traversal 순서를 따릅니다.

인자

  • name: str. 층의 이름입니다.
  • index: int. 층의 인덱스입니다.

반환값

층 인스턴스.

오류

  • ValueError: 층의 이름이나 인덱스가 유효하지 않은 경우 발생합니다.