[에이블스쿨 8주차] 딥러닝4
📝지난 수업을 정리해 봅시다~
🤔히든레이어가 많으면 무조건 좋나요?
아니요!
히든레이어(은닉층)가 많다고 해서 성능이 무조건 개선되는 것은 아닙니다. 오히려 성능이 떨어질 수 있도 있어요.
🍯꿀팁
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)