반응형
데이터 불러오기
from tensorflow import keras
from sklearn.model_selection import train_test_split
(train_input, train_target), (test_input, test_target) = \
keras.datasets.fashion_mnist.load_data()
train_scaled = train_input.reshape(-1, 28, 28, 1) / 255.0
train_scaled, val_scaled, train_target, val_target = train_test_split(
train_scaled, train_target, test_size=0.2, random_state=42)
합성신경망 만들기
model = keras.Sequential()
model.add(keras.layers.Conv2D(32, kernel_size=3, activation='relu', padding='same', input_shape=(28,28,1)))
model.add(keras.layers.MaxPooling2D(2))
model.add(keras.layers.Conv2D(64, kernel_size=(3,3), activation='relu', padding='same'))
model.add(keras.layers.MaxPooling2D(2))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(100, activation='relu'))
model.add(keras.layers.Dropout(0.4))
model.add(keras.layers.Dense(10, activation='softmax'))
model.summary()
320 = (3 x 3 x 1) x 32 + 32 = (커널) x 필터 + 필터의 절편
18,496 = (3 x 3 x 32) x 64 + 64 = (커널) x 필터 + 필터의 절편
층의 구성 그림 표현
keras.utils.plot_model(model)
모델의 입력과 출력의 크기 표시
keras.utils.plot_model(model, show_shapes=True)
모델 컴파일과 훈련
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',
metrics='accuracy')
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-cnn-model.h5',
save_best_only=True)
early_stopping_cb = keras.callbacks.EarlyStopping(patience=2,
restore_best_weights=True)
history = model.fit(train_scaled, train_target, epochs=3,
validation_data=(val_scaled, val_target),
callbacks=[checkpoint_cb, early_stopping_cb])
#시간관계상 epochs를 3번으로 대체, 책에서는 20번
그래프확인
import matplotlib.pyplot as plt
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
모델 평가 및 예측
model.evaluate(val_scaled, val_target)
plt.imshow(val_scaled[0].reshape(28, 28), cmap='gray_r')
plt.show()
preds = model.predict(val_scaled[0:1])
print(preds)
plt.bar(range(1, 11), preds[0])
plt.xlabel('class')
plt.ylabel('prob.')
plt.show()
이미지 분류 및 테스트 세트 성능 확인
classes = ['티셔츠', '바지', '스웨터', '드레스', '코트',
'샌달', '셔츠', '스니커즈', '가방', '앵클 부츠']
import numpy as np
print(classes[np.argmax(preds)])
#>> 가방
test_scaled = test_input.reshape(-1, 28, 28, 1) / 255.0
model.evaluate(test_scaled, test_target)
반응형
'코딩' 카테고리의 다른 글
코랩에서 seaborn 및 matplotlib에서 한글 깨짐 현상 (0) | 2023.07.05 |
---|---|
배치 경사하강법 / 확률적 경사하강법 / 미니배치 경사하강법 활용처 (0) | 2023.06.04 |
[Python] 백준 2231 분해합 (1) | 2022.12.07 |
[Python] 백준 2163번 초콜릿 자르기 (0) | 2022.10.31 |