728x90
📌CNN 아키텍처와 동작방식
▶convolution layer 합성곱층
: input 이미지에 합성곱 연산으로 feature map 생성한다.
▶Activate funtion 활성화 함수
: 일반적으로 ReLu 사용, 비선형을 추가해 모델의 표현력 향상시킨다.
▶convolution layer
: feature map의 크기를 줄이고 정보 유지. max pooling/average pooling
📌CNN 코드 예제 및 해석
# CNN 아키텍처 구성을 위한 클래스 정의
class CNN(nn.Module):
def __init__(self, num_classes):
super(CNN, self).__init__()
# Convolutional Layer
self.conv1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=3, stride=1, padding=1)
# Activate funtion
self.relu = nn.ReLU()
# pooling layer - maxpooling
self.maxpool = nn.MaxPool2d(kernel_size=2, stride=2)
# Fully Connected Layer
self.fc1 = nn.Linear(in_features=16 * 14 * 14, out_features=64)
self.fc2 = nn.Linear(in_features=64, out_features=num_classes)
def forward(self, x):
# Convolutional Layer
print(f"start conv: {x.shape}")
x = self.conv1(x)
print(f"after conv: {x.shape}")
x = self.relu(x)
print(f"after relu: {x.shape}")
x = self.maxpool(x)
print(f"after maxpooling: {x.shape}")
# Flatten
x = x.view(x.size(0), -1)
# Fully Connected Layer
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
class 전체적으로 해석하자면 def __init__에서는 layer를 정의해준다.
conv 합성곱으로 feature map 지정해준다
ReLu 함수 -> maxpooling
# 입력 데이터 생성 (batch_size=1)
input_size = (1, 28, 28) # MNIST 이미지의 채널, 높이, 너비
input_data = torch.randn((1,) + input_size)
print(input_data.shape)
# 모델 생성 및 MNIST 데이터셋에 맞게 입력 크기 설정
model = CNN(num_classes=10)
# 모델에 입력 데이터 전달하여 출력 확인
output = model(input_data)
print(output.shape) # 출력 크기 확인
▶input/output 차원 분석
input = (1,1,28,28)
conv2 -> (1,16,28,28)
ReLu -> 유지
Maxpooling2d (1,1,14,14)
Faltten -> 3차원->2차원 (1, 16, 14, 14)의 출력을 (1, 16 x 14 x 14)인 (1, 3136)으로 변환
f1 -> 특성 수가 3136이고 출력 특성 수가 64인 Fully Connected 레이어-> (1, 64)
f2 -> 특성 수 64 ->(1,10)
728x90
'열심히 코딩할래 > AI 해볼까' 카테고리의 다른 글
[MS Azure] 애저로 윈도우 가상환경 만들기 (0) | 2023.04.24 |
---|---|
[MS Azure] 학생용 애저 마이크로소프트 무료로 서버 사용하기 (0) | 2023.04.23 |
[javascript] 자바스크립트 함수, 화살표 함수 (0) | 2023.04.10 |
[CSS] 수도선택자(Pseudo Selector) : 링크 꾸미기, 마우스 놓으면 바뀌게하기 (0) | 2023.04.07 |
[CSS] 글씨 꾸미기, 글자 크기(font-size),폰트(font-family), font-style (0) | 2023.04.06 |