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.