구성
- 계층 (은닉층)
: L1 (784, 1024) + dropout 0.3
: L2 (512, 1024) + dropout 0.3
: L3 (512, 1024) + dropout 0.3
: L4 (512, 10)
- 활성화 함수
: ReLU
- 최적화 함수
: Adam
- Batch_size = 100
- Epochs = 15
# mnist 98%
import tensorflow as tf
import matplotlib.pyplot as plt
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train/255.0, x_test / 255.0
# define model
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28)),
tf.keras.layers.Dense(1024,activation='relu'),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Dense(1024,activation='relu'),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Dense(1024,activation='relu'),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Dense(512,activation='relu'),
tf.keras.layers.Dense(10,activation='softmax')
])
# model compile
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=["accuracy"])
model.summary()
# model fit
hist=model.fit(x_train, y_train,
validation_data=(x_test, y_test),
verbose=2, batch_size=100, epochs=15,
use_multiprocessing=True)
# model evaluate
model.evaluate(x_test, y_test,
verbose=2, batch_size=100, use_multiprocessing=True)
# Graph print
plt.figure(figsize=(8,4))
plt.subplot(1,2,1)
plt.plot(hist.history['loss'])
plt.title("Cost Graph")
plt.ylabel("cost")
plt.subplot(1,2,2)
plt.title("Accuracy Graph")
plt.ylabel("accuracy")
plt.plot(hist.history['accuracy'], 'b-', label="training accuracy")
plt.plot(hist.history['val_accuracy'], 'r:', label="validation accuracy")
plt.legend()
plt.tight_layout()
plt.show()
CNN (Convolution Neural Network)
- 특징 추출과 분류를 동시에 학습하는 신경망
: 입력데이터로 이미지 사용
- CNN의 계층
: Convolution Layer (의미있는 특징을 추출하는 계층)
: Pooling Layer (특징을 줄이기 위한 subsampling 수행)
: Feedforward Layer (분류를 위한 계층 - 신경망)
- Convolution Layer
: 입력된 이미지의 일부분을 잘라서 계산된 값을 입력 받는 계층
: width*height*depth로 구성
: filter를 이용하여 특징 추출
: output_size (특징을 추출한 이미지의 크기)
- Pooling Layer
: 여러개의 filter를 적용했을때 과하게 생성되는 가중치를 subsampling하여 줄이는 계층
: subsampling = 추출한 특징 중 값이 가장 큰 값을 고르는 방법 (max pooling)
구성
- Input Layer : 1개
- Convolution Layer
: 3개 (각 Layer마다 PoolingLayer 추가)
: dropout =0.3
- Fully-Connected Layer
: 2개
- Output Layer : 1개
import os
import tensorflow as tf
import matplotlib.pyplot as plt
os.environ['TF_CPP_MIN_LOOG_LEVEL'] = '3'
mnist = tf.keras.datasets.mnist
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()
X_train = X_train.reshape(-1, 28, 28, 1)
X_test = X_test.reshape(-1, 28, 28, 1)
X_train, X_test = X_train / 255.0, X_test / 255.0
# define model (Layer 정의)
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32,(3,3), padding='same', activation='relu', input_shape=(28,28,1)),
tf.keras.layers.MaxPooling2D((2,2), padding='same'),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Conv2D(64,(3,3), padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D((2,2), padding='same'),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Conv2D(128,(3,3), padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D((2,2), padding='same'),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(128, activation='softmax')
])
model.compile(optimizer='adam',
loss = 'sparse_categorical_crossentropy',
metrics=["accuracy"])
model.summary()
hist = model.fit(X_train, Y_train,validation_data=(X_test, Y_test),
verbose=2, batch_size=100, epochs=5, use_multiprocessing=True)
model.evaluate(X_test, Y_test, verbose=2, batch_size=100, epochs=5, use_multiprocessing=True)
# reporting
plt.figure(figsize=(8,4))
plt.subplot(1,2,1)
plt.plot(hist.history['loss'])
plt.title("Cost Graph")
plt.ylabel("cost")
plt.subplot(1,2,2)
plt.title("Accuracy Graph")
plt.ylabel("accuracy")
plt.plot(hist.history['accuracy'], 'b-', label="training accuracy")
plt.plot(hist.history['val_accuracy'], 'r:', label="validation accuracy")
plt.legend()
plt.tight_layout()
plt.show()
R-CNN
- 이미지 분류를 수행하는 CNN과 지역화를 위한 regional proposal을 연결한 모델
- 지역화 (localization)
: 이미지에서 object에 대한 위치를 구역으로 표시하는 것
- 과정
1. region proposal 모델에서 selective search를 통해
물체가 있을만한 영역 탐색
2. CNN 모델을 통해 특징벡터 생성 및 SVM을 활용한 분류 실행
3. bounding box regression model 수정
: localization 오류를 줄이기 위해 CNN을 이용하여 모델 수정
Fast R-CNN
- R-CNN의 학습 속도를 개선한 모델
Faster R-CNN
- Region proposal을 CNN으로 수행하여 속도를 더 개선한 모델
머신러닝의 주요 문제
- Classification
: 분류
- Object Detection
: 객체 탐지
- Image Segmentation
: 영상 분할
- Natural Language Processing
: 자연어 처리
딥러닝의 종류
- R-CNN
: 영역기반 물체인식
- RNN
: LSTM
: 번역기, 음성인식
- 강화학습
: 로봇 제어 등
- GAN
: 데이터 생성
'Computer Science > DeepLearning' 카테고리의 다른 글
초보 딥러닝 - DeepLearning과 학습 (0) | 2021.04.04 |
---|---|
초보 딥러닝 - 파이썬 기초 / 퍼셉트론 / 신경망 (0) | 2021.04.03 |
Tensorflow를 활용한 Neural Network 구현 (0) | 2020.12.16 |
머신러닝 기초 6 - 모델의 저장과 로딩 (0) | 2020.12.16 |
머신러닝 기초 5 - Classification (분류) (0) | 2020.12.16 |