각 Layer별 역할 개념 및 파라미터 파악
이미지를 불러왔으면 주저없이 shape부터 확인해보고는게 중요함
채널개수, 사이즈 파악이 중요
import tensorflow as tf
import matplotlib.pyplot as plt
%matplotlib inline
from tensorflow.keras import datasets
(train_x, train_y), (test_x, test_y) = datasets.mnist.load_data()
image = train_x[0]
image.shape
plt.imshow(image, 'gray')
plt.show()
image = image[tf.newaxis, ..., tf.newaxis]

CNN은
Feature Extraction과 Convolution 으로 나뉨
Feature Extraction에서는 예측하는 부분이 아닌
특징을 잡아내는 단계임
-
filter
필터의 개수만큼 아웃풋의 숫자가 변경되며, fillters =3 이므로 아웃풋은 3이 됨 -
kernel_size
커널사이즈는 주로 (3,3)으로 사용하며, weight의 사이즈 -
strides
몇개의 픽셀을 훝어나갈지를 정하며, 1보다크면 이미지가 압축됨 -
padding
same이면 zero-padding이 되어 CNN을 거쳐도 이미지 크기변화가 없음 -
activation
당장 설정안해도 진행이 가능하며, 따로 layer를 구성가능tf.keras.layers.Conv2d(filters = 3, kernel_size=(3,3), strides=(1,1), padding = 'SAME',activation = 'relu') # float32가 아니면 에러날 수 있기 때문에 변환 image = tf.cast(image, dtype = tf.float32) image.dtype # 시각화 plt.subplot(1,2,1) plt.imshow(image[0, :, :, 0],'gray') plt.subplot(1,2,2) plt.imshow(output[0, :, :, 0],'gray')
weight 확인
weight = layer.get_weights()
weight[0].shape, weight[1].shape
>>>((3, 3, 1, 5), (5,))
plt.figure(figsize=(15,5))
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()
relu
마이너스인 것들을 0으로 만들어줌
relu를 쓰기전에는 -295까지 있었으나, 모두 0으로 변환,
그 이상인 정보만 남아버림
np.min(output), np.max(output)
>>> (-295.75162, 175.13885)
act_layer = tf.keras.layers.ReLU()
act_output = act_layer(output)
np.min(act_output), np.max(act_output)
>>> (0.0, 175.13885)
# 시각화
plt.figure(figsize=(15,5))
plt.subplot(121)
plt.hist(act_output.numpy().ravel(),range = (-2,2))
plt.ylim(0,100)
plt.subplot(122)
plt.title(act_output.shape)
plt.imshow(act_output[0, :, :, 0], 'gray')
plt.show()

pooling(Maxpooling)
이미지를 압축하는 과정
보통 (2,2)를 자주 사용하며, 28X28 이미지를 14X14로 변환하게 됨
결과 이미지 크기가 변화햇고 relu를 사용한 것보다 더 값이 축소됨
pool_layer = tf.keras.layers.MaxPool2D(pool_size=(2,2), strides=(2,2),padding='same')
pool_output = pool_layer(act_output)
act_output.shape
>>> TensorShape([1, 28, 28, 5])
pool_output.shape
>>> TensorShape([1, 14, 14, 5])

후기
개인적으로 이론은 나중에 한다고 말씀하시면서 넘어가는게 은근히 별로..
중요한데 당장은 급하지 않으니 넘어간다는 형태라서
그냥 코드 따라해보는 정도의 역할만 하는 느낌이라서 아쉬움
'책&강의 학습 > 올인원 패키지 :딥러닝&인공지능' 카테고리의 다른 글
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 5회차 미션 (0) | 2020.07.03 |
|---|---|
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 4회차 미션 (0) | 2020.07.02 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 2회차 미션 (0) | 2020.06.30 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 1회차 미션 (0) | 2020.06.29 |
| 올인원패키지 환급미션 계획 (0) | 2020.06.28 |
댓글