이번에는 Tensorflow modeling을 하기 전에 layer을 각 층마다 보면서 어떻게 작동하는지를 tensorflow를 사용해서 볼 것입니다.
즉,
1. layer에 어떻게 data가 input되고,
2. 결과는 어떻게 output되는지 시각화를 진행해 보고
3. 어떻게 layer을 쌓는지
를 알아보도록 합니다.
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
%matplotlib inline
########여기는 이전에 했던 진행했던 코드들 입니다. #########
#데이터 불러오기
from tensorflow.keras import datasets
(X_train, y_train), (X_test, y_test) = datasets.mnist.load_data()
#X_train 데이터 살펴보기
X_train.shape
X_train[..., tf.newaxis]
image = X_train[0]
#y_train 데이터 살펴보기
label = y_train[0]
from tensorflow.keras.utils improt to_categorical
onehot_label = to_categorical(label)
#시각화
plt.title(onehot_label)
plt.imshow(image)
plt.show()
###################################
Layer들이 모인 model은 Feature Extraction과 Classification으로 나눌 수 있습니다.
우선 Feature Extraction에 대해서 알아보도록 하겠습니다.
1. Layer의 역할 개념 파악
1) 우선 Convolution layer 에 대해
keras의 layers에서 제공하는 것으로 tf.nn보다 더욱 간편하게 구현할 수 있습니다.
import tensorflow.keras.layers import Conv2D
Conv2D(filters = 3, kernel_size = (3, 3), strides = (1, 1), padding ='SAME', activation = 'relu')
#위의 코드를
Conv2D(3, 3, 1, 'SAME', 'relu')
#로 해도 동일합니다.
2) layer에 어떻게 data가 input되는지
를 알아보려고 합니다.
1. 데이터 타입 변환
우선 image data가 int이면 Model로 들어 갈 시, 에러가 발생하기 때문에 데이터 타입을 변환해 줍니다.
image = tf.cast(image, dtype = tf.float32)
2. layer을 생성
layer = Conv2D(3, 3, 1, padding = 'SAME')
3. layer에 input넣고, 결과로 output 나옴
output = layer(image)
3) 결과는 어떻게 output되는지 시각화를 진행
이때 모든 channel을 다 시각화 할 수 없으므로 2차원인 (height, width)만 시각화해줍니다.
#원본과 Conv2D layer의 output 결과와 비교
plt.subplot(1, 2, 1)
plt.imshow(image[0, :, : 0], 'gray')
plt.subplot(1, 2, 2)
plt.imshow(output[0, :, :, 0], 'gray')
2. Feature activation Layer의 파라미터 파악
1) Convolution layer의 Weight 보기
.get_weights() 를 사용하면 해당 layer의 weight를 리스트로 받게 되고, 알 수 있습니다.
weight = layer.get_weights()
weight
weight[0].shape #이건 weight의 shape이고,
weight[1].shape #이건 bias의 shape 입니다.
#이를 시각화해서 보면
plt.figure(figsize = (15, 5))
plt.subplot(1, 3, 1)
#output 결과값을 히스토그램을 통해 보려면 .numpy().ravel()을 이용해서 일렬로 쭉 핀 후 시각화를 진행합니다.
plt.hist(output.numpy().ravel(), range = [-2, 2])
plt.ylim(0, 100)
#weight값을 시각화
plt.subplot(1, 3, 2)
plt.imshow(weight[0][0, :, :, 0], 'gray')
#output 이미지를 시각화
plt.subplot(1, 3, 3)
plt.imshow(output[0, :, :, 0], 'gray')
plt.colorbar()
plt.show()
3. Activation Function
1) ReLU 함수를 적용시킨다고 한다면,
tf.keras.layers.ReLU()
act_layer = tf.keras.layers.ReLU()
act_output = act_layer(output)
#결과를 시각화 해보면
plt.figure(figsize = (10, 5))
plt.subplot(2, 1, 1)
plt.hist(act_output.numpy().ravel())
plt.subplot(2, 1, 2)
plt.imshow(act_output[:, :100], 'jet')
plt.show()
4. Dense (Fully Connected)
from tensorflow.keras.layers import Dense
layer = Dense(32, activation = 'relu') # 몇 개를 input을 받은 걸 32개로 연결하여 output 할 것 이다 라는 의미입니다.
output = layer(act_output)
'Data Science > Tensorflow2.0, Pytorch' 카테고리의 다른 글
6. Tensorflow2.0 Optimization & Training (Beginner) (0) | 2020.03.25 |
---|---|
5. Tensorflow2.0 Build Model (0) | 2020.03.25 |
3. Tensorflow2.0 (y_train) Data Preprocess (using MNIST) (0) | 2020.03.25 |
2. Tensorflow2.0 (X_train) Data Preprocess (using MNIST) (0) | 2020.03.25 |
1. Tensorflow 2.0 기초 사용법 (0) | 2020.03.25 |