본문 바로가기
파이토치

[파이토치] 파이토치로 Convolution 이해하기, torch.nn/nn.Conv1d/nn.Conv2d

by mhiiii 2024. 12. 18.
728x90
728x90

torch.nn

torch.nn은 PyTorch의 핵심 모듈 중 하나로, 신경망 모델을 정의하고 구성하기 위한 다양한 클래스와 함수를 제공

import torch.nn as nn

nn.Conv1d

파이토치에서 1차원 컨볼루션 레이어를 정의하는 클래스

 

1차원 컨볼루션은 입력 데이터의 한 방향(주로 시계열 데이터에서는 시간 축)으로 컨볼루션 연산을 수행

2차원 컨볼루션이 가로, 세로로 모두 이동하면서 계산되는 것과 다르게 1차원 컨볼루션 연산은 가로로만 이동

nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')

 

  • in_channels: 입력 데이터의 채널 개수
  • out_channels: 출력 데이터의 채널 개수, 곧 필터의 개수
  • kernel_size: 컨볼루션 필터(커널)의 크기
  • stride: 컨볼루션 필터의 이동 간격
  • padding: 입력 데이터에 대해 가상의 패딩을 추가
  • dilation: 컨볼루션 필터 내의 값 사이의 간격
  • groups: 입력 데이터와 출력 데이터의 채널을 그룹화하여 연산
  • bias: 편향(bias) 사용 여부를 결정하는 불리언 값

예제 코드

import torch
import torch.nn as nn

# 입력 데이터의 크기: (배치 크기, 채널, 시퀀스 길이)
input_size = (16, 3, 100)

# 1차원 컨볼루션 레이어 정의
conv1d = nn.Conv1d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)

# 입력 데이터 생성
input_data = torch.randn(input_size)

# 컨볼루션 연산 수행
output = conv1d(input_data)

# 출력 데이터의 크기: (배치 크기, 출력 채널, 출력 시퀀스 길이)
print("Output size:", output.size())

Output size: torch.Size([16, 16, 100])

 

1차원 input은 [Batch size, Feature dimension(in_channels), time step(시퀀스 길이)]

time step마다 feature dimension이 존재하는 2차원 배열이 들어옴

커널은 시간 축에만 적용 !! (가로 방향으로만)

 

커널은 out_channels만큼 생성 

 

최종 output은 [Batch size, Feature dimension(out_channels), kernel로 변경된 Time_step] 


nn.Conv2d

파이토치(PyTorch)에서 제공하는 2D 컨볼루션(Convolution) 레이어 클래스

 

이미지나 2D 데이터의 특징 추출에 주로 사용

 

nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

 


예제 코드

import torch
import torch.nn as nn

# 입력 데이터의 크기: (배치 크기, 채널, 높이, 너비)
input_size = (64, 3, 32, 32)

# Conv2d 레이어 정의
conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1)

# 입력 데이터 생성
input_data = torch.randn(input_size)

# 컨볼루션 연산 수행
output = conv(input_data)

# 출력 데이터의 크기 출력
print("Output size:", output.size())

Output size: torch.Size([64, 64, 32, 32])

 

2차원 input은 [Batch size, Feature dimension(in_channels), height, width]

 

최종 output은 [Batch size, Feature dimension(out_channels), height , width] 

 

 

 

References

https://wikidocs.net/194947

https://sanghyu.tistory.com/24

 

[PyTorch] 시계열 데이터를 위한 1D convolution과 1x1 convolution

오늘은 시계열 데이터처리에 많이 사용되는 1D convolution이 PyTorch에 어떻게 구현되어 있는지와 어떤 파라미터가 존재하는지 차원은 어떻게 계산하는 지를 정리해 보려고 한다. 자꾸 까먹는 나 자

sanghyu.tistory.com

https://deep-learning-basics.tistory.com/21

 

2D convolution (Conv2d) 과정의 이해

* * * RGB 3개 채널을 가진 입력 컬러 사진이 있을 때, 입력의 크기를 3x7x7 이라고 하자. (3은 채널 개수) 이때 필터 (커널) 의 크기가 3x5x5 이면 필터 종류 2가지를 통과했을 때 output feature map 이 나오

deep-learning-basics.tistory.com

 

728x90