본문 바로가기
책&강의 학습/올인원 패키지 :딥러닝&인공지능

[패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 3회차 미션

by 소한보 2020. 7. 1.

각 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])

후기

개인적으로 이론은 나중에 한다고 말씀하시면서 넘어가는게 은근히 별로..
중요한데 당장은 급하지 않으니 넘어간다는 형태라서
그냥 코드 따라해보는 정도의 역할만 하는 느낌이라서 아쉬움

딥러닝/인공지능 올인원 패키지 Online

댓글