AIVLE School DX 3기

[에이블스쿨 8주차] 딥러닝4

김보통김보름 2023. 3. 23. 12:33
728x90
반응형

 

더보기

🤔히든레이어가 많으면 무조건 좋나요?

아니요!
히든레이어(은닉층)가 많다고 해서 성능이 무조건 개선되는 것은 아닙니다. 오히려 성능이 떨어질 수 있도 있어요.

 

🍯꿀팁

Colab에서 Ctrl + h 를하면 잘못 적은 텍스트를 전체 바꿀 수 있다

 


👍적절한 모델

적절한 복잡도 → 적절한 예측력
모델의 복잡도 : 학습용 데이터의 패턴을 반영하는 정도

 

⛔Early Stopping

  • 반복횟수(epch)가 많으면 과적합 될 수 있음
  • Early Stopping : 오차가 줄어들지 않으면 멈춘다.

모듈 불러오기

from keras.callbacks import EarlyStopping
es = EarlyStopping(monitor = 'val_loss', min_delta = 0, patience = 0)

 

early stopping 선언

# min_delta와 patience 조절
md = 0.01
pa = 5

es = EarlyStopping(monitor = 'val_loss', min_delta = md, patience = pa)

 

⭐fit에 작성한다

model.fit(x_train, y_train, epochs = 100, validation_split = .2, callbacks = [es])

 


📁모델 저장하기

 

✔저장하기

h5 파일 포맷 : 하둡파일 형식

model.svae('모델이름.h5')

 

'피클링'한다 => 저장한다.

 

로딩하기

# keras

from keras.models import load_model
model = load_model('모델')

 

CNN

특징(feature)을 얻어 필터(=특징추출기)를 만들어서 타켓(target)을 인지

- 컬러/흑백에 상관없이 cnn은 3차원 분석

 

색상 행,열, 컬러/흑백
흑백 (225, 255, 1) (28, 28, 1)
컬러 (255, 255, 3) (28, 28, 3)

# 분석단위 (28, 28, 1)에서 맨 뒤의 숫자 1은 흑백이미지, 3은 컬러이미지(RGB)

 

① input_shape : 분석단위의 크기

  • 3차원 이미지로 입력 받음
  • 흑백 : 채널 = 1
  • 컬러 : 채널 = 3

 

② 필터를 찾는다(만든다)

  • Conv2d(Convolutional) Layer : 필터로 지역적 특성(feature)를 뽑아내는 레이어
  • 활성화함수 : relu

 

③ 결과(뽑은 특징)에 대해 압축해라

  • Max pooling Layer : conv로 뽑아낸 특성을 '압축'
  • 활성화함수 : relu

 

④ 쭉 펼서(Flatten), Dense Layer에 연결

  • Flatten : reshape로 펼치는걸 뚝딱 해주는 함수
  • 활성화함수 : 필요 X

conv2d = 3차원 2차원화
flatten = 2차원 1차원화

 


CNN 코드

 

더보기

Convolutional Neural Network (CNN)에서 Conv2D 레이어와 Pooling 레이어는 각각 다음과 같은 역할을 합니다.

1. Conv2D 레이어
- Conv2D 레이어는 이미지나 비디오와 같은 2D 데이터에서 특징을 추출합니다.
- Conv2D 레이어는 필터(filter)라는 작은 크기의 행렬을 사용하여 입력 이미지에서 특징을 추출합니다.
- 이러한 필터는 입력 이미지를 훑으면서 특징 맵(feature map)을 생성합니다.
- Conv2D 레이어는 가중치(weight)를 학습하여, 입력 이미지의 특징을 추출하고, 이를 토대로 분류, 검출, 세분화 등의 작업을 수행합니다.

2. Padding(패딩)
Conv2D 레이어에서 패딩(padding)은 입력 데이터의 주위에 0으로 된 가상의 경계를 추가하는 기술입니다. 패딩을 추가함으로써 출력 특성 맵의 크기를 조정할 수 있습니다. 패딩을 사용하면 다음과 같은 이점이 있습니다.
- 경계 문제(boundary problem)를 해결할 수 있습니다.
   ->입력 데이터의 경계에서 특징을 추출하기 어려운 문제를 해결할 수 있습니다.

- 출력 특성 맵의 크기를 조정할 수 있습니다.
   ->패딩을 사용하여 출력 특성 맵의 크기를 조정할 수 있습니다. 이를 통해 계산에서 정보의 손실을 줄일 수 있습니다.


3. Pooling 레이어
- Pooling 레이어는 Conv2D 레이어에서 생성된 특징 맵의 크기를 줄이는 역할을 합니다.
- Pooling 레이어는 일반적으로 Max Pooling과 Average Pooling이 사용됩니다.
- Max Pooling은 각 영역에서 가장 큰 값을 선택하여 다음 레이어로 전달합니다. 이를 통해 특징 맵의 크기를 줄이고, 불필요한 정보를 제거할 수 있습니다.
- Average Pooling은 각 영역에서 평균 값을 선택하여 다음 레이어로 전달합니다. 이를 통해 특징 맵의 크기를 줄이고, 불필요한 정보를 제거할 수 있습니다.
- Pooling 레이어를 사용하지 않으면 Conv2D 레이어가 생성한 특징 맵의 크기가 매우 커지므로, 모델의 크기가 커지고, 연산 속도가 느려질 수 있습니다. 따라서 Pooling 레이어를 사용하여 특징 맵의 크기를 줄이는 것이 일반적입니다.

clear_session()

model = Sequential([ Conv2D(32, kernel_size=(3, 3), input_shape =(28, 28, 1), # (3,3)과 3 같음
                            padding='same', activation = 'relu'),  # stride = 1 기본값
                     MaxPooling2D(pool_size=2, strides=2),  # stride = pool_size 기본값  # (2,2)와 2 같은
                     Conv2D(64, kernel_size= (3, 3), padding='same', activation = 'relu'),
                     MaxPooling2D(pool_size=(2, 2), strides=2),
                     Flatten(),
                     Dense(128, activation = 'relu'),
                     Dense(10, activation = 'softmax')
])

model.summary()
# 입력데이터 형식을 갖추기
# 28, 28, 1 이미지가 1장
test_num = img.reshape(1,28,28,1)
728x90