일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ubuntu
- SWEA
- 3단계
- 구현
- AWS
- pytorch
- 모두를 위한 딥러닝 강좌 시즌1
- 1단계
- 백준
- docker
- 그리디
- MySQL
- 코드수행
- Python
- cs
- 이것이 코딩테스트다 with 파이썬
- Object detection
- STL
- 프로그래머스
- ssd
- C++
- CS231n
- 머신러닝
- 실전알고리즘
- 파이썬
- 자료구조 및 실습
- test-helper
- 2단계
- 딥러닝
- 전산기초
- Today
- Total
곰퓨타의 SW 이야기
Lab 10-1 Convolution 본문
www.boostcourse.org/ai214/lecture/43764/?isDesc=false
파이토치로 시작하는 딥러닝 기초
부스트코스 무료 강의
www.boostcourse.org
Convolution?
이미지 위에서 stride 값 만큼 filter(kernel)을 이동시키면서 겹쳐지는 부분의 각 원소의 값을 곱해서 모두 더한 값을 출력으로 하는 연산이다.
output의 가장 첫번째 칸인 8이 나오는 과정은 다음과 같다!!
Stride and Padding
stride : filter를 한 번에 얼마나 이동할 것인가 (몇 칸씩 이동할 것인가)
padding : zero-padding 가장자리에 0을 추가한다.
Pytorch에서는 nn.Conv2d로 convolution layer 사용이 가능하다.
torch..Conv2d(in_channels, out_channels, kernel_size, stride = 1, padding=o, bias = True ...)
입력채널이 1이고, 출력채널이 1이고, 커널크기가 3x3인 경우,
conv = nn.Conv2d(1,1,3)이 된다.
<입력의 형태> out = conv(input)할 때 input에 해당하는 것
input type : torch.Tensor
input shape : (NXCXHXW) (batch_size, channel, height, width)
<Convolution의 output 크기>
(32 - 5 + (2*2)) / 1 + 1 = 32
소숫점이 발생한다면 버림한다..!
32x32
input image size가 width, height가 다르면 각각 연산해주면 된다!!
import torch
import torch.nn as nnn
conv = nn.Conv2d(1,1,5,stride=1, padding= 2)
inputs = torch.Tensor(1,1,32,32)
out = conv(inputs)
# torch.Size([1,1,32,32])
Neuron과 Convolution
filter 또한 bias를 가질 수 있다.
Pooling
image size를 줄이기 위해 사용하거나, fully-connected 연산을 대체하기 위해서 사용하기도 한다.
torch에서는
torch.nn.MaxPool2d(kernel_size, stride = None, padding=0, dilation=1, return_indices=False, ceil_mode = False)를 통해 사용한다.
[CNN implementation]
import torch
import torch.nn as nn
input = torch.Tensor(1,1,28,28)
# input channel : 1개 , output channel : 5개, channel size : 5
conv1 = nn.Conv2d(1,5,5)
# pooling : 2x2
pool = nn.MaxPool2d(2)
out = conv1(input)
out2 = pool(out)
out.size()
# torch.Size([1,5,24,24])
out2.size()
# torch.Size([1,5,12,12])
[Conv2d]
torch.nn.Conv2d(in_channels , out_channels, kernel_size, stride = 1,padding = 0, dilation = 1, groups = 1, bias = True)
(=> cross-correlation)
--> What is convolution ?
f*g 인 경우 g가 뒤집어서 들어감, 많이 겹칠수록 커짐
--> cross-correlation
g*f 에서 g 가 뒤집어서 들어가지 않고, 이 또한 많이 겹칠수록 커진다.
'인공지능 > 부스트코스_파이토치로 시작하는 딥러닝 기초' 카테고리의 다른 글
Lab 10-3 visdom (0) | 2021.03.10 |
---|---|
Lab 10-2 Mnist CNN (0) | 2021.03.09 |
파이토치로 시작하는 딥러닝 입문 관련 책!! (0) | 2021.02.26 |
Lab 09-4 Batch Normalization (0) | 2021.02.26 |
Lab 09-3 Dropout (0) | 2021.02.25 |