일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 생성모델
- cnn
- 이미지 분류
- 원-핫 인코딩
- 풀링층
- 양방향 RNN
- KONLPY
- 코딩테스트
- 입력층
- NLTK
- 성능 최적화
- 딥러닝
- 카운트 벡터
- 망각 게이트
- 합성곱층
- RNN
- 자연어 전처리
- 프로그래머스
- 과적합
- COLAB
- 전이학습
- 출력층
- 시계열 분석
- 완전연결층
- 클러스터링
- 텍스트 마이닝
- 임베딩
- 합성곱 신경망
- 코랩
- 순환 신경망
Archives
- Today
- Total
Colab으로 하루에 하나씩 딥러닝
합성곱 신경망_2.fashion_mnist 실습 본문
728x90
합성곱 신경망 맛보기
### 라이브러리 호출
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
### fashion_mnist 데이터셋 내려받기
fashion_mnist = tf.keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
### 분류에 사용될 클래스 정의
class_names = ['T-shirt', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal','Shirt','Sneaker','Bag','Ankle Boot']
for i in range(25):
plt.subplot(5, 5, i+1)
plt.grid(False)
plt.xticks([])
plt.yticks([])
plt.imshow(x_train[i], cmap=plt.cm.binary)
plt.show() # 이미지 데이터 25개를 시각적으로 표현
### 심층 신경망을 이용한 모델 생성 및 훈련
X_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28)), # 설명 1
tf.keras.layers.Dense(128, activation='relu'), # 설명 2
tf.keras.layers.Dropout(0.2), # 설명 3
tf.keras.layers.Dense(10, activation='softmax') # 설명 4
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']) # 설명 5
model.fit(x_train, y_train, epochs=5) # 훈련 데이터셋을 이용하여 모델 훈련
model.evaluate(x_test, y_test, verbose=2) # 검증 데이터셋을 이용하여 모델 평가
상세 설명
- 설명 1: 해당 데이터를 완전연결층에 전달할 때 1차원으로 바꿔주는 Flatten을 사용함
- 설명 2: 합성곱층에서 특성 맵을 만들고, 풀링층에서 차원을 감소시킴. 감소된 특성 맵은 밀집층의 입력으로 사용되고 그 결과가 출력층과 연결됨. 입력층과 출력층을 연결하기 위해 밀집층을 사용함
- 설명 3: 과적합을 방지하기 위해 특정 노드를 0으로 만듦. 해당 코드에서는 20%의 노드를 무작위로 0으로 만들어줌
- 설명 4: 출력층의 노드 개수는 10개이고, 소프트맥스를 활성화 함수로 사용함
- 설명 5:
- optimizer: 손실 함수를 사하여 구한 값으로 기울기를 구하고 네트워크의 파라미터를 학습에 어떻게 반영할지 결정함
- loss: 최적화 과정에서 사용될 손실 함수를 설정
- metrics: 모델의 평가 기준
### 데이터 전처리
X_train_final = x_train.reshape((-1,28,28,1)) / 255.0
X_test_final = x_test.reshape((-1,28,28,1)) / 255.0
### 합성곱 네트워크를 이용한 모델 생성
model_with_conv = tf.keras.Sequential([
tf.keras.layers.Conv2D(32, (3,3), padding='same', activation='relu',
input_shape=(28,28,1)), # 설명 1
tf.keras.layers.MaxPooling2D((2,2), strides=2),
tf.keras.layers.Conv2D(64, (3,3), padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D((2,2), strides=2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
model_with_conv.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
상세 설명
- 설명 1:
- 32: 합성곱 필터 개수
- (3,3): 합성곱 커널의 행과 열
- padding: 경계 처리 방법
- valid: 유요한 영역만 출력되므로 출력 이미지 크기가 입력 이미지 크기 보다 작음
- same: 출력 이미지 크기와 입력 이미지 크기가 동일
- activation: 활성화 함수 설정
- linear: 기본값으로 결괏값이 그대로 출력됨
- relu: 은닉층에서 주로 사용됨
- sigmoid: 이진 분류 문제에서 출력층에서 주로 사용됨
- tanh: 함수 중심 값을 0으로 옮겨 시그모이드의 최적화 과정이 느려지는 문제를 개선
- softmax: 다중 분류 문제에서 출력층에 자주 쓰임
- input_shape: 입력 데이터의 형태를 정의
### 모델 훈련 및 성능 평가
model_with_conv.fit(X_train_final, y_train, epochs=5)
model_with_conv.evaluate(X_test_final, y_test, verbose=2)
참고: 서지영, 『딥러닝 텐서플로 교과서』, 길벗(2022)
'딥러닝_개념' 카테고리의 다른 글
합성곱 신경망_3.전이학습_2) 미세 조정 기법 (0) | 2023.01.04 |
---|---|
합성곱 신경망_3.전이학습_1) 특성 추출 기법 (0) | 2023.01.03 |
합성곱 신경망_1.CNN이란? (1) | 2022.12.27 |
텍스트 마이닝_ 1. BOW 기반의 텍스트 마이닝_4)로지스틱 회귀분석 (1) | 2022.12.26 |
텍스트 마이닝_ 1. BOW 기반의 텍스트 마이닝_3)나이브 베이즈 (0) | 2022.12.23 |