CV 경기-거리 풍경 문자 인식-task 4 모델 훈련 및 검증
7234 단어 연습 하 다.
이 를 위해 본 장 에 서 는 검증 집 구축,모델 훈련 과 검증,모델 저장 과 로드,모델 참조 몇 가지 부분 에서 설명 하고,일부 소절 에 서 는 Pytorch 코드 와 결합 하여 설명 한다.
4.1 학습 목표
4.2 구조 검증 집합
기계 학습 모델(특히 깊이 학습 모델)의 훈련 과정 에서 모델 은 매우 적합 하기 쉽다.딥 러 닝 모델 은 끊 임 없 는 훈련 과정 에서 훈련 오차 가 점점 줄 어 들 지만 테스트 오차 의 추 세 는 일정 하지 않다.
모델 의 훈련 과정 에서 모델 은 훈련 데 이 터 를 이용 하여 훈련 할 수 있 을 뿐 모델 은 테스트 집의 견본 에 접촉 할 수 없다.따라서 모델 이 훈련 집 학 을 너무 잘 하면 모델 은 훈련 견본 의 세부 사항 을 기억 하여 모델 이 테스트 집에 서 의 일반화 효과 가 비교적 떨어진다.이런 현상 을 과 의합(Overfitting)이 라 고 한다.과 의합 에 대응 하 는 것 은 미 의합(Underfitting),즉 모델 이 훈련 집에 서 의 의합 효과 가 비교적 떨어진다.
그림 에서 보 듯 이 모델 의 복잡 도와 모델 훈련 라운드 수가 증가 함 에 따라 CNN 모델 은 훈련 집에 서 의 오차 가 낮 아 지지 만 테스트 집에 서 의 오차 가 점점 낮 아 지고 점점 높 아 지 는 반면 우 리 는 모델 이 테스트 집에 서 의 정밀도 가 높 을 수록 좋다 는 것 을 추구 하고 있다.
모델 이 너무 적합 한 상황 을 초래 하 는 데 는 여러 가지 원인 이 있다.그 중에서 가장 흔히 볼 수 있 는 상황 은 모델 의 복잡 도(Model Complexity)가 너무 높 아서 모델 은 훈련 데이터 의 여러 가지 측면 에서 지엽 적 인 규칙 을 배 웠 다.
상기 문 제 를 해결 하 는 가장 좋 은 해결 방법:테스트 집합 과 가능 한 한 일치 하 는 샘플 집합(검증 집합 이 라 고 할 수 있 음)을 구축 하고 훈련 과정 에서 모델 이 검증 집합 에서 의 정 도 를 계속 검증 하 며 이 를 통 해 모델 의 훈련 을 제어 한다.
경기 문 제 를 정 한 후에 경기 문 제 는 훈련 집 과 테스트 집 두 부분의 데 이 터 를 정 할 것 이다.참가 자 들 은 훈련 집 위 에 모델 을 구축 하고 테스트 집 위 에서 모델 의 일반화 능력 을 검증 해 야 한다.따라서 참가 자 들 은 모델 이 테스트 집합 에 대한 예측 결 과 를 제출 함으로써 자신의 모델 의 일반화 능력 을 검증 할 수 있다.참가 자 들 도 제출 횟수 제한 을 일부 제한 해 출전 선수 들 의'채점'을 피한다.
일반적인 상황 에서 참가 선수 들 도 현지에서 하나의 검증 집 을 나 누 어 현지 검증 을 할 수 있다.훈련 집,검증 집,테스트 집 은 각각 다른 역할 을 한다.
훈련 집 과 검증 집 이 분리 되 어 있 기 때문에 모델 은 검증 집 위의 정밀도 가 어느 정도 모델 의 일반화 능력 을 나 타 낼 수 있다.검증 집 을 구분 할 때 검증 집의 분 포 는 테스트 집 과 최대한 일치 해 야 한다.그렇지 않 으 면 모델 이 검증 집에 서 의 정밀도 가 지도 적 의 미 를 잃 게 된다.
검증 집 이 이렇게 중요 한 이상 로 컬 검증 집 을 어떻게 구분 합 니까?일부 경기 에서 경기 문 제 는 검증 집 을 정한다.만약 시합 문제 측 이 검증 집 을 정 하지 않 았 다 면,시합 참가 자 들 은 훈련 집에 서 일부분 을 나 누 어 검증 집 을 받 아야 한다.검증 집의 구분 은 다음 과 같은 몇 가지 방식 이 있다.
이번 대회 에 서 는 이미 검증 집 으로 나 뉘 어 져 있 기 때문에 선수 들 은 직접 훈련 집 을 이용 해 훈련 을 하고 검증 집 을 이용 해 정밀 도 를 검증 할 수 있다(물론 훈련 집 과 검증 집 을 합 쳐 자체 적 으로 검증 집 을 나 눌 수도 있다).
물론 이런 구분 방법 은 데이터 구분 방식 의 측면 에서 볼 때 기 존의 데이터 경기 에서 일반적으로 사용 하 는 구분 방법 은 유출 법 과 교차 검증 법 이다.만약 데이터 의 양 이 비교적 많다 면,남 겨 두 는 방법 이 비교적 적합 하 다.물론 모든 검증 집의 구분 이 얻 은 검증 집 은 훈련 집-검증 집-테스트 집의 분포 가 일치 하도록 확보 해 야 하기 때문에 어떤 구분 방식 을 구분 하 든 주의해 야 한다.
여기 의 분 포 는 일반적으로 라벨 과 관련 된 통계 분 포 를 말한다.예 를 들 어 분류 임무 에서'분포'는 라벨 의 유형 분 포 를 말 하 는데 훈련 집-검증 집-테스트 집의 유형 분포 상황 은 대체적으로 일치 해 야 한다.태그 가 순차 정 보 를 가지 고 있다 면 인증 집합 과 테스트 집합 은 시간 간격 이 일치 해 야 합 니 다.
4.3 모델 훈련 과 검증
이 절 에서 우 리 는 Pytorch 를 사용 하여 CNN 의 훈련 과 검증 과정 을 완성 하 는 것 을 목표 로 하 며 CNN 네트워크 구 조 는 이전 장과 일치한다.우리 가 완성 해 야 할 논리 구 조 는 다음 과 같다.
train_loader = torch.utils.data.DataLoader(
train_dataset,
batch_size=10,
shuffle=True,
num_workers=10,
)
val_loader = torch.utils.data.DataLoader(
val_dataset,
batch_size=10,
shuffle=False,
num_workers=10,
)
model = SVHN_Model1()
criterion = nn.CrossEntropyLoss (size_average=False)
optimizer = torch.optim.Adam(model.parameters(), 0.001)
best_loss = 1000.0
for epoch in range(20):
print('Epoch: ', epoch)
train(train_loader, model, criterion, optimizer, epoch)
val_loss = validate(val_loader, model, criterion)
#
if val_loss < best_loss:
best_loss = val_loss
torch.save(model.state_dict(), './model.pt')
그 중에서 각 Epoch 의 훈련 코드 는 다음 과 같다.
def train(train_loader, model, criterion, optimizer, epoch):
#
model.train()
for i, (input, target) in enumerate(train_loader):
c0, c1, c2, c3, c4, c5 = model(data[0])
loss = criterion(c0, data[1][:, 0]) + \
criterion(c1, data[1][:, 1]) + \
criterion(c2, data[1][:, 2]) + \
criterion(c3, data[1][:, 3]) + \
criterion(c4, data[1][:, 4]) + \
criterion(c5, data[1][:, 5])
loss /= 6
optimizer.zero_grad()
loss.backward()
optimizer.step()
각 Epoch 의 인증 코드 는 다음 과 같 습 니 다.
def validate(val_loader, model, criterion):
#
model.eval()
val_loss = []
#
with torch.no_grad():
for i, (input, target) in enumerate(val_loader):
c0, c1, c2, c3, c4, c5 = model(data[0])
loss = criterion(c0, data[1][:, 0]) + \
criterion(c1, data[1][:, 1]) + \
criterion(c2, data[1][:, 2]) + \
criterion(c3, data[1][:, 3]) + \
criterion(c4, data[1][:, 4]) + \
criterion(c5, data[1][:, 5])
loss /= 6
val_loss.append(loss.item())
return np.mean(val_loss)
4.4 모델 저장 및 불 러 오기
Pytorch 에서 모델 의 저장 과 로드 는 매우 간단 합 니 다.흔히 볼 수 있 는 방법 은 모델 매개 변 수 를 저장 하고 로드 하 는 것 입 니 다.
torch.save(model_object.state_dict(), 'model.pt')
model.load_state_dict(torch.load(' model.pt'))
4.5 모델 조 참 절차깊이 있 는 학습 원 리 는 적 지만 실천 성 이 매우 강하 기 때문에 기본적으로 많은 모델 의 검증 은 훈련 을 통 해 만 이 루어 질 수 있다.또한 깊이 있 는 학습 은 네트워크 구조 와 초 매개 변수 가 많 기 때문에 반복 적 으로 시도 해 야 한다.딥 러 닝 모델 을 훈련 하려 면 GPU 의 하드웨어 지원 이 필요 하고 훈련 시간 도 많이 필요 하 며 딥 러 닝 모델 을 어떻게 효과적으로 훈련 하 느 냐 가 학문 이 되 었 다.
깊이 있 는 학습 은 많은 훈련 기교 가 있 는데 비교적 추천 하 는 읽 기 링크 는 다음 과 같다.
이 절 은 흔히 볼 수 있 는 기 교 를 골 라 설명 하고 이번 경기 문 제 를 구체 적 으로 분석 했다.전통 적 인 기계 학습 모델 과 달리 깊이 학습 모델 의 정밀도 와 모델 의 복잡 도,데이터 양,정규 화,데이터 확대 등 요소 와 직접적인 관 계 를 가진다.그래서 깊이 있 는 학습 모델 이 서로 다른 단계(부적 합,과 의합 과 완벽 의합)에 있 는 상황 에서 여러분 은 어떤 각도 에서 모델 을 계속 최적화 할 수 있 는 지 알 수 있 습 니 다.
이번 경기 에 참가 하 는 과정 에서 저 는 여러분 에 게 다음 과 같은 논리 로 완성 할 것 을 건의 합 니 다.
4.6 이 장의 소절
본 장 은 깊이 있 는 학습 모델 의 훈련 과 검증 을 바탕 으로 검증 집합 구분 방법,모델 훈련 과 검증,모델 보존 과 로드 와 모델 참조 절 차 를 설명 했다.
주의해 야 할 것 은 모델 의 복잡 도가 상대 적 인 것 이지 반드시 모델 이 복잡 할 수록 좋 은 것 은 아니다.제 한 된 설비 와 제 한 된 시간 에 빠 른 교체 훈련 을 할 수 있 는 모델 을 선택해 야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
링크 ux 운영 실전 연습 - 2015 년 11 월 8 일 - 11 월 17 일 과정 숙제1. 로 컬 호스트 의 웹 서버 가 월요일 에 접근 할 수 없 도록 제한 합 니 다.새로운 요청 의 속 도 는 초당 100 개 를 초과 할 수 없습니다.웹 서버 에 admin 문자열 이 포 함 된 페이지 에 접근 할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.