케라스 딥러닝 3주차 두번째 과제로 '인공지능 경진대회(AI팩토리)'에서 주최한 문제를 직접 풀고, 제출까지 완료하는 것이다. 이 문제의 학습목표는 알파벳 수화 데이터셋에 대해 이해하고, 훈련셋의 이미지와 라벨을 같이 가시화하는 방법에 대해 이해하는 것이다.
- 알파벳 수화 직접 배워보기 [참여]
문제 정의
알파벳 수화에 대해 학습해보자. 사전 지식이 없다고 가정했을 때, 사람은 어떻게 배우는지, 그리고 학습한 것을 어떻게 평가할 것인지도 알아보자.
실습
먼저 알파벳 수화 이미지 데이터셋을 다운받아야 한다. 그 다음 다운로드 받은 파일을 구글 코랩 서버에 업로드한 뒤 불러온다.
> 알파벳 수화 이미지 데이터셋 [다운로드]
다운로드 받은 파일을 구글 코랩 서버에 업로드하면, 위 사진과 같이 'sign_mnist.npz' 파일이 나타난다.
import numpy as np
dataset = np.load('sign_mnist.npz')
x_train, y_train = dataset['x_train'], dataset['y_train'] #훈련셋
x_test, y_train = dataset['x_test'], dataset['y_test'] #시험셋
데이터셋은 크게 훈련셋(x_train, y_train)과 시험셋(x_test, y_test)으로 구분된다.
- npz 확장자 : numpy의 array 파일
print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)
(27455, 28, 28) #샘플수, 행, 열
(27455,)
(7172, 28, 28)
(7172,)
훈련셋과 실험셋을 출력해보면 다음과 같은 결과를 확인할 수 있다. 첫번째 값 27455는 샘플 수, 두번째와 세번째 값은 각각 행과 열을 의미한다.
시험셋의 샘플 데이터 10개를 가시화 시켜보자.
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=1, ncols=10, figsize=(10, 13), #nrows는 행개수, ncols는 열개수
subplot_kw={'xticks': [], 'yticks': []}) #x,y축 눈금 없애기
for i, ax in enumerate(axes.flat): #0~9번째까지 반복
ax.imshow(x_test[i], cmap = 'gray') #이미지 색상은 흑백
ax.set_title(str(i) + ': ?') #타이틀은 물음표(?)로 지정
plt.show()
subplots을 이용하여, 10개의 작은 이미지를 보기 좋게 나타낸다.
import numpy as np
y_pred = ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'] #10개의 알파벳을 y_pred에 넣는다
np.savetxt('y_pred.csv', y_pred, fmt='%c') #y_pred.csv파일을 텍스트 형태로 저장한다
알파벳 수화에 대해 기존에 알고 있다면, 각 손 모양 이미지가 의미하는 알파벳을 배열에 기록하여 파일로 저장한다.
알파벳 수화를 모른다면, 시험셋이 아닌 훈련셋을 보고 학습해본다. 훈련셋의 샘플 100개를 손 이미지와 라벨을 함께 나타낸다.
fig, axes = plt.subplots(nrows=10, ncols=10, figsize=(10, 13), #행과 열은 10개씩, 사이즈는 가로10, 세로13
subplot_kw={'xticks': [], 'yticks': []}) #x,y축 눈금 없애기
alphabat = 'abcdefghijklmnopqrstuvwxyz' #라벨값에 매핑되는 알파벳 입력
for i, ax in enumerate(axes.flat):
ax.imshow(x_train[i], cmap = 'gray')
title = alphabat[y_train[i]] #타이틀 이름은 훈련셋으로
ax.set_title(title)
plt.show()
출력된 훈련셋을 충분히 숙지하거나, 시험셋의 샘플과 유사한 것을 찾아내서 라벨을 기록하여 파일에 저장한다.
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=1, ncols=10, figsize=(10, 13),
subplot_kw={'xticks': [], 'yticks': []})
for i, ax in enumerate(axes.flat):
ax.imshow(x_test[i], cmap = 'gray')
ax.set_title(str(i) + ': ?')
plt.show()
import numpy as np
y_pred = ['g', 'a', 'a', 'a', 'd', 'a', 'a', 'o', 'd', 'a'] #출력한 이미지셋과 같은 알파벳을 입력
np.savetxt('y_pred.csv', y_pred, fmt='%c')
코드를 실행해본 결과, 위 사진과 같이 'y_pred.csv'라는 파일이 생성되었다. 파일을 열면 라벨 값을 확인할 수 있다. 이 파일을 다운로드 받아서 제출하면 되는데, 예측한 값과 실제 값의 숫자가 일치하면 점수가 부여된다.
'고려사이버대학교 > Keras' 카테고리의 다른 글
[케라스 10주차] 시퀀스란 무엇이고, 모델 생성하는 방법 (0) | 2022.05.09 |
---|---|
[케라스 7주차] 순환신경망(RNN)과 LSTM 레이어 살펴보기 (0) | 2022.04.16 |
[케라스 6주차] 소규모 데이터셋으로 데이터 부풀리기 (0) | 2022.04.09 |
[케라스 5주차] 이미지에 특화된 인공지능 알아보기 (0) | 2022.04.03 |
[케라스 3주차] 숫자손글씨 이미지 직접 분류하기 (0) | 2022.03.21 |
댓글