페이지

2022년 7월 23일 토요일

3.1.1 층: 딥러닝의 구성 단위

 신경망의 핵심적인 데이터 구조는 2장에서 소개한 층입니다. 층은 하나 이상의 텐서를 입력으로 받아 하나 이상의 텐서를 출력하는 데이터 처리 모듈입니다. 어떤 종류의 층은 상태가 없지만 대부분의 경우 가중치라는 층의 상태를 가집니다. 가중치는 확률적 경사 하강버버에 의해 학습되는 하나 이상의 텐서이며 여기에 네트워크가 학습한 지식이 담겨 있습니다.

층마다 적절한 텐서 포맷과 데이터 처리 방식이 다릅니다. 예를 들어 (samples, features)크기의 2D 텐서가 저장된 간단한 벡터 데이터는 완전 연결 층(fully connected layer)이나 밀집 층(clense layer)이라고도 불리는 밀집 연결 층(densely connected layer)에 의해 처리되는 경우가 많습니다(케라스에서는 Dense클래스입니다). (samples, timesteps, features) 크기의 3D 텐서로 저장된 시퀸스 데이터는 보통 LSTM 같은 순환 층(recurrent layer)에 의해 처리됩니다. 4D 텐서로 저장되어 있는 이미지 데이터는 일반적으로 2D 합성곱 층(convolution layer)에 의해 처리됩니다(conv2D클래스). 층을 딥러닝의 레고 블록처럼 생각할 수 있습니다. 이런 비유는 케라스 같은 프레임워크 때문에 생겼습니다. 케라스에서는 호환 가능한 충들을 엮어 데이터 변환 파이프라인(pipeline)을 구성함으로써 딥러닝 모델을 만듭니다. 여기에는 층 호환성(layer compatibility)은 각 층의 특정 크기의 입력 텐서만 받고 특정 크기의 출력 텐서를 반환한다는 사실을 말합니다. 다음 예를 살펴보죠.

from keras import layers

layer = layers.Dense(32, input_shape=(784,))  ..... 32개의 유닛으로 된 밀집 층

첫 번째 차원이 784인 2D 텐서만 입력으로 받는 층을 만들었습니다(배치 차원인 0번째 축은 지정하지 않기 때문에 어떤 배치 크기도 입력으로 받을 수 있습니다). 이 층은 첫 번째 차원 크기가 32로 변환된 텐서를 출력할 것입니다.

따라서 이 층에서는 32차원의 벡터를 입력으로 받는 하위 층이 연결되어야 합니다. 케라스에는 모델에 추가된 층을 자동으로 상위 층의 크기에 맞추어 주기 때문에 호환성을 걱정하지 않아도 됩니다. 예를 들어 다음과 같이 작성했다고 가정합시다.

from keras import models

from keras import layers


model = model.Sequential()

model.add(layers.Dense(32, input_shape=(784, )))

model.add(layers.Dense(10))

두 번째 층에는 input_shape 매개변수를 지정하지 ㅇ낳았습니다. 그 대신 앞선 층의 출력 크기를 입력 크기로 자동으로 채택합니다.


댓글 없음: