안녕하세요
27년차 진로탐색꾼 조녁입니다!
오늘은 텐서플로우 자격증 과정 첫번째 강좌인
'Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning'
3주차 강의(Enhancing Vision with Convolutional Neural Networks) 및 자료를 공부했습니다.
생각보다 속도가 안나고 있지만 그래도 하나하나 차근씩 스스로 해결해나가는 것에 의의를 두고 있습니다.
첫번째 영상, A conversation with Andrew Ng
몇줄의 코드로 DNN을 구현한 너네가 멋지고 앞으로 배울 CNN은 더 나은 분류기를 만들어줄거라고 함.
두번째 영상, What are convolutions and pooling?
CNN은 우리가 분류할 이미지에서 낭비되는 부분들을 줄이기 위한 방법이다. 위 사진에서도 빨간 박스와 같이 픽셀에 가중치를 주는 필터를 써서 특정 부분들이 더 부각되도록 한다. 이 필터는 Pooling과 함께할 때 효과가 극대화 되는데 아래 사진을 보라.
위와 같이 16픽셀을 4픽셀로 줄이면서도, 가장 큰 값의 픽셀을 남김으로써 손실을 최소화하며 압축했다. (pooling을 같이 사용한 경우)
세번째 읽기자료, Coding convolutions and pooling layers
Conv2D 와 MaxPool2D 레이어에 대한 텐서 사이트 주소 알려줌. (참고)
www.tensorflow.org/api_docs/python/tf/keras/layers/Conv2D
www.tensorflow.org/api_docs/python/tf/keras/layers/MaxPool2D
네번째 영상, Implementing convolutional layers
우리가 DNN을 설계할 때 사용한 코드와 CNN을 설계할 때의 코드 비교해 보라.
DNN
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activaiton=tf.nn.relu),
tf.keras.layers.Dense(10, activaiton=tf.nn.softmax)])
CNN
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(63, (3,3), activation='relu', input_shape=(28,28,1)),
tf.keras.layers.Maxpooling2D(2,2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.Maxpooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activaiton='relu'),
tf.keras.layers.Dense(10, activaiton='softmax')])
위 DNN 과 CNN을 비교했을 때 마지막 3줄은 동일함을 알 수 있다. 다만 모델 도입부에 Conv & pooling layer 가 추가되었다.
다섯번째 읽기자료, Learn more about convolutions
유튜브를 추천해주셨다. 이동시간에 짧게 보기 좋을 듯.https://bit.ly/2UGa7uH.
여섯번째 영상, Implementing pooling layers
아래 코드로 모델의 layer 마다 이미지가 어떻게 변하는 지 볼 수 있다.
model.summary()
여기서 conv layer를 지날때는 shape이 x,y 각각 2씩 줄어드는 것을 볼 수 있는데 이것은 3*3 필터를 쓰기 때문이다.
아래 그림은 5*5 이미지에 3*3 필터를 씌웠을 때의 예시인데, 가로나 세로 둘다 필터가 3번밖에 못들어가서 image는 3*3으로 압축된다.
여덟번째 영상, Improving the Fashion classfier with convolutions
컨볼루션은 필터를 통해, 이미지의 크기를 압축하면서도 특징을 효과적으로 추출할 수 있다. 또한 풀링은 정보를 압축해 쉽게 관리할 수 있도록 한다. 이 방법들은 이미지 인식 성능 향상에 정말 좋다. 각 이미지별 적절한 필터가 있다. 컨볼루션 넘버를 바꿀 떄마다 세로,가로축을 강조하거나 생상을 강조하는 등 기능이 다르다. 이제 직접 해보라고 하셨다.
아홉번째 읽기자료, Try it for yourself
연습할 노트북을 제공하며 colab의 런타임 유형을 GPU로 바꾸라고함. 이 코드를 가지고 최소 한시간은 공부해라. 그리고 다음 강의로 넘어가서 코드를 살펴보고 작동방식을 시각화하는 conv를 직접 구축하라고 하심.
gist.github.com/jonhyuk0922/72bb436898fb6ddb4b36381179bd3fc8#file-course-1-cnn-fashion-mnist-ipynb
CNN 예제 연습하며 배운점
1. 'overfitting'(과대적합) : train set에 대해 필요 이상 학습함으로 일정 부분에 대해서만 전문화되어 결과적으로 다른 데이터를 보는데 덜 효율적이게 되는 것
2. DNN과 달리 데이터 수집할 때, shape 재구성 해줘야함. eg) 60,000장의 28*28*1 항목 대신 60,000*28*28*1의 단일 4D 목록으로 변경해줘야함. test셋도 해줘야함! 이렇게 재구성 안해주면 컨볼루션이 인식 못함.
training_images=training_images.reshape(60000, 28, 28, 1)
test_images = test_images.reshape(10000, 28, 28, 1)
3. 컨볼루션+풀링 한개할 때보다 두번 연속할 때 더 높은 정확도 나온다. 컨볼루션 층 설정할 때 랜덤 인수를 16,32,64 바꿔봐도 정확도는 비슷했다.
열번째 영상, Walking through convolutions
필터 종류별로 다르게 작용함을 알려줌.
열한번째 읽기자료, Experiment with filters and pools
연습해보라고 colab 주고 필터 바꿔보라고함.
gist.github.com/jonhyuk0922/c761cd7b06127a7d61ddc5c9d900d972#file-course-1-various-conv-filter-ipynb
그리고 이 사이트에서 새로운 필터 찾아서 해보라고도 함. lodev.org/cgtutor/filtering.html
이후 퀴즈를 풀었고 내용은 수업안에서 다 나왔습니다. 컨볼루션이 뭔지, 풀링이 뭔 지, 어떤 기능을 하는 지 .. 중요한 건 CNN이 DNN 보다 학습이 오래걸리지만 효과적이라는 것과 , 오버피팅이 존재하기때문에 callback 을 써서 멈춰주면 좋다는 것입니다.
아, 매 주차마다 마지막에 과제가 있는데 중간중간 읽기자료로 제공하는 Colab 연습만 한다면 충분히 풀 수 있습니다. 다만, 쥬피터랑 colab 간 버젼 차이가 있어서 간혹 에러가 발생하는데 해당 부분은 발견할 때마다 정리해 놓겠습니다!!
과제 : CNN으로 fashion MNIST 99.8% 분류하기
꼭 reshape 해줘야함
'머신러닝 & 딥러닝 공부 > Tensorflow' 카테고리의 다른 글
[Tensorflow dev 자격증] Using Real-world Images (0) | 2021.02.09 |
---|---|
[Tensorflow 오류해결] TypeError: '>' not supported between instances of 'NoneType' and 'float' (0) | 2021.02.04 |
[Tensorflow 오류해결] No module named 'tensorflow.python.keras.engine.base_layer v1 (0) | 2021.02.02 |
[Tensorflow dev 자격증] Introduction to Computer Vision (0) | 2021.02.02 |
[Tensorflow dev 자격증] A New Programming Paradigm (0) | 2021.02.01 |