같은 차원의 입력(26 * 26 * 32)과 출력(64)이 주어졌을 때 깊이별 분리 합성곱 층(SeparableConv2D) 의 파라미터 수와 일반 Conv2D 층의 파라미터 수를 비교했다. 각각 2400개 18496개로 나왔다.

입력 텐서와 출력 텐서만 가지고 Model 객체를 만드는 것이 이해가 잘 안되지만 케라스가 알아서 해준다고 한다.

1D 컨브넷은 RNN보다 계산 속도가 빠르다는 장점이 있지만, 최근에 순서가 과거보다 더 중요한 시계열 데이터에서는 RNN을 사용하는 편이 더 낫다.

스태킹 순환 층은 단순하게 순환층을 중간에 더 쌓아 네트워크의 용량을 늘리는 방법(과대적합이 일어날 때까지 늘리는 것이 좋음)

 

5-2장 에서 이미지 데이터를 텐서화 해주는 전처리 작업과 데이터 증식 작업을 진행할 때 제너레이터를 사용 했었는데, 이번 장에서는 직접 제너레이터 함수를 정의하여 배치를 만드는 작업이 있어서 제너레이터 함수를 어떻게 쓸 수 있는지를 정리할 수 있었음

 

 

Embedding 층은 정수 인덱스 하나를 밀집 벡터로 매핑하는 딕셔너리로 이해할 수 있다.

층이 많은 일반 네트워크(피드포워드 네트워크)에서 그래디언트 소실 문제가 나타나는 것과 같이 SimpleRNN에서도 비슷한 문제가 일어나기 때문에 텍스트와 같이 긴 시퀀스를 처리하는데 적합하지 않음

 

이런 SimpleRNN의 단점을 개선한 순환 층이 LSTM 층이다. 

 

케라스 백엔드 라이브러리의 function 함수가 어떤 원리로 작동 되는지 이해하진 못했지만 입력과 출력을 정해주면 알아서 잘 해준다는 사실을 알았다.

컨브넷 필터 시각화와 히트맵 시각화 과정에서 백엔드 모듈을 사용하여 저수준의 연산 과정을 따라해봤는데, 모든 라인을 이해하는 것이 쉽지 않아서 더 연습해야 될 것 같다.

간단하게 정리하면 그래디언트가 큰 필터, 지역이 클래스를 결정하는데 더 많은 영향을 준다고 볼 수 있겠다.

 

책에서 하위층 상위층 표현이 자주 나오는데 입력이 아래쪽에서 위쪽으로 올라간다고 생각하면 되겠다.

 

 

층 파라미터 수가 어떻게 계산되는 것인지 직접 확인해 보았다.

파라미터 수 계산, 맥스 풀링

이미지 32개라는 표현보다는 32채널이라는 표현이 좋았을거 같다..

64번 반복이라고 썼는데 같은 과정을 반복한다는 의미로 쓴 것은 아니다.

두 번째 층에서 커널과 점곱해서 만들어진 32개의 행렬을 더한 값들에 편향값을 더한 것이 출력 특성맵이 된다.

이미지 데이터 증식에 사용되는 ImageDataGenerator 클래스

 

datagen.flow_from_directory() 

train_dir를 입력으로 받는데, 하위 디렉터리를 클래스마다 만들어주고 그 디렉터리마다 이미지 파일을 저장해주면

따로 레이블 array를 만들어주지 않아도 알아서 만들어준다.

 

책에는 fit_generator함수를 통해 모델을 제너레이터로 훈련할 수 있다고 했는데 텐서플로 2.3 버전에서 deprecated되어 fit함수로 사용할 수 있게 되었다고 한다. evaluate() 도 검증용 제너레이터 만들어서 넣어주면 된다.

 

모델을 훈련할 때 디렉터리를 정리하지 않고 datagen.flow() 를 사용한다면 레이블을 수동으로 만들어줘야 한다. 

 

 

 

+ Recent posts