Deep Learning & AI/AI

Tensorflow2.0 각 Layer별 역활 개념 및 파라미터 파악

MINSU KANG 2021. 2. 27. 23:21

참고) 해당 포스팅은 패스트 캠퍼스 100% 환급 챌린지 미션 기록용 포스팅이며, 강좌 내용에 맞추어 포스팅함을 언급

 

클립명 : PART2)TensorFlow 2.0과 Pytorch 프레임워크 기초

           04. TensorFlow2.0 - 각 Layer별 역활 개념 및 파라미터 파악 - 1 05. TensorFlow2.0 각 - Layer별 역활 개념 및 파라미터 파악 - 2 06. TensorFlow2.0 각 - Layer별 역활 개념 및 파라미터 파악 - 3

 

CNN 알고리즘 구조 및 설명

이번 포스팅에서는 CNN 알고리즘의 절차? 라고 해야될까.... 암튼, 절차의 대해서 알아보기로 한다. 해당 절차의 대한 코딩은 아래쪽에 참고하길 바란다. 우선 CNN 알고리즘이 무엇인지는 지난 포스팅에서 언급을 했다. 이번 강의를 통해서 CNN 알고리즘의 해당 되는 부분들을 코드로 구현해보니 내가 지금 어떠한 상황을 배우고 있는지 파악이 되었고, 처음에는 이해가 안가 강의 중간마다 생각을 했지만, 지금은 어느정도 체계가 잡힌것 같아 글을 적는다.

우선 CNN 알고리즘은 크게 두가지 분류로 나뉜다. 첫번째: Feature Extraction와 두번째 : Classification으로 나뉜다. 그리고 알고리즘을 설명하기에 앞서 가장 중요한 것은 하나의 이미지 데이터가 첫번째 과정에서부터 들어와 해당 이미지가 무엇인지를 결과론적으로 학습이 되는거지 절대 여러 이미지들이 한꺼번에 들어와서 여러 layer을 지나 학습을 하는 것이 아니다. 처음에 그림만으로 봤을때는 여러개의 숫자가 동시다발적으로 들어와 학습후 여러 이미지에 대해 동시에 결과를 출력하는줄 알았지만 그런 것이 아니다. 하나의 이미지를 진행한다고 파악하면 된다.

첫번째 과정은 Feature Extraction으로 1x28x28x1(첫번째 이미지 1, 가로 28, 세로 28, 색깔 1)의 데이터를 input으로 받아 해당 이미지의 특성을 찾아내는 과정이라고 파악하면 된다. 위의 그림처럼 '3'이라는 이미지의 데이터를 받으면, 3의 특성 부분(Feature)을 찾고(Convolution) 그것마저 줄여서 2번째 과정에서 학습할 수 있는 새로운 Input Data를 만든다고 파악하면 된다. 즉, 첫번째 과정은 이미지 데이터를 받고 해당 이미지의 대표적인 특징값을 찾아낸다고 보면 된다.

두번째 과정은 Classification으로 첫번째 과정에서 찾은 특성들을 여러 Dense를 통해 학습하고, 학습한 결과를 가지고 해당 이미지가 무엇인지 최종적으로 산출하는 과정이라고 파악하면 된다. 

 

Fully Classification 설명

즉, 위의 이미지에서 input layer에 첫번째 과정에서 학습한 특징들이 들어가고, hidden layer1 -> 2 -> 3을 거쳐 output layer에서 해당 값이 무엇인지 확률값으로 산출한다고 파악하면 된다(결과의 대해서는 다음 포스팅에서 셜명)

따라서 최종적으로 3이라는 이미지를 input값으로 받아 해당 이미지가 3인지를 결과물로 보여준다고 생각하면 된다. 이렇게 학습을 시키고, 새로운 이미지가 들어오면, 학습한 결과를 거쳐 해당 이미지가 3인지 아닌지를 파악하게 되는 것이다. 즉, 내가 여태까지 생각했던 머신러닝의 모습들.... 데이터를 받아 모델의 맞게 학습하고 파라미터를 업데이트 하며, 해당 모델을 근거로 데이터값을 파악하는 것들은 두번째 과정에서 이루어 진다고보면 된다.

첫번째 과정에서 결괄를 뽑아내는 과정 및 과정결과

 

 


import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras import datasets
import numpy as np

(train_x, train_y), (test_x, test_y) = datasets.mnist.load_data()

image = train_x[0]
image.shape
image = image[tf.newaxis,...,tf.newaxis] # 28x28 -> 1x28x28x1로 변환

tf.keras.layers.Conv2D(filters = 3, kernel_size = (3,3), strides=(1,1), padding='SAME', activation='relu')

image = tf.cast(image, dtype=tf.float32)
image.dtype

layer = tf.keras.layers.Conv2D(3,3,1,padding = 'SAME')
output = layer(image)

plt.imshow(output[0,:,:,0], 'gray')
plt.show()

np.min(image), np.max(image)
np.min(output), np.max(output)

# 5강

weight = layer.get_weights()
weight[0].shape, weight[1].shape

plt.figure(figsize = (15,6))
plt.subplot(131)
plt.hist(output.numpy().ravel(), range=[-2,2])
plt.ylim(0,100)
plt.subplot(132)
plt.title(weight[0].shape)
plt.imshow(weight[0][:,:,0,0], 'gray')
plt.subplot(133)
plt.title(output.shape)
plt.imshow(output[0,:,:,0], 'gray')
plt.colorbar()
plt.show()

# Activative Function

tf.keras.layers.ReLU() # 0미만의 값들은 다 없애버리는 함수
act_layer = tf.keras.layers.ReLU()
act_output = act_layer(output)

# Pooling

tf.keras.layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding="SAME")
pool_layer = tf.keras.layers.MaxPool2D(pool_size = (2,2), strides = (2,2), padding = "SAME")
pool_output = pool_layer(act_output)
act_output.shape
pool_output.shape

plt.figure(figsize = (15,5))
plt.subplot(121)
plt.hist(pool_output.numpy().ravel(), range=[-2,2])
plt.ylim(0,100)
plt.subplot(122)
plt.title(pool_output.shape)
plt.imshow(pool_output[0,:,:,0], 'gray')
plt.colorbar()
plt.show()

# Flatten
tf.keras.layers.Flatten()
layer = tf.keras.layers.Flatten()
output.shape
flatten = layer(output)
flatten.shape

# Dense
tf.keras.layers.Dense(32, activation = 'relu')

layer = tf.keras.layers.Dense(32, activation = 'relu')
output = layer(flatten)
output.shape

(글자수 : 총 1320자 및 Code포함 2000자 이상)

강의 소개 링크 : bit.ly/3cx6kMd

 

딥러닝/인공지능 올인원 패키지 Online. | 패스트캠퍼스

Tensorflow2.0부터 Pytorch까지 딥러닝 대표 프레임워크를 정복하기. 생활 깊숙이 침투한 인공지능, 그 중심엔 딥러닝이 있습니다. 가장 강력한 머신러닝의 툴로서 주목받는 딥러닝은 생각보다 어려

www.fastcampus.co.kr