Keras 적합 함수의 validation_split 매개 변수는 어떻게 작동합니까?


17

Keras Sequential 모델 적합 함수의 유효성 검증 분할은 https://keras.io/models/sequential/에 다음과 같이 문서화되어 있습니다 .

validation_split : 0과 1 사이의 부동 소수점입니다. 유효성 검사 데이터로 사용될 훈련 데이터의 비율. 이 모델은 훈련 데이터의이 부분을 분리하여 학습하지 않으며, 각 에포크의 끝에서이 데이터의 손실 및 모델 메트릭을 평가합니다. 유효성 검사 데이터는 셔플 링하기 전에 제공된 x 및 y 데이터의 마지막 샘플에서 선택됩니다.

마지막 줄에 유의하십시오 :

유효성 검사 데이터는 셔플 링하기 전에 제공된 x 및 y 데이터의 마지막 샘플에서 선택됩니다.

이는 유효성 검사 데이터가 항상 고정되어 기본 데이터 세트의 맨 아래에서 가져옴을 의미합니까?

기본 데이터 세트에서 주어진 데이터의 일부를 무작위로 선택하는 방법이 있습니까?

답변:


17

실제로 각 에포크 후에 유효성 검사 세트를 리샘플링하지 않을 것입니다. 이 작업을 수행하면 모델이 데이터 세트의 모든 단일 샘플에 대해 학습되므로 과적 합이 발생할 수 있습니다. 트레이닝 프로세스 전에 항상 데이터를 분할하려는 경우 학습을 위해 데이터의 서브 세트를 사용하여 알고리즘을 트레이닝해야합니다.

설계된 기능은 데이터가 각 에포크에 대해 항상 동일한 데이터 부분을 학습하는 방식으로 데이터가 분리되도록합니다. 해당 옵션을 선택하면 모든 셔플 링은 에포크 사이의 교육 샘플 내에서 수행됩니다.

그러나 일부 데이터 세트의 경우 마지막 몇 개의 인스턴스를 가져 오는 것은 유용하지 않습니다. 특히 데이터 세트가 클래스를 기반으로 다시 그룹화되는 경우에는 유용하지 않습니다. 그러면 수업의 분포가 왜곡됩니다. 따라서 훈련 및 유효성 검사 세트에서 균형 잡힌 클래스 분포를 얻으려면 데이터의 하위 집합을 추출하는 임의의 방법이 필요합니다. 이를 위해 항상 다음과 같이 sklearn 기능을 사용하고 싶습니다.

from sklearn.model_selection import train_test_split

# Split the data
x_train, x_valid, y_train, y_valid = train_test_split(data, labels, test_size=0.33, shuffle= True)

원하는 것을 수행하는 기능을 사용하기 쉽습니다. 변수 data와는 labels첫 번째 차원은 인스턴스 인 표준 NumPy와 행렬이다.


1
나는 각 시대마다 다른 테스트 세트를 얻는 것을 의미하지 않았습니다. 많은 데이터 세트가 클래스에 따라 정렬 될 수 있기 때문에 데이터 세트의 끝에서 데이터를 가져 오는 것에 대해 묻습니다. 나는 train_test_split이것이 데이터 세트에서 테스트 / 유효성 검사 데이터를 임의로 가져 오기 때문에 이것이 더 좋은 방법이라는 것을 알고 있습니다.
— rnso

@rnso, 불행히도 Keras는 그 옵션을 제공하지 않습니다. 나는 그것이 그들이 제공하고자하는 범위 내에 있지 않다고 생각합니다. 이름에 임의의 2 개의 다른 메소드 입력이있는 구현을 약간 혼란스럽게 만듭니다.
— JahKnows

해당 train_test_spli를 사용하여 유효성 검사 및 테스트 데이터 정의를 혼합하지 않았습니까?
— bagustris

당신이 사용하는 경우 shuffle매개 변수를, 당신은 또한 사용하는 것이 shuffle에 .fitkeras 모델?
— Shamoon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.