Deep Learning 33

EfficientNet - Network 구조 및 구현

💡Network (아키텍처 구조) EfficientNet Network는 메인으로 mobile inverted bottleneck convolution(MBConv) block을 사용한다. MBConv block Depthwise separable conv와 Squeeze-and-excitation(se) 개념을 적용한 방식이다. 📝 https://github.com/qubvel/efficientnet GitHub - qubvel/efficientnet: Implementation of EfficientNet model. Keras and TensorFlow Keras. Implementation of EfficientNet model. Keras and TensorFlow Keras. - GitHub ..

ResNet - Network 구조 및 구현

💡Network ResNet은 Residual neural network의 줄임말이며, 잔차(residual)과 관련이 있다. Resnet을 사용하면 레이어의 인풋이 다른 레이어로 곧바로 건너 뛰는 short cut을 구성하고 있으며, 딥러닝 모델의 레이어를 깊이 쌓으면 발생하는 문제를 해결하기 위해, 잔차 함수 개념을 적용 하였으며, Resnet을 기반으로 이후에 나온 많은 모델들의 기반이 된 딥러닝 CNN 모델이다. 👉 특징 Resnet의 주요 특징은 short cut과 identity block을 구성이다. 아래 사진처럼 resnet 이전에는 output값 그대로 다음 노드의 input으로 입력 했지만, short cut 방식은 이전 layer output값을 conv layer로 거치지 않고 그대..

VGGNet16 - Network 구조 및 구현

💡Network Learing Rate는 Gradient의 보폭을 말한다. Deep Learning Network이 확률적 경사 하강법(SGD) 최적화 알고리즘을 사용하여 훈련 하는 데, 사용되는 파라미터이다. Learing Rate는 성능에 꽤 큰 영향을 주는 파라미터이며, 학습되는 모델의 weight의 최적값을 어떻게 찾아 나갈 지 보폭을 정한다. (hyper param) ▶ Hyper Parameter는 user가 직접 셋팅 할 수 있는 값이며, knn or lr rate 등.. 👉 특징 Network Depth와 성능 영향에 집중을 위해 등장 하였으며, Kernel Size가 크면 Image Size 축소가 급격하게 이뤄져서 더 깊은 층을 만들기 어려우며, Parameter 수와 많은 연산량도 필..

[DL] R-CNN (22/03/22 수정 ing...)

✍ 제가 직접 논문 전체를 해석 할 능력이 안 되서,,,논문 정리가 잘 되어 있는 다수의 블로그들을 보고 공부하여 내용 정리 및 코드 구현을 해보려고 합니다. ✍ R-CNN 논문 Rich feature hierarchies for accurate object detection and semantic segmentation Tech report (v5) https://arxiv.org/pdf/1311.2524.pdf 👉 논문 정리 12년 Image Classification Challenge에서 AlexNet이 큰 성공을 하게 되며, Object Detection에도 CNN이 적용 된 모델을 연구하게 되는데, 그 첫 번째 결과물이 R-CNN이다. R-CNN은 region Proposals와 CNN을 결합한..

#7, CNN 시각화 작업

CNN 시각화하기 CNN을 구성하는 합성곱 계층은 입력으로 받은 이미지 데이터에서 무엇을 보고 있는지 알아보도록 하겠습니다. 1. 1번째 층의 가중치 시각화하기 이전에 MNIST 데이터셋으로 간단한 CNN 학습을 해보았는데, 그때 1번째 층의 합성곱 계층의 가중치는 그 형상이 (30, 1, 5, 5)였습니다.(필터 30개, 채널 1개, 5 X 5 크기). 필터의 크기가 5X5이고 채널이 1개라는 것은 이 필터를 1채널의 회색조 이미지로 시각화할 수 있다는 뜻입니다. 그럼 합성곱 계층(1층) 필터를 이미지로 나타내보겠습니다. 학습 전과 후의 1번째 층의 합성곱 계층의 가중치 학습 전 필터는 무작위로 초기화되고 있어 흑백의 정도에 규칙성이 없습니다. 한편, 학습을 마친 필터는 규칙성이 있는 이미지화 되었습니..

#7, CNN 구현

