딥러닝은 y = Wx + b에서 최적의 W(Weight)과 b를 찾는 과정!
이 때 신경망의 종류(?)마다 다른 Weight의 특성을 갖고 있고, 그래서 올바른 Weight을 정의하는 과정이 중요하다.
딥러닝을 이해하는 좋은 방법 중 하나는 데이터의 변화를 좇는 것
이다.
신경망의 Weight이라 표현하지만, 사실 layer
마다의 weight
이다.
Fully Connected Layer, Feedforward Neural Network, Multilayer Perceptrons, Dense Layer... 다 선형레이어를 치징하는 말임
linear 레이어는 선형변환을 통해 데이터를 특정 차원으로 옮긴다.
참고로 python code에서 레이어를 생성하고 call하면서 무언가 input을 넣었다면, 해당 레이어에 다시 인풋을 넣으려니까 뭔가 오류가 생긴다.(한번 쓴 레이어는 또 쓰는 건 아닌가 보다)
tensorflow에서는 선형변환 후 차원을 유지한다.
Dense(units=1)
에 input으로 넣어도 (64, 4, 1)
같이 끝 부분만 1로 줄어들게 되는데tf.squeeze(axis=-1) >>> (64, 4)
를해서 불필요한 차원을 줄여준다.tf.squeeze( (64, 4,)행렬 ) >>> (64, 4)행렬
) Flatten()
은 그럼 전체를 다 펴주나 해봤는데,Flatten()
은 차원을 유지하진 않지만, 전체 다 펴주지는 않는다.(64, 4, 2)
를 Flatten()
에 넣으면 (64, 8)
로 바꿔준다.Flatten()
을 해도 1차원으로 되지 않는다...((64,8) -> (64, 8)로 계속 나옴)
tf.keras.Layers.layer.count_params()
선형변환에서...
출처 : 아이펠
데이터 차원을 늘리는 선형변환 후 줄여감
bias(편향)
shape
은 (선형변환 후 결과의 차원, )
이 된다.필터
라고 불리는 이유가 있는 것 같다.필터
역할을 할 수 있는 것이다.convolution하면 그래도 정보 손실 아닐까...?
이것을 인코더(Conv->MaxPooling....Conv->MaxPooling), 디코더(Conv -> UpSampling -> Conv -> UpSampling)해서 동일한 사이즈로 회복시켰을 때 어떤지 확인해볼 수 있다.
UpSampling의 방법은 크게 3가지가 있다.
수학적 역연산이 실행되는 제대로된 deconvolution을 하려면
Transposed convolution
을 해야 한다.Flatten()
은 공간 구조를 없애버림.