성능 개선 제안
- 데이터 전처리: 이미지 데이터의 정규화나 증강을 통해 모델 성능 향상 가능
- 모델 구조 변경: Convolutional Neural Network (CNN) 레이어 추가로 특징 추출 강화
- 하이퍼파라미터 튜닝: 배치 크기, 학습률, 에포크 수 등 조정
- 드롭아웃(Dropout) 적용: 과적합 방지
- 보다 정교한 최적화 기법 사용: 예를 들어 RMSprop 또는 SGD
성능 개선 코드
##################################################
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import load_model
# 데이터 로드 및 전처리
x_train = np.load('.x_train.npy') / 255.0 # 정규화
y_train = np.load('.y_train.npy')
# 모델 구조 변경
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 3)),
MaxPooling2D(2, 2),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(2, 2),
Flatten(),
Dense(128, activation='relu'),
Dropout(0.5),
Dense(6, activation='softmax')
])
# 하이퍼파라미터 및 최적화기 변경
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, batch_size=64) # 에포크 및 배치 크기 변경
# 모델 저장 및 예측
model.save('./model_improved.h5')
# 테스트 데이터에 대한 예측
model = load_model('./model_improved.h5')
x_test = np.load('./anime/anime_data/x_test.npy') / 255.0
y_pred = model.predict(x_test)
y_pred_labels = np.argmax(y_pred, axis=1)
y_pred_onehot = to_categorical(y_pred_labels)
np.save('./y_pred.npy', y_pred_onehot)
모델 구조 변경
- CNN 추가: Convolutional Neural Network 레이어를 추가하여 이미지 내 특징 추출 능력 강화
- MaxPooling 적용: MaxPooling을 통해 데이터의 차원을 줄여 계산 효율성을 높임
- Dropout 적용: 과적합을 방지하기 위해 Dropout 레이어를 추가
- 하이퍼파라미터 조정
- 에포크 수 증가: 모델의 학습 기간을 늘려서 더 많은 데이터로 학습할 수 있도록 조정
- 배치 크기 조정: 배치 크기를 늘려 학습 시간을 단축하고, 더 많은 데이터를 활용한 경사 하강 진행