CNN 구현하기 합성곱 계층과 풀링 계층을 구현했으니, 이 계층들을 조합하여 손글씨 숫자를 인식하는 CNN을 조립해보겠습니다. 여기에서는 다음과 같은 CNN을 구현합니다. "Convolution - ReLU - Pooling - Affine - ReLU - Affine - Softmax' 우선 SimpleConvNet 초기화 코드 먼저 구현하겠습니다. class SimpleConvNet: def __init__(self, input_dim = (1, 28, 28) conv_param={'filter_num':30, 'filter_size':5, 'pad':0, 'stride':1}, hidden_size=100, output_size=10, weight_init_std=0.01): filter_num =..

DL - #7, Pooling 계층 구현

풀링 계층 구현하기 풀링 계층 구현도 합성곱 계층과 마찬가지로 im2col을 사용해 입력 데이터를 전개합니다. 단, 풀링의 경우엔 채널 쪽이 독립적이라는 점이 합성곱 계층 때와 다릅니다. 구체적으로는 아래 그림과 같이 풀링 적용 영역을 채널마다 독립적으로 계산합니다. 입력 데이터에 풀링 적용 영역을 전개 (2 X 2 풀링의 예) 일단 이렇게 전개한 후, 전개한 행렬에서 행별 최댓값을 구하고 적절한 형상으로 성형하기만 하면 됩니다. 풀링 계층 구현의 흐름 : 풀링 적용 영역에서 가장 큰 원소는 회색으로 표시 이상이 풀링 계층의 forward 처리 흐름입니다. 풀링 계층 구현은 아래와 같이 세 단계로 진행합니다. 1. 입력 데이터를 전개한다. 2. 행별 최댓값을 구한다. 3. 적절한 모양으로 성형한다.

DL - #7, CNN 계층 구현

합성곱 계층 구현하기 im2col 함수는 '필터 크기', '스트라이드'. '패딩'을 고려하여 입력 데이터를 2차원 배열로 전개합니다. x1 = np.random.rand(1, 3, 7, 7) # 데이터 수, 채널 수, 높이, 너비 col1 = im2col(x1, 5, 5, stride=1, pad=0) print(col1.shape) # (9, 75) x2 = np.random.rand(10, 3, 7, 7) # 데이터 10개 col2 = im2col(x2, 5, 5, stride=1, pad=0) print(col2.shape) # (90, 75) → 배치 크기가 1(데이터 1개), 채널은 3개, 높이 너비가 7 X 7의 데이터이고, → 배치 크기만 10이고 나머지는 첫 번째와 같습니다. im2col ..

DL - #6, 적절한 하이퍼 파라미터 설정

▶ 하이퍼파라미터 (HyperParameter) 모델 파라미터 : 머신러닝 모델이 학습하는 파라미터 파라미터(매개변수) : 학습 과정에서 생성되는 변수 하이퍼파라미터 : 머신러닝 모델이 학습할 수 없어서 사용자가 지정해야만 하는 파라미터 → 각 층의 뉴런 수, 배치 사이즈, 매개변수 갱신 시의 학습률과 가중치 감소 등.. 가장 우수한 성능을 보이는 모델의 하이퍼파라미터를 선정하기 위해 그리드 서치(Grid Search) 사용 ▶ 검증 Data Set 데이터 세트를 훈련 - 검증 - 테스트 세트로 나누어 훈련 또는 테스트 세트에 과적합한 모델이 될 가능성능 낮출 수 있음 (60 / 20 / 20%) 하이퍼파라미터의 성능을 평가 할 때, 시험 데이터 셋을 이용하면 안된다. → 시험 데이터로 하이퍼파라미터 튜..

DL - #6, Batch Normalization

▶ Batch Normalization 신경망의 각 층의 활성화값을 고루 분포하게 하기 위해 나온 기법 학습 속도가 개선된다 (학습률을 높게 설정할 수 있기 때문) 가중치 초깃값 선택의 의존성이 적어진다 (학습을 할 때마다 출력값을 정규화하기 때문) 과적합(overfitting) 위험을 줄일 수 있다 (드롭아웃 같은 기법 대체 가능) Gradient Vanishing 문제 해결 ▶ 일반화 오류 일반화(generalization)란 훈련 데이터가 아닌 새로운 데이터에 대해 모델이 예측을 얼마나 잘 하는지를 의미합니다. 모델의 성능이 좋다는 말은 일반화가 잘 되었다는 것을 의미합니다. 모델의 train 성능과 validation/test 성능의 차이를 일반화 오류(generalization error)라고 ..