[인공지능] 케라스 학습 기술 - 모델의 크기 축소
- 인공지능
- 2022. 2. 17. 18:41
참조
모델의 크기 축소
- 가장 단순한 방법
- 모델의 크기를 줄인다는 것은 학습 파라미터의 수를 줄이는 것
데이터 준비
import enum
from tensorflow.keras.datasets import imdb
import numpy as np
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
def vectorize_seq(seqs, dim=10000):
results = np.zeros((len(seqs), dim))
for i, seq in enumerate(seqs):
results[i, seq] = 1.
return results
x_train = vectorize_seq(train_data)
x_test = vectorize_seq(test_data)
y_train = np.asarray(train_labels).astype('float32')
y_test = np.asarray(test_labels).astype('float32')
2가지의 모델 설정
# 2가지의 모델 설정
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model_1 = Sequential([Dense(16, activation='relu', input_shape=(10000,), name='input'),
Dense(16, activation='relu', name='hidden'),
Dense(1, activation='sigmoid', name='output')])
model_1.summary()
model_2 = Sequential([Dense(7, activation='relu', input_shape=(10000,), name='input2'),
Dense(7, activation='relu', name='hidden2'),
Dense(1, activation='sigmoid', name='output2')])
model_1.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['acc'])
model_2.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['acc'])
2개의 모델 학습
# 2개의 모델 학습
model_1_hist = model_1.fit(x_train, y_train,
epochs=20,
batch_size=512,
validation_data=(x_test, y_test))
model_2_hist = model_2.fit(x_train, y_train,
epochs=20,
batch_size=512,
validation_data=(x_test, y_test))
비교
- model_2 (더 작은 모델)이 '조금 더 나중에' 과대적합 발생
- 모델이 작을 수록, 조금 더 늦게 오버피팅 됨
# 비교
epochs = range(1, 21)
model_1_val_loss = model_1_hist.history['val_loss']
model_2_val_loss = model_2_hist.history['val_loss']
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
plt.plot(epochs, model_1_val_loss, 'r+', label='Model 1')
plt.plot(epochs, model_2_val_loss, 'bo', label='Model 2')
plt.xlabel('Epochs')
plt.ylabel('Validation Loss')
plt.legend()
plt.grid()
plt.show()
모델의 크기 축소(2)
모델 구성
# 모델 구성
model_3 = Sequential([Dense(1024, activation='relu', input_shape=(10000,), name='input3'),
Dense(1024, activation='relu', name='hidden3'),
Dense(1, activation='sigmoid', name='output3')])
model_3.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['acc'])
model_3.summary()
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input3 (Dense) (None, 1024) 10241024
hidden3 (Dense) (None, 1024) 1049600
output3 (Dense) (None, 1) 1025
=================================================================
Total params: 11,291,649
Trainable params: 11,291,649
Non-trainable params: 0
모델 학습
- 시간 소요
# 모델 학습
model_3_hist = model_3.fit(x_train, y_train,
epochs=20,
batch_size=512,
validation_data=(x_test, y_test))
시각화
- 볼륨이 큰 신경망일수록 빠르게 훈련 데이터 모델링 가능(학습 손실이 낮아짐)
- 과대 적합에는 더욱 민감해짐
- 이는 학습-검증 데이터의 손실을 보면 알 수 있음
# 시각화
model_3_val_loss = model_3_hist.history['val_loss']
plt.plot(epochs, model_1_val_loss, 'r+', label='Model 1')
plt.plot(epochs, model_2_val_loss, 'bo', label='Model 2')
plt.plot(epochs, model_3_val_loss, 'g--', label='Model 3')
plt.xlabel('Epochs')
plt.ylabel('Validation Loss')
plt.legend()
plt.grid()
plt.show()
728x90
'인공지능' 카테고리의 다른 글
[인공지능] 케라스 학습 기술 - 옵티마이저 (0) | 2022.02.17 |
---|---|
[인공지능] 케라스 학습 기술 - 가중치 초기화 (0) | 2022.02.17 |
[인공지능] 케라스 기초 - 콜백 (0) | 2022.02.17 |
[인공지능] 케라스 기초 - 모델 저장과 복원 (0) | 2022.02.16 |
[인공지능] 케라스 기초 - 모델 컴파일 (0) | 2022.02.15 |
이 글을 공유하기