320x100
320x100

구성

- 계층 (은닉층)

 : 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()


정확도 98% 달성

 

 

 

 

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()

그래프 출력 부분은 epochs 관련 오류가 발생하여 생략

 

 

 

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

 : 데이터 생성

 

300x250
728x90