Dense Layer
딥러닝 실습을 하다보면 모델 마지막에 Dense Layer라는 레이어층이 있는 것을 볼 수 있다.
이녀석은 뭐하는 녀석이길래 딥러닝 모델마다 빠지지 않고 들어가는걸까?
한번 알아보도록 하자.

Dense 레이어란 Fully Cunnected Layer, 완전 연결 계층을 말한다.
완전 연결 계층이란 한 층의 모든 뉴런이 그 다음 층의 모든 뉴런과 연결되어 있는 계층으로
머신러닝에서 가장 기본이 되는 층이라고 할 수 있다.
완전 연결 계층, Fully connected layer
(JY) Keras 사용해보기 1. What is keras? 케라스(Keras)는 텐서플로우 라이버러리 중 하나로, 딥러닝 모델 설계와 훈련을 위한 고수준 API이다. 사용자 친화적이고 모델의 구성이 쉽기 때문에 기본 이미지
dsbook.tistory.com
model=keras.models.Sequential()
model.add(keras.layers.Conv2D(100,(3,3), activation='relu', input_shape=(28,28,3)))
model.add(keras.layers.MaxPool2D(2,2))
model.add(keras.layers.Conv2D(32,(3,3), activation='relu'))
model.add(keras.layers.MaxPooling2D((2,2)))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(32, activation='relu'))
model.add(keras.layers.Dense(3, activation='softmax'))
딥러닝 실습때 사용했던 간단한 머신러닝 모델의 코드이다.
Conv2D(합성곱 신경망), MaxPool2D(맥스풀링) 등 이제는 익숙한 코드들이 보인다.
머신러닝 모델은 이러한 레이어들이 쌓여서 만들어진다.
그런데 Dense 층은 어째서 주로 마지막에 위치하는 것일까?
그 이유는 Fully Connected layer의 단점에 있다.
이미지 분석 모델에서 Fully Connected layer는 모든 픽셀을 하나하나 연결하느라 정작 픽셀들의 관계는 고려하지 못하게 된다, 이미지가 고해상도가 될수록 학습시간이 엄청나게 늘어나는건 덤이다.
때문에 Maxpool2D같은 레이어를 사용해서 이미지에서 쓸데없는 정보는 쳐내고 픽셀간의 관계도 같은 중요 정보만 걸러내서 Dense Layer로 넘겨줘야 한다.


그리고 Dense Layer 앞에는 항상 Flatten이라는 과정이 따른다.
Dense는 1차원 데이터만을 요구하는데, 위와같은 이미지들은 2차원형태의 배열이기 때문에
1차원 데이터로 Flatten 해주는 과정이 필요한 것이다.

마지막으로 Dense는 활성화 함수를 통해서 다음 노드에 값을 전달한다.
활성화 함수에 대해서는 나중에 따로 알아보도록 하고 위 코드블럭에서 activation='relu' <- 요게 활성화 함수라는 것만 알고 있자.
Dense Layer에서 최종 Output은 일반적으로 softmax와 sigmoid를 쓴다고 하는데
softmax 함수는 다중 분류 문제에 쓰이고
ex) 사진이 가위바위보 3중 하나일 때, 이 사진이 가위일 확률0.2 보 0.1 바위 0.7...
확률의 모든 합을 합하면 1이 되는 것이 특징이다.

sigmoid 함수는 요렇게 생겼는데 값을 0에서 1사이의 값으로 바꿔서 출력해준다
이진 분류 문제(어떤 값이 참인지 거짓인지...)에서 사용된다.
Tensorflow 2.0 - 각 Layer별 역할 개념 및 파라미터 파악
Layer Explaination Input Image input으로 들어갈 DataSet을 들여다보면서 시각화까지 CNN, Convolutional Neural Network 이란 무엇일까? 다음의 그림은 CNN의 과정을 잘 나타내는 그림이다. CNN은 Convolution..
jeongminhee99.tistory.com
이상으로 Dense 레이어에 대해서 알아보았고
위 블로그에서 각 레이어의 역할과 순서에 대해서 잘 설명해주었으니 참고하면 좋을것같다